пятница, 12 июля 2013 г.

Установка и настройка Apache + OpenSSL, PHP, MySQL под Windows Server 2012


Время идет :) верней несется :). Сегодня будем устанавливать и настраивать на Windwos Server 2012 Data Center расположенный в облаке Azure следующие компоненты:
  • Apache 2.2.25 (Win32 x86) с OpenSSL 0.9.8y (download)
  • PHP 5.4.17 (Win32, VC9 x86 Thread Safe) (download)
  • MySQL 5.6.12.2 (x64) (download)
Так как мы хотим подготовить сервер для реального домашнего хостинга, то сразу создадим структуру каталогов для нашего сервера и сайтов. Исполняемые (бинарные) файлы, а так же файлы конфигурации Apache, PHP, MySQL и т.д., мы разместим на одном диске (в моем случае диск F), а файлы наших сайтов, баз данных и лог файлы на другом диске (в моем случае диск G).

A0001
И так поехали!
1) В корне диска F: создаем папку iServer и в ней создаем папку PHP
2) Прописываем путь к папке PHP в системную переменную PATH. Для этого выполняем следующие операции:
  • нажимаем клавиши  Windows+Break
  • выбираем Advanced System Settings
  • далее выбираем Environment Variables
  • в части System Variables выбираем параметр PATH, клацаем по нему два раза и добавляем к концу строки наш путь (с точкой запятой перед ним) ;F:\iServer\PHP
A0002
  • Затем клацаем везде ОК и делаем выход из системы и снова входим. Это нужно для того чтобы переменная Path получила новое значение.
  • Запускаем cmd.exe и проверяем что переменная Path получила новое значение введя команду set и жмакнув по Enter
A0003
3) В корне диска G: создаем две папки iSites (тут будут лежать наши сайты) и iLogs (тут будут жить общие логи сервера).
4) В папке G:\iSites создаем два подкаталога localhost и testru и далее в каждом из них свои подкаталоги www,log и ssl
A0004
5) Скачиваем дистриб Apache под Win32 с поддержкой SSL (на момент написания статьи httpd-2.2.25-win32-x86-openssl-0.9.8y.msi). И запускаем на выполнение.
6) На этом окошке смело жмем Next

A0005
7) Принимаем лицензионное соглашение

A0006
8) Внимательно и вдумчиво читаем вот это...

A0007
9) Заполняем все поля как на скриншоте

A0008
10) Выбираем Custom

A0009
11) Выбираем опции как на скриншоте и путь установки F:\iServer\Apache

A0010
12) Жмакаем Install...

A0011
13) После установки в трее должен появиться значек консоли управления сервисом - Apache  A0012
Если по нему дважды клацкнуть, то должно открыться окошко управления сервисом

A0013
14) Проверяем установку запустив браузер и введя в строке адреса localhost. Видим страницу с надписью It Works!. Радуемся жизни. Что-то уже работает.

A0014
15) Далее отыскиваем файлик hosts, который обычно находится по пути C:\WINDOWS\system32\drivers\etc\ и добавляем в него запись 127.0.0.1 test.ru и сохраняем.

A0015
Это укажет браузеру где искать наш тестовый домент test.ru. Кстати, заметьте, что в файле уже присутствует запись 127.0.0.1 localhost. Именно по этому браузер и узнал ip сайта localhost, когда мы ввели это имя в строке адреса браузера. Проверяем теперь это в браузере.

A0016
Но не шибко радуемся. Так как это еще не мультихостинг. :) Для него еще много что надо настроить.
16) Теперь будем прикручивать PHP. На текущий момент это версия PHP 5.4.17. Качаем дистриб в ZIP архиве. Еще раз повторюсь не инсталер с расширением .MSI, а именно ZIP архив. Файлик на момент написания статьи называется php-5.4.17-Win32-VC9-x86.zip, вот его и качаем.
17) Разархивируем содержимое скачанного архива в папку F:\iServer\PHP
18) Прикручивать PHP к Apache будем как модуль Apache. Для этого идем в каталог F:\iServer\Apache\conf, и добавляем в файлик httpd.conf в окончание блока инструкций LoadModule (в строки 130 и 131) две строки:
LoadModule php5_module "F:/iServer/PHP/php5apache2_2.dll"
PHPIniDir "F:/iServer/PHP/"

19) Находим в файлике httpd.conf инструкции AddType, в конец этого блока (в моем случае в строку 409) вставляем инструкцию:
AddType application/x-httpd-php .php
20) Находим в файле httpd.conf блок инструкций DirectoryIndex. И добавляем в инструкцию DirectoryIndex указание на файл index.php. Чтобы в конечном виде инструкция выглядела так:
DirectoryIndex index.html index.php
Сохраняем httpd.conf и выходим.
21) Переименовываем или копируем файл php.ini-production (в каталоге F:\iServer\PHP) в файл php.ini.
22) Находим в файле php.ini строку short_open_tag = Off. И приводим ее к виду short_open_tag = On
23) Создаем в каталоге R:\Server\Apache\htdocs файлик phptest.php и пишем в нем следущий код:
<?
phpinfo();
?>
Сохраняем файлик.
24) Останавливаем и снова запускаем Apache через консоль управления Apache. После перезапуска Apache можно открыть окно управления сервисом Apache дважды кликнув по иконке в трее. Должны увидеть следующее окошко:
A0017
Обратите внимание, что в статусной панели сервиса управления Apache отображается, что так же загружен модуль PHP и указана его версия.
Если вы этого не увидели, то сверните окошко и разверните его снова. Если и это не помогло, значит, что то сделали не так и 25 шаг, скорее всего у вас сделать не получится.
25) Тестируем работу PHP. Набираем в браузере http://localhost/phptest.php и видим следующую картинку и радуемся жизни. PHP заработал:
A0018
Если такого не видим, то повторяем все шаги снова, до тех пор пока не увидим :).
26) Позаботимся немного о безопасности нашего сервера. По умолчанию, при установке, сервис Apache запускается под пользователем SYSTEM, который имеет в системе максимальные права. Это не есть гуд. Сейчас будем исправлять эту ситуацию.
  • создаем учетную запись iUser и назначаем ей пароль срок действия которого ни когда не истекает
  • проверяем чтобы она входила только в группу пользователи
  • запрещаем для пользователя iUser локальный вход и выставляем право работать в режиме операционной системы и вход в качестве службы через оснастку gpedit.msc
A0019
  • Даем учетной записи iUser право на запись в папку F:\iServer\Apache\logs. И только в эту папку. По умолчанию в другие папки доступа на запись и не должно быть. Потом, после переноса файлов логов сервера в другое место, права на эту папку для iUser можно убрать, так как они будут не нужны.
  • Через оснастку управления службами устанавливаем запуск сервиса Apache2.2 под учетной записью iUser
A0020
  • Перезапускаем службу Apache2.2
  • Ну и проверяем работу зайдя по адресу http://localhost
27) Настраиваем виртуальные хосты. На 4 шаге мы создали структуру расположения сайтов на нашем сервере. Теперь, так же, выдаем права для учетной записи iUser на запись в папку G:\iLogs, а на папку G:\iSites (со всеми ее подкаталогами), только на чтение, за исключением подкаталогов log, для которых даем право на запись.
Кроме того, для некоторых CMS типа Joomla, нужно будет дать разрешение отдельно и только на запись в файл конфигурации. Это еще одна из настроек безопасности для сайта. Ну это так для общего развития инфа :)
28) Идем в папку F:\iServer\Apache\conf\extra и редактируем файл httpd-vhosts.conf. Приводим его к вот такому виду:

A0021
29) Раскомментируем в файле httpd.conf строчки
LoadModule logio_module modules/mod_logio.so
Include conf/extra/httpd-vhosts.conf

30) В файле httpd.conf находим строку DocumentRoot "F:/iServer/Apache/htdocs" и меняем ее на DocumentRoot "G:/iSites/localhost/www"
31) В файле httpd.conf находим строку <Directory "F:/iServer/Apache/htdocs"> и меняем ее на <Directory "G:/iSites">
32) В файле httpd.conf находим строку ErrorLog "logs/error.log" и меняем ее на ErrorLog "G:/iLogs/error.log"
33) В файле httpd.conf находим строку CustomLog "logs/access.log" common и меняем ее на CustomLog "G:/iLogs/access.log" combinedio
34) В каталоге G:\iSites\localhost\www создаем файлик index.html со следующим содержимым:
<H1>It is my LocalHost</H1>
35) В каталоге G:\iSites\testru\www создаем файлик index.html со следующим содержимым:
<H1>It is my TEST.RU</H1>
36) Рестартуем Apache. Заходим браузером по адресу http://localhost и видим следующие:

A0022
Заходим по адресу test.ru и видим следующее:

A0023
Радуемся реально работающему виртуальному хостингу.
Если не видим, то не радуемся. И ищем где ошиблись.
37) Языковые настройки. Редактируем файлик F:\iServer\Apache\conf\extra\httpd-languages.conf. Комментируем все строки AddLanguage с теми языками, которые нам не нужны. Я оставил только строки:

AddLanguage en .en
AddLanguage ru .ru

Находим строку LanguagePriority и убираем там все языки, которые не нужны. У меня эта строчка выглядит так:

LanguagePriority en ru

Сохраняем файл.

В файле httpd.conf расскомментируем строчку Include conf/extra/httpd-languages.conf.

38) Включаем SSI. В файле httpd.conf находим строки:

AddType text/html .shtml
AddOutputFilter INCLUDES .shtml

И расскоментируем их.
Находим блок <Directory "G:/iSites"> и в нем строку Options Indexes FollowSymLinks. Приводим ее к виду Options Indexes FollowSymLinks Includes

Сохраняем файл.
39) В каталоге G:\iSites\localhost\www создаем файл ssi.html со следующим содержимым:

SSI тест прошел успешно - ssi.html!

Затем, там же создаем файл ssitest.shtml со следующим содержимым:

<!--#include virtual="/ssi.html" -->

40) Рестартуем Apache. В броузере вводим адрес http://localhost/ssitest.shtml и видим следующее:

A0024
Радуемся что работает русский язык и SSI. Если не увидели, то упорно ищем ошибку.
41) Вот и настала очередь мускула. Скачиваем x64 версию 5.6.12.2 MySQL (эта последняя на момент написания статьи и файлик назывался mysql-installer-community-5.6.12.2.msi). Стоит обратить внимание что хоть файл msi 32 разрядный, но он устанавливает обе версии x32 или x64 в зависимости от платформы. И так, клацаем по нему и понеслась установка…
сперва мелькнет вот такой экран

A0025
потом такой

A0026
и вот на этом выбираем  Install MySQL Products

A0027
42) Соглашаемся с лицензией и жмем Next

A0028
43) Ставим еще одну галку… ну не надо нам проверять наличие новой версии… и так новую уже качнули самую новую
A0029
44) Выбираем пункт меню Custom и каталоги где будут размещаться бинарные файлы и файлы баз данных. Восклицательный знак в желтом треугольнике предупреждает, что каталог для данных уже существует. Но я сам его создал и он пустой, так что все ок. Жмем Next…

A0030
45) Теперь кастомизируем :)

A0032
И жмакаем Next
46) Тут может потребовать еще установить недостающие компоненты типа библиотек VC, если попросил, то качаем, ставим и продолжаем установку. У меня уже стоял редистрибютив VC10, так что просто жмем Next

A0033
47) Терь жмем Execute

A0034
48) Отекзекютили… :) и жмем Next

A0035
49) Опять жмем Next

A0036
50) Выбираем все как на скрине и жмем Next

A0037
51) Задаем root пароль для MySQL и создаем первого пользователя – администратора баз данных
обращаем внимание что поле Current Root Password оставляем пустым

A0038
A0039
A0040
И жмем Next
52) Задаем как будет называться наш сервис MySQL в службах винды и так же пользователя под которым она будет запускаться. И очень важно!!! Пользователю iUser надо  дать разрешение на запись в папку G:\iMySQLData и все ее подпапки.

A0041
53) Задаем где будут жить логи скуля и жмем Next

A0042
54) Опять жмем Next

A0043
55) Жмем Finish

A0044
56) Проверяем работу MySQL (пока отдельно без привязки к Apache и PHP). Даем из командной строки команду

"F:\iServer\MySQL\MySQL Server 5.6\bin\mysql.exe" -h localhost -P 3306 -u root -p

на запрос пароля вводим пароль и даем команду

show databases;

видим это:
A0045
И радуемся если видим. Если не видим, чешем репу и ищем ошибки.

57) Прикручиваем MySQL к Apache, хотя вернее сказать к PHP, ну а он уже прикручен к Apache. Вот такой паровозик получается. Итак редактируем файлик F:\iServer\PHP\php.ini. Находим в нем строчки
extension=php_mysql.dll
extension=php_mysqli.dll

и раскомментируем их. Затем находим строку mysql.default_port = и приводим ее к виду mysql.default_port = 3306. Далее находим строку mysql.default_host = и приводим ее к виду mysql.default_host = localhost
Находим строку extension_dir = "ext", расскомментируем ее и приводим ее к виду extension_dir = "F:/iServer/PHP/ext"
Указывая этим самым где находятся файлы расширений PHP.

Перезапускаем Apache.

В каталоге G:\iSites\localhost\www создаем файлик mysqltest.php и вводим туда следующий код:

<?php
$db = mysql_connect("localhost", "root", "ВАШ ROOT ПАРОЛЬ К MySQL")
or
die("Could not connect : " . mysql_error());
mysql_select_db("test",$db) or die ("Could not select database");

$date = mysql_query("SELECT CURDATE()") or die ("Query failed: " . mysql_error());
echo mysql_result($date, 0);
mysql_close($db);
?>

В броузере вводим адрес http://localhost/mysqltest.php и если все сделали правильно, то видим текущую дату.

58) Включим функции PHP для работы с графикой. Редактируем файлик F:\iServer\PHP\php.ini. Находим строку extension=php_gd2.dll  и расскоментируем ее. Перезапускаем Apache.

59) В каталоге G:\iSites\localhost\www создаем файлик gdtest.php и вводим следующий код:

<?
$pic=imagecreate(350,100);
$piccolor=imagecolorallocate($pic, 255,255,255);
$textcolor=imagecolorallocate($pic, 0,0,0);
$linecolor=imagecolorallocate($pic, 0,0,255);
$text="GD test successful - gdtest.php!";
imagerectangle($pic, 1,99, 349,0, $linecolor);
imagestring($pic,5,30,40, $text, $textcolor);
header("content-type: image/png");
imagepng($pic);
imagedestroy($pic);
?>


Вводим в браузере адрес http://localhost/gdtest.php и видим:




A0046 
Радуемся жизни... Если видим. Да и если даже не видим, все  равное радуемся :)

60) Теперь настроим rewrite_module, оч полезная штука :). В файле httpd.conf расскомментируем строчку

LoadModule rewrite_module modules/mod_rewrite.so

Далее ищем конструкцию

<Directory />
    Options FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
</Directory>

И заменяем в ней строку AllowOverride None на строку AllowOverride All
Затем чуть ниже так же будет просто строка AllowOverride None ее надо поменять на AllowOverride All
Это включает обработку ВСЕХ параметров ВСЕХ .htaccess во всех каталогах.

Теперь проверяем работу модуля rewrite. Рестрартуем Apache

В каталоге G:\iSites\localhost\www создаем файлик .htaccess и в него вносим одну строку


Redirect /index.html http://ya.ru



эта строка перенаправляет с файла index.html на сайт ya.ru

В браузере просто набираем localhost и нас должно перебросить на страничку ya.ru

Если сработало, то все настроили правильно. Ну а если нет, то ищем где накосячили.

Комментариев нет: