Разворачиваем девелоперский веб-сервер под Windows (WAMP+) / Студия Виталия Комлева, разработка веб-сайтов Харьков

Разворачиваем девелоперский веб-сервер под Windows (WAMP+)

Веб-дизайн и аналитика

Хороший способ изучить параметры настройки — самостоятельно развернуть и настроить веб-сервер.

На определенном этапе профессионального развития мне перестало хватать функционала, который предлагали стандартные пакеты вроде Denwer. Возникла необходимость разворачивания собственного девелоперского веб-сервера. В то же время, стандартное решение LAMP (Linux-Apache-MySQL-PHP) было не совсем удобно: основной софт (например, Adobe Photoshop), необходимый для полноценной работы над сайтом, написан для Windows, а переключаться между виртуальной машиной и основной системой было бы крайне неудобно.

На глаза попалась хорошая публикация на Хабрахабре, в которой давались подробные и пошаговые инструкции по тому, как установить и настроить под Windows все необходимые для разработки компоненты. К сожалению, автор убрал статью в черновики, и доступ к ней сейчас невозможен. В то же время необходимость в материале (по крайней мере для меня) не исчезла, поэтому я постараюсь записать весь процесс установки и настройки необходимого софта, чтобы в дальнейшем использовать этот материал как руководство.

Весь процесс установки и настройки занимает до 20 минут.

Система тестировалась на Windows 7 x64, а ранее — на Windows 7 x32. Для более ранних версий можно использовать предыдущие версии Apache (например, версия 2.2) и MySQL (версия 5.1 должна работать уже на Windows XP). Здесь и далее я буду подразумевать установку сервера на Windows 7 x64.

После этого создаем структуру папок под устанавливаемые компоненты. У меня основная папка имеет путь C:/WebServer/. В ней созданы остальные подпапки:

  • C:/WebServer/Apache
  • C:/WebServer/MySQL
  • C:/WebServer/PHP
  • C:/WebServer/SMTP
  • C:/WebServer/Temp
    • C:/WebServer/Temp/Session
    • C:/WebServer/Temp/UploadTemp

После этого начинаем установку компонентов веб-сервера.

Установка и настройка Apache

Разархивируем сохраненный дистрибутив сервера Apache, и копируем его содержимое в созданную нами папку Apache (у меня это C:/WebServer/Apache/). После этого нам необходимо установить Apache как сервис Windows, как это описано в документации. Для этого открываем командную строку от имени администратора, в командной строке переходим в папку /bin (у меня это путь C:/WebServer/Apache/bin) и выполняем файл httpd.exe с ключом: httpd.exe -k install. В документации есть также описание других ключей для более тонкой настройки сервиса.

В Windows 7 x64 командная строка находится в папке C:/Windows/System32/cmd.exe.

Открываем файл /conf/httpd.conf и в 38-й строке меняем Define SRVROOT "/Apache24" на Define SRVROOT "C:/WebServer/Apache". Добавляем в автозагрузки утилиту ApacheMonitor.exe (расположен в /bin/ApacheMonitor.exe). Перезагружаем Windows.

Если Apache не стартует, то скорее всего занят 80 порт (например, скайпом). Его нужно освободить (например, в настройках скайпа указать рабочий порт 433), либо установить другой порт для Apache.

В трее должна появиться иконка Apache Monitor, он используется для управления состоянием сервера Apache. Тестируем работу: http://localhost/ должен открыть страничку ApacheHaus.

Установка PHP

Архив с PHP просто распаковываем в папку C:/WebServer/PHP.

Установка и настройка MySQL

Запускаем сохраненный ранее дистрибутив, на этапе выбора типа установки выбираем последний вариант Custom: посмотрим, что именно хочет нам предложить установщик MySQL.

Далее выбираем из списка только то, что нам нужно: у меня это сам сервер и коннектор ODBC.

Выбираем в списке MySQL Server и снизу в правом углу появляется ссылка Advanced Options. Нажимаем ее, и в выпавшем окне указываем в качестве Install Directory созданную нами папку для MySQL. Data Directory — это папка, в которой будут храниться базы данных. Я закинул ее в Dropbox, чтобы синхронизировать данные между ноутбуком и компьютерами на работе и дома.

Не обращаем внимания на предупреждения внимательного установщика, со всем соглашаемся и продолжаем. На следующем экране будет кнопка Execute, по нажатию на которую нужные программы будут загружены на компьютер и установлены.

После установки нам покажут экран настройки конфигурации сервера:

Ставим галочку напротив Show Advanced Options и продолжаем. Далее нас просят указать пароль для пользователя root. Можно сильно не заморачиваться =)

На остальных экранах я ничего не менял, со всем согласился и завершил конфигурацию.

Если вы, как и я, размещаете данные в Dropbox, то при использовании нескольких компьютеров возможен конфликт лог-файлов. Чтобы этого не было, в папке C:/WebServer/MySQL/ создаем папку logs. Далее открываем файл my.ini, который лежит в папке D:/Dropbox/MySQL/ и меняем следующие параметры:

  • параметр general_log_file устанавливаем в значение general_log_file="C:/WebServer/MySQL/logs/general.log"
  • параметр slow_query_log_file устанавливаем в значение slow_query_log_file="C:/WebServer/MySQL/logs/general-slow.log" (здесь можно будет в дальнейшем смотреть медленные запросы)
  • и для лога ошибок делаем аналогично log-error="C:/WebServer/MySQL/logs/general.err"
  • ниже long_query_time=10 добавляем с новой строки еще один параметр: innodb_log_group_home_dir = "C:/WebServer/MySQL/logs/" — это лог InnoDB

Не забудьте перезагрузить MySQL-сервер.

Устанавливаем заглушку на SMTP

Запускаете загруженный ранее файл TestMailServerToolSetup.exe, в качестве пути установки выбирайте C:/WebServer/SMTP.

Создаем структуру директорий для сайтов

Так получилось, что в своей работе я регулярно пользуюсь двумя-тремя компьютерами, и важно иметь рабочую станцию с актуальными файлами на каждом из них. Чтобы не заморачиваться с системами контроля версию, я установил Dropbox, и рабочие файлы храню в нем. Впрочем, это работает для меня, и вовсе не обязательно будет удобно Вам. Выбор рабочей папки в процессе настройки абсолютно не принципиален.

Итак, для начала создадим папку, в которой будут храниться все сайты. Я выбрал папку D:/Dropbox/www/. Дальше создадим папки для localhost и тестового сайта domain.test. В них разместим подпапки htdocs и два файла: error.log и access.log (в них будут храниться логи сервера к этим сайтам). В папке htdocs создаем HTML-файл index.html c произвольным содержимым, например «Hello, localhost!» и «Hello, testdomain!».

Настраиваем Apache на новую структуру папок

В папке C:/WebServer/Apache/conf расположены конфигурационные файлы. Если вдруг вы что-то испортите, то всегда можно будет вернуться к исходному состоянию или просто сравнить файлы, заглянув в директорию C:/WebServer/Apache/conf/original. Здесь хранятся оригинальные настройки, так что можно экспериментировать не боясь.

Основной файл конфигурации — httpd.conf. Изменяя конфигурацию Apache, необходимо всегда перестартовывать его, чтобы изменения подхватились.

Итак, меняем настройки Apache на новую структуру директорий.

В httpd.conf:

  • меняем DocumentRoot "${SRVROOT}/htdocs" на DocumentRoot "D:/Dropbox/www/"
  • чуть ниже найдем директиву <Directory "${SRVROOT}/htdocs"> и заменим путь и здесь: <Directory "D:/Dropbox/www/">, далее заменим в ней AllowOverride None на AllowOverride All

В файле httpd.conf найдите #Include conf/extra/httpd-vhosts.conf и раскомментируйте (удалите #). Далее, найдите #LoadModule rewrite_module modules/mod_rewrite.so и тоже раскомментируйте.

Далее заходим в /extra и открываем httpd-vhosts.conf.

Вы увидите две секции <VirtualHost *:80>. Удалите обе секции и замените на следующее:

<VirtualHost *:80>
    ServerAdmin admin@localhost
    DocumentRoot "D:/Dropbox/www/localhost/htdocs/"
    ServerName localhost
    ErrorLog "D:/Dropbox/www/localhost/error.log"
    CustomLog "D:/Dropbox/www/localhost/access.log" common
</VirtualHost>
<VirtualHost *:80>
    ServerAdmin admin@domain.test
    DocumentRoot "D:/Dropbox/www/domain.test/htdocs/"
    ServerName domain.test
    ErrorLog "D:/Dropbox/www/domain.test/error.log"
    CustomLog "D:/Dropbox/www/domain.test/access.log" common
</VirtualHost>

Теперь добавим наш тестовый домен в файл %WinDir%/System32/drivers/etc/hosts, чтобы Windows обращалась к локальному серверу, когда мы будем обращаться к domain.test. Для этого добавим в файл еще одну строку: «127.0.0.1 domain.test».

Перестартовываем Apache.

  • localhost — должны увидеть «Hello, localhost!»
  • domain.test — должны увидеть «Hello, testdomain!»

Собственно, так можно делать заглушки для тех сайтов, которые вы разрабатываете.

Теперь можно удалять C:/WebServer/Apache/htdocs, все сайты у нас будут храниться отдельно.

И прежде, чем мы продолжим, пару слов: в файле httpd.conf директивы в <Directory «D:/Dropbox/www/»> будут применены ко всем сайтам, кроме тех случаев, когда они не переопределены. Если вы обратите внимание, то по-умолчанию включен Indexes, а это позволит просматривать директорию сайта в том случае, если там нет индексного файла. Если вам не хочется переопределять это значение для каждого сайта отдельно — удалите это здесь и включайте в тех местах, где это понадобится. Тоже самое касается любых других директив.

Директивы для сайтов лучше добавлять в httpd-vhosts.conf или в .htaccess.

Подключаем PHP

Открываем httpd.conf и находим директиву <IfModule mime_module>. Внутри директивы добавляем:

PHPIniDir "C:/WebServer/PHP/"
LoadModule php5_module "C:/WebServer/PHP/php5apache2_4.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 в D:/Dropbox/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 и раскомментируйте. Также раскомментируйте extension=php_gd2.dll, extension=php_mbstring.dll, extension=php_exif.dll.

Установите временную зону в директиве date.timezone. Правильное значение можно выбрать в документации по PHP, например, date.timezone = "Europe/Kiev".

В работе часто требуется увеличить время исполнения скрипта и параметры входных данных. Настройте параметры max_input_time, max_execution_time, post_max_size,upload_max_filesize. Директива max_file_uploads отвечает за количество одновременно загружаемых файлов (по умолчанию 20 штук).

Перегрузите Apache и повторите поиск на странице localhost/phptest.php. Если модуль успешно подключился — можно двигаться дальше.

MySQL

В php.ini раскомментируйте extension=php_mysql.dll, extension=php_pdo_mysql.dll, extension=php_pdo_odbc.dll и extension=php_mysqli.dll. Перегрузите Apache и проверьте, что модули подключились.

Устанавливаем и настраиваем phpMyAdmin

Распаковываем phpmyadmin в D:/Dropbox/www/localhost/htdocs. Далее необходимо воспользоваться штатным установщиком, который проведет вас через весь процесс настройки.

Настраиваем почту

Чуть ранее вы поставили почтовую заглушку Test Mail Server Tool. Запускайте ее. Саму программу можно добавить в Автозагрузки. Значок будет висеть в трее. Проверьте в настройках (клик правой кнопкой по иконке в трее), чтобы директория для почты была C:/WebServer/SMTP/mail.

В файле php.ini должны быть раскомментированы следующие строки:

SMTP = localhost
smtp_port = 25
sendmail_from = me@example.com

Перезапустите Apache, если сделали изменения (у меня был закомментирован email).

Итого

Как результат, мы должны получить рабочий сервер, который вполне можно использовать для разработки на том же Yii Framework. Если нужна более тонкая настройка отдельных компонентов, вы всегда можете обратиться к официальному руководству. Для большинства возникших ошибок есть стандартные решения, которые можно довольно быстро решить через правильно сформулированный поисковый запрос. Если же это не помогло, я по возможности постараюсь ответить на возникшие у вас вопросы.