Сайт вебмастера

WAMP сервер своими руками

08-05-2020Время чтения ~ 9 мин.Софт 9882

WAMP — это аббревиатура: Windows, Apache, MySQL и PHP, то есть минимальный набор программ, необходимых для создания вебсайтов на локальном компьютере. Достаточно давно вебмастера вручную устанавливали эти программы, но постепенно их место заняли уже готовые сборки. Самым известным, наверное стоит назвать Denwer. И хотя проект давно уже заброшен, он дал толчок к появлению других похожих программ.

Вспомнить про WAMP меня побудило решение автора OpenServer о прекращении поддержки 32-битной версии, как сервера, так и управляющей программы. Переустанавливать Windows ради этого, естественно, не собираюсь.

Нюанс ещё в том, что любая управляющая программа (OpenServer как раз такая) всё что делает, так это тусует текстовые файлы конфигурации. К ней должны быть минимальнейшие требования. Например Denwer вообще работает на bat-файлах. Поэтому я решил вспомнить старые времена и поставить всё вручную. Оказалось, что это очень просто.

Кратко о WAMP

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

Основа — сервер Apache. Можно вместо него поставить Nginx, но поскольку у нас домашний вариант, то Apache более чем достаточно, тем более, что с ним нет никаких проблем.

PHP ставится как модуль Apache. Когда идёт запрос к файлам с расширением «.php», Апач запускает PHP и тот уже выполняет скрипт.

MySQL ставится как отдельный сервер. Он как бы не завязан на другие модули и поэтому может быть использован даже вне PHP и Apache.

Если у вас уже запущен какой-то WAMP-сервер, то его нужно остановить. При этом ничего удалять не нужно.

Структура каталогов

Чтобы всем было удобно управлять, следует сразу определиться со структурой проекта. Нюанс ещё в том, что нужно получить возможность выбора разных версий PHP и MySQL. Для вебмастера это реальная потребность — протестировать проект, скажем, на PHP 7.1 и 7.4. С MySQL может быть аналогичная ситуация.

А вот что касается Apache, то особого смысла менять её версию нет (разве что только для старых версий PHP). То есть достаточно будет установить последнюю на текущий момент (сейчас это 2.4.xx).

Необходимо разделить непосредственные программы для сервера и данные сайтов. У меня все сайты располагаются в d:\domains\, где уже размещаются локальные сайты:

  • d:\domains\localhost\
  • d:\domains\lpf\
  • d:\domains\demo\
  • ...

Все управляющие программы я размещаю в d:\WebPanel\.

  • d:\WebPanel\Apache24\
  • d:\WebPanel\MySQL57\
  • d:\WebPanel\Php56\
  • d:\WebPanel\Php71\
  • d:\WebPanel\Php74\
  • d:\WebPanel\userdata\
  • ...

То есть каждый модуль имеет своё расположение и настраивается индивидуально.

Каталог userdata хранит пользовательские данные, например базы данных.

Такое деление удобно тем, что можно создавать раздельные бэкапы простым копированием. Но, подчеркну, расположение может быть произвольным.

Ставим Apache

Скачивание Апача начинается с официального сайта, где нужно выбрать свою версию. Для Windows предлагаются готовые бинарники, которые почему-то располагаются на других сайтах. Я выбрал apachelounge.com. Это обычный zip-архив, который нужно распаковать в d:\WebPanel\Apache24\.

Настройки Apache хранятся в d:\WebPanel\Apache24\conf\httpd.conf. Сейчас в нём типовая конфигурация, где многие строчки закомментированы. Все правки нужно делать в обычном текстовом редакторе.

Вначале нужно указать базовый каталог сервера. Сейчас так:

Define SRVROOT "c:/Apache24"

Меняем на

Define SRVROOT "d:\WebPanel\Apache24"
Важный момент. Все пути лучше указывать абсолютными.

Ниже нужно раскомментировать строчку

LoadModule rewrite_module modules/mod_rewrite.so

Это ЧПУ для многих сайтов. После всех «LoadModule» добавьте строчку:

Include conf/extra/my-modules.conf

Ей мы подключаем свой файл конфигурации, чтобы не править основной.

Ниже укажите строчку с именем основного сервера. Формально этого можно не делать, но лучше задать значение по умолчанию.

ServerName localhost

Ниже найдите блок:

<Directory />
    AllowOverride none
    Require all denied
</Directory>

и полностью его закомментируйте (в начало нужно добавить «#»). На локальном сервере эти ограничения не нужны, да и меньше будет мороки с настройкой доступа каждого каталога.

И уберем комментарий с

Include conf/extra/httpd-vhosts.conf

Создадим файл

d:\WebPanel\Apache24\conf\extra\my-modules.conf

— пока пусть он будет пустым.

Теперь проверим работу сервера. Нужно просто запустить файл d:\WebPanel\Apache24\bin\httpd.exe — это консольное приложение. Если вы всё сделали верно, то будет пустое окно консоли. Иначе появится сообщение об ошибках.

В браузере наберите http://127.0.0.1, где вы должны увидеть приветствие «It works!». Теперь проверьте адрес http://localhost — должна появиться эта же самая страница. Если этого не происходит, то нужно отредактировать файл hosts в Windows. В Windows 7/32 он располагается как c:\Windows\System32\drivers\etc\hosts. Добавьте строчку:

127.0.0.1 localhost

После этого ещё раз проверьте адрес в браузере. Должно заработать.

По умолчанию Апач располагает сайты в d:\WebPanel\Apache24\htdocs\, но нам нужно указать другой каталог. Для этого открываем файл d:\WebPanel\Apache24\conf\extra\httpd-vhosts.conf, где указываются все виртуальные хосты (читай адреса). Сейчас там примеры, которые можно полностью удалить и прописать такой вариант:

<VirtualHost *:80>
    ServerName localhost
    DocumentRoot "d:\domains\localhost"
</VirtualHost>
 
<Directory "d:\domains\localhost">
    AllowOverride All
</Directory>

Первая секция устанавливает адрес localhost, который будет расположен в d:\domains\localhost. Вторая секция (параметр AllowOverride) разрешает использовать в каталоге файл .htaccess.

Теперь, если посмотреть http://localhost, то мы увидим уже сайт из своего каталога.

После изменения конфигурации Апач нужно перезагрузить (закрыть и заново запустить).

Если у вас несколько локальных хостов, то все их нужно также указать в файле httpd-vhosts.conf.

<VirtualHost *:80>
    ServerName demo
    DocumentRoot "d:\domains\demo"
</VirtualHost>
 
<Directory "d:\domains\demo">
    AllowOverride All
</Directory>

Но, чтобы он заработал, нужно добавить его IP в windows файл hosts:

127.0.0.1 demo

Таким способом можно создать любое количество локальных сайтов.

Установка PHP

Для начала установим версию PHP 7.4 (в качестве примера). Качаем её с официального сайта. Это также zip-архив, который распаковываем в d:\WebPanel\Php74\.

Обратите внимание, что нужно использовать версию PHP, отмеченную как «Thread Safe».

Чтобы PHP заработал, следует создать в его каталоге файл php.ini. Есть две заготовки

  • php.ini-production
  • php.ini-development

Нужно сделать копию одного из них. Я взял второй вариант. После этого открываем php.ini и вносим правки. Они разбросаны по всему файлу, но я привожу только изменения (там достаточно убрать комментарий в начале строки).

extension_dir = "d:\WebPanel\PHP74\ext"
extension=curl
extension=gd2
extension=mbstring
extension=exif
extension=mysqli
extension=openssl
extension=pdo_mysql
date.timezone = Europe/Kiev

Если в php вы используете Sqlite, то включите и модули:

extension=pdo_sqlite
extension=sqlite3

Но, с Sqlite есть одна тонкость. Раньше эта библиотека входила в состав PHP, но когда в Windows появилась нативная поддержка этой базы, из PHP модули перестали работать. Проблема в том, что sqlite-библиотека должна быть найдена, а чтобы это сделать, следует менять пути (переменная PATH) в самой Windows. Вот чтобы с этим не создавать себе головной боли, будет достаточно скачать dll-библиотеку с сайта Sqlite. Файл из архива sqlite3.dll нужно переименовать в libsqlite3.dll и кинуть в основной каталог Windows.

Теперь подключим PHP как модуль Апача. В файле d:\WebPanel\Apache24\conf\extra\my-modules.conf напишем:

<IfModule mime_module>
    AddType application/x-httpd-php .php
</IfModule>
 
PHPINIDir "d:\WebPanel\PHP74"
LoadModule php7_module "d:\WebPanel\PHP74\php7apache2_4.dll"

Для контроля кинем в localhost index.php:

<?php
 
phpinfo();

И запустим сервер. Мы должны увидеть информацию от phpinfo.

Несколько версий PHP

Другие версии PHP ставятся точно также, только в свои каталоги. Для переключения версии нужно править файл my-modules.conf. Оставить только нужную, а остальные закомментировать:

### PHP 8.1 ###
#PHPINIDir "d:\WebPanel\PHP81"
#LoadModule php_module "d:\WebPanel\PHP81\php8apache2_4.dll"

### PHP 8.0 ###
#PHPINIDir "d:\WebPanel\PHP80"
#LoadModule php_module "d:\WebPanel\PHP80\php8apache2_4.dll"

### PHP 7.4 ###
PHPINIDir "d:\WebPanel\PHP74"
LoadModule php7_module "d:\WebPanel\PHP74\php7apache2_4.dll"
 
### PHP 7.3 ###
#PHPINIDir "d:\WebPanel\PHP73"
#LoadModule php7_module "d:\WebPanel\PHP73\php7apache2_4.dll"
 
### PHP 7.1 ###
#PHPINIDir "d:\WebPanel\PHP71"
#LoadModule php7_module "d:\WebPanel\PHP71\php7apache2_4.dll"
 
### PHP 5.6 ###
#PHPINIDir "d:\WebPanel\PHP56"
#LoadModule php5_module "d:\WebPanel\PHP56\php5apache2_4.dll"
 
### PHP 5.3 ###
#PHPINIDir "d:\WebPanel\PHP53"
#LoadModule php5_module "d:\WebPanel\PHP53\php5apache2_4.dll"

Я не очень часто переключаю версии, но при желании можно автоматизировать весь процесс. Об этом ниже.

Установка MySQL

Действие в общем-то аналогичное. С официального сайта нужно скачать архив MySQL. Версия MySQL 8 совсем новая и практически не используется, поэтому ставим предыдущую из линейки 5.7.xx. Лично у меня не получилось найти zip-архив, поскольку сайт настойчиво предлагает скачивать только через свой инсталятор. Поэтому я его скачал и выполнил установку. После этого скопировал файлы MySQL из c:\Program Files\ в наш d:\WebPanel\MySQL57\.

База данных хранится в c:\ProgramData\MySQL — я её скопировал в d:\WebPanel\userdata\MySQL57\.

Если у вас уже есть база, например от OpenServer, то вы можете продолжать её использовать, либо скопировать её в наш каталог. То есть базы MySQL хранятся отдельно от самой программы.

Так же вам нужен будет файл my.ini, кажется он будет в каталоге программы. Скопируйте его как d:\WebPanel\MySQL57\my.ini. Это конфигурация базы.

После того, как я получил все файлы, я просто удалил установленную программу через тот же инсталятор MySQL. В итоге у нас осталась копия в d:\WebPanel\, с которой мы и будем работать.

Возможно кто-то знает как скачать MySQL простым архивом с официального сайта, поделитесь ссылкой в комментариях.

В my.ini нужно поправить только один параметр — каталог баз данных:

datadir=D:/WebPanel/userdata/MySQL57

Если вы хотите работать с разными базами, то достаточно поменять к нему путь.

Сервер MySQL запускается через командную строку:

d:\WebPanel\MySQL57\bin\mysqld --defaults-file="d:\WebPanel\MySQL57\my.ini"

Файл mysqld.exe — это т.н. демон, через который и происходит работа самой базы. Это также консольное приложение. Параметром --defaults-file указывается путь к ini-файлу.

Теперь вы можете установить phpMyAdmin или Adminer в localhost и проверить доступность MySQL баз.

Удобный запуск

Для запуска серверов удобно воспользоваться обычным bat-файлом. Например start.bat

start d:\WebPanel\Apache24\bin\httpd.exe
start d:\WebPanel\MySQL57\bin\mysqld --defaults-file="d:\WebPanel\MySQL57\my.ini"

Существует вариант запуска Apache и MySQL как сервисы Windows. Лично я такой вариант не использую, поскольку консольные программы проще закрыть, особенно когда меняешь конфигурацию. Чтобы они не «мозолили» глаза, я их сворачиваю в трэй (где часики) с помощью многофункциональной утилиты AnVir Task Manager (там много чего полезного, рекомендую).

Так же можно использовать параметр /MIN для запуска в минимизированном окне: start /MIN d:\WebPanel\...

Как менять версии PHP

Если вам приходится часто менять версии PHP, то можно сделать несколько bat-файлов для каждой версии.

Алгоритм достаточно простой. Делаются копии my-modules.conf для каждой версии PHP. Можно даже разместить их где-то отдельно, например в userdata. Перед запуском сервера Apache в bat-файле, вначале копируется нужный conf-файл как my-modules.conf.

Пример start-php73.bat:

copy "d:\WebPanel\userdata\php\php73.conf" "d:\WebPanel\Apache24\conf\extra\my-modules.conf"
start d:\WebPanel\Apache24\bin\httpd.exe
start d:\WebPanel\MySQL57\bin\mysqld --defaults-file="d:\WebPanel\MySQL57\my.ini"

Кстати, именно по такому же принципу работают все остальные WAMP-программы: перед запуском сервера, они копируют нужные файлы конфигурации в каталог сервера.

Преимущества своего WAMP-сервера

Наверное стоит отметить, что этот вариант работает уж точно не хуже любых других пакетных установок, поскольку используются те же самые Apache, PHP и MySQL. Здесь полный контроль за любым модулем и нет никакой завязки на стороннюю программу.

Для меня важным будет еще и вопрос оперативного обновления. Например PHP 7.4 вышел еще в прошлом году, но автор OpenServer так и не удосужился её добавить в свою сборку. Она появилась в новых версиях программы совсем недавно, но уже не совместима с моей ОС. При этом обновление OpenServer (как и других WAMP-программ) достаточно сложное. Есть риск сломать уже настроенную систему.

В собственном WAMP нет никаких проблем обновить любой модуль в любой момент, а риск что-то сломать сведён к минимуму. Ну и последний плюс своей сборки — общий размер файлов значительно ниже, чем сторонние, поскольку содержит только самые необходимые программы.

Похожие записи
Комментарии (3) RSS
1 Александр 2020-05-09 15:17:54

Спасибо за статью! По времени быстрее поставить с помощью твоей инструкции, чем скачивать 1Гб Openserver.


2 Александр 2021-11-05 00:59:02

Отличный гайд, Спасибо Вам за статью.


3 Аноним 2022-02-01 12:55:38

Хотелось бы ещё статью о замене Apache на Nginx, с компиляцией с нужными модулями под Windows.