Разворачиваем девелоперский сервер под Windows
Суббота, вечер, захотелось развернуть веб-сервер полностью с нуля вместо того, чтобы очередной раз использовать готовые сборки.Вы можете спросить зачем?
Во-первых для контроля, во-вторых для того, чтобы разобраться как что подключать и где в конфигах искать нужную информацию. В будущем вам это может пригодиться на настоящих серверах.
Заодно прикрутил очень удобную утилиту-заглушку для почты.
Итак, разворачиваем девелоперский сервер под Windows.
Тестировалось на Windows XP и Windows Vista. Буду благодарен за отзыв на Windows 7.
Внимание, под катом много букоф и траффика о том, как сделать связку apache/php/mysql/phpmyadmin/почта под Windows с нуля и все настроить.
Скачиваем нужные дистрибутивы
apache — httpd.apache.org/download.cgi
Win32 Binary including OpenSSL 0.9.8k (MSI Installer) (apache_2.2.14-win32-x86-openssl-0.9.8k.msi)
php — windows.php.net/download/
VC6 x86 Thread Safe, zip. Не скачивайте автоматический установщик, качайте zip. (php-5.3.0-Win32-VC6-x86.zip)
mysql — dev.mysql.com/downloads/mysql/5.1.html#win32
Windows Essentials (x86) (mysql-essential-5.1.39-win32.msi)
Test mail server tool — toolheap.com/test-mail-server-tool/ (TestMailServerToolSetup.exe)
phpmyadmin — www.phpmyadmin.net/home_page/downloads.php (phpMyAdmin-3.2.2-all-languages.zip)
Установка
Создадим где-нибудь директорию, куда мы будем устанавливать все, что нам понадобится.
У меня это C:\WebServer
Создадим следующую структуру директорий:

mkdir C:\WebServer C:\WebServer\Apache C:\WebServer\PHP C:\WebServer\MySQL C:\WebServer\SMTP C:\WebServer\Temp C:\WebServer\Temp\Session C:\WebServer\Temp\UploadTempУстанавливаем apache

Выставляем localhost и какой-нибудь адрес электронной почты. Можно выдуманный =)


Выбирайте C:\WebServer\Apache в качестве пути установки.
После того, как установка завершится, вы должны увидеть в трее значок, который покажет что сервер работает.

Там же можно отстановить\перезапустить сервер.

Сервер стартует как сервис, настроить поведение можно в панели управления — администрирование -> сервисы. Логи апача (не доступ к сайту, а самого апача) можно найти в панели управления -> администрирование -> просмотр событий -> приложения.
Если apache у вас не стартует, скорее всего порт 80 уже занят. Его нужно освободить, либо установить другой порт для apache.
Теперь можно перейти в браузере по адресу localhost и увидеть «It works!».
Установка php
PHP просто распаковываем в директорию C:\WebServer\PHP
Установка mysql


Выбирайте директорию C:\WebServer\MySQL в качестве пути для установки

Запустим сразу же конфигурацию.
Большинство опций остается по-умолчанию, некоторые изменим.

Постепенно все переводят свои приложения/сайты на utf-8 и я рекомендую выбрать эту кодировку по-умолчанию.

Добавьте исполняемые файлы в path, вам будет проще работать.
MySQL тоже стартует как service.

Задайте пароль для root. Доступ снаружи можно будет потом добавить, если потребуется, с помощью mysql administrator или через консоль mysql.
После установки сервис должен успешно стартануть.
Проверим работоспособность.
Нажмите Win + R и введите:
mysql --user=root --password=ваш_пароль_рута
Если вы увидели консоль mysql, то все ок. Чуть позже нам понадобится эта консоль.
Устанавливаем SMTP заглушку
Запускайте на установку TestMailServerToolSetup.exe, который скачали ранее.

В качестве пути установки выбирайте C:\WebServer\SMTP
Создаем структуру директорий для сайтов
Для начала создадим директорию, где будут храниться сайты. В будущем, конечно же, все это можно будет поменять и сделать более гибким, приспособленным под ваши нужды.
В качестве базовой директории для сайтов я выбрал C:\www
Создадим директории для localhost и тестового сайта testdomain.com
В них нам нужно создать директории htdocs и два пустых файла: error.log и access.log (логи апача к этим сайтам).
Также внутри htdocs нужно создать index.html c содержимым, например «Hello, localhost!» и «Hello, testdomain!»

mkdir C:\www C:\www\localhost C:\www\testdomain.com C:\www\localhost\htdocs C:\www\testdomain.com\htdocs && cd C:\www\localhost\htdocs && echo "Hello, localhost!" > index.html && cd C:\www\localhost && echo. > error.log && echo. > access.log && cd C:\www\testdomain.com\htdocs && echo "Hello, testdomain!" > index.html && cd C:\www\testdomain.com && echo. > error.log && echo. > access.logНастраиваем apache на новую структуру директорий и виртуальные сервера
C:\WebServer\Apache\conf\ содержит конфигурационные файлы. Если вы что-то испортите, то всегда можно будет вернуться к исходному состоянию или просто сравнить файлы, заглянув в директорию C:\WebServer\Apache\conf\original\. Здесь хранятся оригинальные настройки. Так что можно экспериментировать не боясь.
Основной файл конфигурации — httpd.conf
Изменяя конфигурацию apache, необходимо всегда перестартовывать его, чтобы изменения подхватились.
Итак, меняем настройки apache на новую структуру директорий.
В httpd.conf:
Меняем DocumentRoot «C:/WebServer/Apache/htdocs» на DocumentRoot «C:/www/».
Чуть ниже найдем директиву
<Directory «C:/WebServer/Apache/htdocs»>
И заменим путь и здесь.
<Directory «C:/www/»>
В файле httpd.conf найдите:
#Include conf/extra/httpd-vhosts.conf
И раскомментируйте (удалите #).
Далее заходим в extra и открываем httpd-vhosts.conf.
Вы увидите две секции <VirtualHost *:80>
Удалите обе секции и замените на следующее:
<VirtualHost *:80>
ServerAdmin admin@localhost
DocumentRoot "C:/www/localhost/htdocs/"
ServerName localhost
ErrorLog "C:/www/localhost/error.log"
CustomLog "C:/www/localhost/access.log" common
</VirtualHost>
<VirtualHost *:80>
ServerAdmin admin@testdomain.com
DocumentRoot "C:/www/testdomain.com/htdocs/"
ServerName testdomain.com
ErrorLog "C:/www/testdomain.com/error.log"
CustomLog "C:/www/testdomain.com/access.log" common
</VirtualHost>
Теперь добавим наш тестовый домен в файл %WinDir%\System32\drivers\etc\hosts, чтобы windows обращалась к локальному серверу, когда мы будем обращаться к testdomain.com:
echo. >> %WinDir%\System32\drivers\etc\hosts && echo 127.0.0.1 testdomain.com >> %WinDir%\System32\drivers\etc\hostsПерестартовываем апач.
localhost — должны увидеть «Hello, localhost!»
testdomain.com — должны увидеть «Hello, testdomain!»
(Собственно, так можно делать заглушки для тех сайтов, которые вы разрабатываете)
Теперь можно удалять C:\WebServer\Apache\htdocs\, все сайты у нас будут храниться отдельно.
И прежде, чем мы продолжим, пару слов:
В файле httpd.conf директивы в <Directory «C:/www/»> будут применены ко всем сайтам, кроме тех случаев, когда они не переопределены. Если вы обратите внимание, то по-умолчанию включен Indexes, а это позволит просматривать директорию сайта в том случае, если там нет индексного файла. Если вам не хочется переопределять это значение для каждого сайта отдельно — удалите это здесь и включайте в тех местах, где это понадобится. Тоже самое касается любых других директив.
Директивы для сайтов лучше добавлять в httpd-vhosts.conf или в .htaccess.
Включаем инструменты анализа работы сервера
В httpd.conf раскомментируем следующее:
LoadModule info_module modules/mod_info.so
LoadModule status_module modules/mod_status.so
Так подключаются отдельные модули apache.
В самом низу файла находим и раскомментируем
Include conf/extra/httpd-info.conf
Открываем файл C:\WebServer\Apache\conf\extra\httpd-info.conf на редактирование и вместо .localhost вводим 127.0.0.1 (в двух местах).
Перегружаем apache.
Теперь можно зайти по адресам:
localhost/server-status
localhost/server-info
Там будет предоставлена интересная информация по серверу. Рекомендую ознакомиться хотя бы немного.
Подключаем PHP
Открываем httpd.conf и находим директиву <IfModule mime_module>.
Внутри директивы добавляем:
PHPIniDir "C:/WebServer/PHP/"
LoadModule php5_module "C:/WebServer/PHP/php5apache2_2.dll"
AddType application/x-httpd-php .php
Если вы хотите обрабатывать другие файлы, как php, то добавьте их. Например:
AddType application/x-httpd-php .php .html .htm
Директива <IfModule dir_module>:
DirectoryIndex index.html
меняем на:
DirectoryIndex index.php index.html
Эта директива говорит о том, что индексным файлом может быть index.php и index.html. Вы можете добавить что угодно еще.
Создаем файл phptest.php в C:\www\localhost\htdocs\ с содержимым:
<?php
phpinfo();
?>
Перегружаем apache и заходим на localhost/phptest.php
Вы должны увидеть информацию о php.
Настраиваем PHP
Если вы обратите внимание на localhost/phptest.php, то увидите, что «Loaded Configuration File» установлен в (none).
Заходим в C:\WebServer\PHP\ и переименовываем php.ini-development в php.ini.
Перегружаем apache, обновляем страницу, мы должны увидеть новый конфигурационный путь: C:\WebServer\PHP\php.ini.
Теперь все настройки будем делать в этом файле.
Некоторые базовые настройки:
Директория, в которой будут хранится временные файлы, заливаемые на сервер (директорию мы создали выше):
upload_tmp_dir = "C:\WebServer\Temp\UploadTemp"
Директория, в которой будут хранится сессии (директорию мы создали выше):
session.save_path = "C:\WebServer\Temp\Session"
Если хотите писать <? вместо <?php, то поставьте в On следующее:
short_open_tag = Off
error_reporting — уровень вывода ошибок
log_errors — можно отключить, если ошибки выводятся на экран
post_max_size, upload_max_filesize — очень часто эти параметры приходится увеличивать для загрузки больших файлов
Другие настройки можно найти в документации к php.
Если вы меняете настройки php — нужно перегрузить apache.
Подключаем модули PHP
Откройте localhost/phptest.php и поищите по тексту curl. Вы не должны ничего найти. Подключим модуль curl.
В php.ini найдите закомментированный фрагмент extension_dir
Раскомментируйте и сделайте его таким:
extension_dir = "C:\WebServer\PHP\ext"
Найдите extension=php_curl.dll и раскомментируйте. Перегрузите apache и повторите поиск на странице localhost/phptest.php.
Если модуль успешно подключился — можно двигаться дальше.
MySQL
В php.ini раскомментируйте extension=php_mysql.dll и extension=php_mysqli.dll.
Перегрузите apache и проверьте, что модули подключились.
Создадим файл C:\www\localhost\htdocs\mysqltest.php с содержимым:
<?
$dblocation = "127.0.0.1";
$dbname = "information_schema";
$dbuser = "root";
$dbpasswd = "";
$dbcnx = @mysql_connect($dblocation, $dbuser, $dbpasswd);
if (!$dbcnx)
{
echo "Can not connect to mysql!";
exit();
}
if (!@mysql_select_db($dbname,$dbcnx) )
{
echo "Can not connect to db!";
exit();
}
$ver = mysql_query("SELECT VERSION()");
if(!$ver)
{
echo "Wrong query!";
exit();
}
echo mysql_result($ver, 0);
?>
Подставьте свой пароль в $dbpasswd и откройте страницу localhost/mysqltest.php. Если все прошло хорошо — вы увидите версию mysql.
PhpMyAdmin
Распаковываем phpmyadmin в C:\www\localhost\htdocs\. Переименуйте директорию в phpmyadmin и зайдите на страницу localhost/phpmyadmin/.
Логин — root, пароль — тот, что вы вводили при установке mysql.
Вы увидите phpmyadmin и кучу ворнингов внизу страницы.
Во-первых, подключите модуль extension=php_mbstring.dll в php.ini.
Затем переименуйте C:\www\localhost\htdocs\phpmyadmin\config.sample.inc.php в config.inc.php и откройте на редактирование.
Найдите $cfg['blowfish_secret'] = '' и введите какие-нибудь символы, например:
$cfg['blowfish_secret'] = 'dfldkfjdkf7fkjkj'
Перегрузите страницу с phpmyadmin и заново залогиньтесь.
Теперь нужно подключить дополнительные возможности для работы с таблицей.
Откройте консоль mysql и вставьте:
source C:\www\localhost\htdocs\phpmyadmin\scripts\create_tables.sql
Далее там же (предварительно вставив свой пароль вместо «пароль_для_юзера_pma», ковычки оставить):
CREATE USER 'pma'@'localhost' IDENTIFIED BY 'пароль_для_юзера_pma';
GRANT ALL PRIVILEGES ON phpmyadmin.* TO 'pma'@'localhost';
FLUSH PRIVILEGES;
Откройте C:\www\localhost\htdocs\phpmyadmin\config.inc.php и раскомментируйте секции:
/* User for advanced features */
$cfg['Servers'][$i]['controluser'] = 'pma';
$cfg['Servers'][$i]['controlpass'] = 'здесь ваш пароль';
/* Advanced phpMyAdmin features */
$cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';
$cfg['Servers'][$i]['bookmarktable'] = 'pma_bookmark';
$cfg['Servers'][$i]['relation'] = 'pma_relation';
$cfg['Servers'][$i]['table_info'] = 'pma_table_info';
$cfg['Servers'][$i]['table_coords'] = 'pma_table_coords';
$cfg['Servers'][$i]['pdf_pages'] = 'pma_pdf_pages';
$cfg['Servers'][$i]['column_info'] = 'pma_column_info';
$cfg['Servers'][$i]['history'] = 'pma_history';
$cfg['Servers'][$i]['designer_coords'] = 'pma_designer_coords';
Подставьте в $cfg['Servers'][$i]['controlpass'] тот пароль, который вы установили для пользователя pma.
Выйдите из phpmyadmin и зайдите заново. Вы больше не должны видеть никаких ошибок и предупреждений.
Настраиваем почту
Чуть ранее вы поставили почтовую заглушку Test Mail Server Tool. Запускайте ее. Значок будет висеть в трее.
Проверьте в настройках, чтобы директория для почты была C:\WebServer\SMTP\mail.
В файле php.ini должны быть раскомментированы следующие строки:
SMTP = localhost
smtp_port = 25
sendmail_from = me@example.com
Перезапустите apache, если сделали изменения (у меня был закомментирован email).
Создадим файл C:\www\localhost\htdocs\mail.php:
<?
$to = "foo@bar.com";
$subject = "Hi!";
$body = "Hi,\n\nHow are you?";
if (mail($to, $subject, $body)) {
echo("Message successfully sent!");
} else {
echo("Message delivery failed...");
}
?>
Переходим на страницу localhost/mail.php.
Вы должны увидеть Message successfully sent! и через некоторое время откроется окно. У меня это была «Почта Microsoft Windows Live».

Также создался файл почты в директории C:\WebServer\SMTP\mail. Нажав кнопку «Удалить» в окне, файл автоматически удалится. Жутко удобно =). Отправка почты также тестировалась мной на Joomla.
Post scriptum
Для доступа к MySQL можно использовать phpmyadmin, стандартную консоль, либо скачать MySQL GUI Tools. Также существует неплохая программа SquirreL SQL, но для нее надо качать jdbc драйвер. Для тех, кто работал с Toad for Oracle есть хорошая новость: существует бесплатная версия Toad for MySQL. В MySQL Administrator из набора MySQL GUI Tools жутко удобно разруливать пользователей и их права. Только поставьте галочки «Show global privileges», «Show schema object privileges» и «Show hosts in user list» в настройках программы.
Документация по apache
Документация по php
Документация по веб-технологиям
Еще немного документации по веб-технологиям
И еще...
Жду комментариев и предложений по улучшению.



комментарии (257)