Назад | Перейти на главную страницу

Тестирование изменений конфигурации apache

Как лучше всего перенастроить сервер Apache, на котором размещен рабочий сайт?

Я использую следующий основной рабочий процесс:

  1. Сделайте тестовый сервер, максимально похожий на производственный
  2. Перенастройте тестовый сервер так, чтобы он работал так, как я хочу
  3. Подождите, пока не будет поздней ночи, поэтому трафик будет низким
  4. Примените изменения, которые я внес на тестовом сервере, к производственному серверу
  5. Перезагрузите apache, скрестив пальцы, что он работает
  6. Если что-то пойдет не так, откатитесь и перезапустите

Поскольку Apache нуждается в таких вещах, как IP-адреса, жестко закодированные в его конфигурации, невозможно (на самом деле не просто) скопировать файлы конфигурации точно с тестового сервера на производственный. Так что всегда есть шанс, что при их применении в производстве что-то пойдет не так. Что меня сводит с ума, так это то, что

Единственная опечатка в любом файле конфигурации apache приводит к закрытию всех сайтов, размещенных на этом сервере!

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

Вы можете использовать опцию -t с httpd чтобы протестировать конфигурацию без использования вашего запущенного экземпляра Apache. Если есть какие-либо ошибки, он даст вам статус выхода не 0.

Кроме того, если вы находитесь в Linux-подобной среде, в которой используются сценарии инициализации, тогда /etc/init.d/httpd (или иногда /etc/init.d/apache2) часто поддерживает `` тестовый '' аргумент, т.е. /etc/init.d/httpd test, который проверит вашу конфигурацию и скажет, хорошо она или нет.

Когда у вас есть хорошая конфигурация, вы можете сигнализировать Apache о перезагрузке файла конфигурации без перезапуска - /etc/init.d/httpd reload обычно. (Если вы не в системе со сценариями инициализации, я считаю, что это сигнал USER1.) Если вы не вносите изменения на уровне удаления существующих vhosts или изменения того, кто может получить доступ к каким ресурсам, это не должно иметь никакого влияния на текущие соединения.

В Windows также доступна опция -t (httpd.exe -t), но я считаю, что перезагрузка является требуется для загрузки новой конфигурации.

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

Рассматривайте свою конфигурацию как код: используйте инструмент управления конфигурацией, например Кукольный для управления и развертывания конфигурации apache.

Общий рабочий процесс:

Напишите (или загрузите) модуль Puppet для управления Apache, то есть файлы пакета, службы и конфигурации. Настройте свой сервер puppetmaster для поддержки двух или трех сред, скажем, разработки, тестирования и производства, и добавьте свои серверы в соответствующую среду.

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

Так как же перенести код с тестирования на производство? Используйте программное обеспечение для контроля версий для управления модулями Puppet. Большинство людей используют ветки, соответствующие средам, и переносят новые версии конфигураций из ветки в ветку. Затем Puppet увидит, что сервер не соответствует новой конфигурации, и обновит ее.

Это может показаться немного запутанным, если вы никогда не задумывались о настройке таким образом, но вы уже на полпути со своим тестовым сервером и рабочим процессом. Вы можете начать с простого управления Apache или даже чем-то менее важным, а в конечном итоге управлять всей конфигурацией сервера с помощью Puppet. Puppet может даже стать вашей документацией. Как только Puppet управляет всем вашим сервером, его переустановка или создание другого сервера становится несложным делом, считанные минуты.