Устанавливаем свой маленький локальный веб-сервер

Нередко возникает ситуация, когда вам понадобился свой личный веб-сервер для тестовых целей. Например, вы выбираете баг-трекер, но публичной демо-версии нет – надо его куда-нибудь установить, чтобы попробовать. Или вы хотите научиться пользоваться каким-нибудь инструментом для нагрузочного тестирования –- не стоит сразу “натравливать” его даже на общедоступный тестовый стенд, не говоря уж о системе, с которой работают реальные пользователи, этим вы создадите им массу проблем.

На многих наших тренингах с домашними заданиями (программирование для тестировщиков на Java, C#, Python, разного уровня сложности курсы по Selenium, курсы по тестированию производительности веб-приложений) самым первым заданием для учеников является подготовка учебного тестового стенда, в том числе установка локального веб-сервера, на котором впоследствии разворачиваются учебные приложения.

Типовая инфраструктура для развертывания современных веб-приложений включает в себя как минимум три составных элемента:

  • интерпретатор языка программирования, на котором реализовано веб-приложение (PHP, Python, Ruby, .Net, Java, …),
  • база данных, в которой приложение хранит данные (MySQL, Postgress, MS SQL Server, Oracle, …),
  • веб-сервер, который принимает запросы от клиентов и перенаправляет их приложению (Apache, Nginx, IIS, …)

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

Но есть исторически сложившаяся тройка, пользующаяся особой популярностью – Apache + MySQL + PHP.

Для неё существуют готовые инсталляционные пакеты “три в одном”, которые позволяют устанавливать компоненты не по отдельности, а все разом. Иногда эти пакеты включают также некоторые дополнительные компоненты.

Из множества подобных пакетов мы выбрали XAMPP, потому что он предлагает инсталляторы для трёх основных операционных систем – Windows, Linux, OS X, в отличие от большинства конкурентов, ориентированных как правило только на какую-нибудь одну из платформ.

В этой инструкции будет описана установка XAMPP на операционную систему Windows. Процесс установки для других операционных систем может несколько отличаться.

Часть 1: делай раз, делай два, делай три!

1. Отправляемся на сайт https://www.apachefriends.org/ru/index.html, выбираем дистрибутив для нужной операционной системы, и загружаем его:

2. Запускаем инсталлятор и следуем инструкциям визарда. Наибольший интерес представляет шаг, на котором выбирается набор устанавливаемых компонентов:

Ясно, что нужно обязательно выбрать базовые элементы “тройки” – Apache + MySQL + PHP. Но в дополнение к этому можно установить ещё какие-то из предлагаемых компонентов:

  • FileZilla FTP Server – как следует из названия, это FTP-сервер, он может быть полезен, если, например, XAMPP устанавливается на виртуальную машину, тогда файлы устанавливаемых веб-приложений туда удобно будет загружать по протоколу FTP
  • Mercury Mail Server – опять таки, из названия ясно, что сервер для работы с электронной почтой, поддерживает протоколы POP3, IMAP, SMTP, но лично мне он кажется неудобным, поэтому я предпочитаю его не ставить, а использовать что-нибудь альтернативное
  • Tomcat – это сервер приложений для JavaEE, его имеет смысл устанавливать только в том случае, если вы собираетесь развёртывать веб-приложения, написанные на Java
  • Perl – язык программирования, который одно время был достаточно популярен среди веб-разработчиков, но в последнее время используется достаточно редко
  • phpMyAdmin – веб-интерфейс для управления СУБД MySQL, имеет смысл его установить, потому что для локального веб-сервера это, наверное, самый удобный способ конфигурирования СУБД MySQL
  • Webalizer – это веб-прилрожение для анализа лог-файлов сервера и сбора статистики, для локального веб-сервера вещь бесполезная, если только вы не собираетесь использовать эту информацию, например, при нагрузочном тестировании
  • Fake Sendmail – это “неполноценная” реализация утилиты sendmail для Windows, с большой вероятностью она вам не пригодится, потому что почту из веб-приложений обычно можно отправлять и без этой утилиты

3. После выбора компонентов на следующем шаге нужно выбрать директорию, в которую будет установлен XAMPP.

Рекомендуется использовать директорию, путь к которой не содержит пробелов и все названия директорий в этом пути в именах содержат только символы латинского алфавита или цифры. В общем, избегайте “плохих” символов в пути.

И после этого шага, наконец, начинается установка.

4. Когда процедура установки завершится, запускаем панель управления XAMPP.

В ней нужно активировать два модуля – Apache и MySQL, нажав две соответствующие кнопки Start:

Если всё пройдёт успешно, названия модулей окрасятся в зелёный цвет и станет активной кнопка Admin для каждого из них:

5. Осталось только зайти браузером по адресу http://localhost/ и убедиться, что веб-сервер действительно работает:

6. Затем зайти браузером по адресу http://localhost/phpmyadmin/ и убедиться, что СУБД MySQL тоже работает и доступна:

Теперь на сервер можно устанавливать веб-приложения.

Если у вас всё запустилось и в браузере открылась приветственная страница XAMPP – дальше можно не читать.

Вся оставшаяся часть статьи посвящена рассмотрению различных проблем и возможных методов их решения.

Часть 2. Что-то пошло не так…

F1. Не запускается MySQL

Наиболее вероятная причина – занят порт 3306, при этом в окне информации в панели управления XAMPP можно будет увидеть, какое именно другое приложение заняло порт.

Скорее всего это связано с тем, что у вас уже установлен вне XAMPP и запущен другой экземпляр СУБД MySQL:

Что делать?

Конечно, достаточно только одного запущенного экземпляра СУБД MySQL на компьютере. Вы можете оставить тот, который у вас уже используется, и вообще не запускать MySQL в рамках XAMPP.

Однако в этом случае вам, вероятно, придётся настроить логин и пароль для доступа к этому существующему экземпляру СУБД MySQL из приложения phpMyAdmin.

Нажимаем кнопку Config напротив модуля Apache и из выпадающего меню выбираем пункт phpMyAdmin:

В текстовом редакторе открывается конфигурационный файл приложения phpMyAdmin, в котором нужно указать логин и пароль администратора СУБД:

(Если текстовый редактор показывает текст в “скомканном” виде, см. ниже раздел F3)

Сохраняем внесённые в файл изменения и заходим браузером по адресу http://localhost/phpmyadmin/, чтобы убедиться, что СУБД MySQL доступна.

F2. Не запускается Apache

И опять наиболее вероятная причина – занят порт 80 или 443, при этом в окне информации в панели управления XAMPP можно будет увидеть, какое именно другое приложение заняло порт:

На этот раз “конкурентов” больше.

F2.1 Port 80 in use by “C:\Program Files (x86)\Skype\Phone\Skype.exe”

Как это ни странно звучит, порты 80 и 443 часто занимает Skype, причём это ему совершенно не нужно для нормальной работы. Идём в настройки Skype, отключаем, после чего перезапускаем скайп – и порт свободен:

К сожалению, отключить эту настройку можно не во всех версиях Skype. Если вы являетесь счастливым обладателем Windows 8 и используете так называемую версию “Skype for modern Windows”, то вам не повезло – в ней невозможно отключить использование портов 80 и 443.

Что делать?

Можно либо установить версию “Skype for Windows desktop”, в которой присутствует нужная настройка, либо перенастроить Apache на использование других, незанятых, портов, как это описано чуть ниже, в разделе F2.3.

F2.2 Port 80 in use by “Unable to open process” with PID 4

Это означает, что у вас на компьютере запущен сервер Microsoft IIS (Internet Information Services).

Если он вам не нужен – можно его отключить, а вместо него запустить XAMPP.

См. инструкцию по отключению IIS на официальном сайте Microsoft

Если IIS вам нужен, тогда придётся один из серверов (либо IIS, либо Apache) перенастроить на использование других, незанятых, портов, как это описано в следующем разделе.

F2.3 Port 80 in use by …

Кроме двух описанных выше ситуаций, порты может занимать какой-то другой веб-сервер.

Тут возникает резонный вопрос – если у вас уже есть веб-сервер, может быть не стоит устанавливать XAMPP, а продолжить использовать уже имеющийся?

Другой вариант – остановить или полностью удалить ранее использовавшийся сервер, и вместо него спокойно установить XAMPP.

Ну и наконец, если вы по каким-то причинам хотите оставить оба веб-сервера, не можете перенастроить Skype или IIS – тогда придётся разрешить конфликт портов и перенастроить Apache, входящий в состав XAMPP на другие порты.

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

Чтобы посмотреть, какие порты заняты, можно воспользоваться встроенной в XAMPP утилитой Netstat:

Предположим, выбраны незанятые порты 8080 и 8443.

Изменения нужно внести в трёх местах.

Сначала меняем общие настройки. Там указываются порты, по которым XAMPP будет проверять, “живы” ли его модули:

Но основные изменения нужно внести в конфигурационные файлы самого модуля Apache. Необходимо модифицировать два файла – httpd.conf и httpd-ssl.conf.

Нажимаем кнопку Config напротив модуля Apache и из выпадающего меню выбираем нужный пункт:

В текстовом редакторе открывается конфигурационный файл, в котором нужно найти инструкцию Listen и изменить порт на выбранный:

(Если текстовый редактор показывает текст в “скомканном” виде, см. ниже раздел F3)

Сохраняем файл и повторяем аналогичные действия для второго конфигурационного файла.

После этого можно снова попытаться запустить Apache, и на этот раз он должен успешно стартовать.

Единственное неудобство в этом случае заключается в том, что нестандартный номер порта придётся всегда указывать в адресе – теперь ваш веб-сервер будет доступен по адресу http://localhost:8080/

F3. Конфигурационные файлы показываются в “скомканном” виде.

Используйте вместо notepad.exe какой-нибудь более “интеллектуальный” текстовый редактор, например, Notepad++:

F4. Apache успешно запустился, но по адресу http://localhost/ находится не XAMPP

Если в настройках Apache указан не стандартный порт 80, а какой-то альтернативный, в этом случае нужно явно указать номер порта в адресе, например, http://localhost:8080/

F5. Apache успешно запустился, но адрес http://localhost/ не открывается в браузере

Возможные причины:

  • система не знает, что означает сетевое имя localhost, либо
  • в браузере указаны настройки прокси, которые не позволяют устанавливать соединения с локальным сервером.

Чтобы исключить первую причину, попробуйте в адресе указать не сетевое имя, а IP-адрес: http://127.0.0.1/ (или http://127.0.0.1:8080/ при использовании порта, отличного от стандартного).

Если получилось открыть приветственную страницу XAMPP – значит, проблема на уровне системных сетевых настроек.

Открываем в любом текстовом редакторе файл C:\windows\system32\drivers\etc\hosts и добавляем туда строчку

127.0.0.1 localhost

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

После того, как это изменение внесено – вновь пробуем использовать в адресе сетевое имя, то есть открываем в браузере адрес http://localhost/, теперь всё должно сработать правильно.

Вторая возможная причина, из-за которой даже по IP-адресу сервер не удаётся открыть – настройки браузера, согласно которым все запросы направляются в прокси-сервер. Нужно сделать так, чтобы запросы на адрес 127.0.0.1 туда не отправлялись, а шли прямиком к локальному веб-серверу.

Браузеры Internet Explorer и Chrome используют системные настройки прокси, вот так они должны выглядеть (стоит галочка “Не использовать прокси-сервер для локальных адресов”):

Браузер Firefox может иметь свои собственные настройки, отличные от системных, тогда нужно вписать адрес 127.0.0.1 в список исключений:

После этого браузер должен найти локальный веб-сервер и открыть его приветственную страницу.

Вот и всё, теперь уж точно сервер работает и можно переходить к установке приложений!