Введение
На данный момент к Puppetmaster подключено около 100 агентов Puppet. Иногда требуется некоторое время, прежде чем изменения, внесенные в Puppetmaster, будут приняты агентами. Была обнаружена некоторая информация о том, что Passenger объединен с веб-сервером, например Apache2 или Nginx могут ускорить этот процесс. Прежде всего, по мнению эта документация Настоятельно рекомендуется использовать такие функции в производственных средах.
Цель
Цель состоит в том, чтобы установить Nginx и реализовать поддержку Phusion Passenger на CentOS7, используя passenger-install-nginx-module
для ускорения распознавания изменений, внесенных в Puppetmaster агентами Puppet.
Попытки
Попытка 1
sudo /usr/local/share/gems/gems/passenger-4.0.56/bin/passenger-install-nginx-module --auto --auto-download
был выполнен, и шаги по установке были соблюдены.
Попытка 2
Поскольку служба Nginx не была установлена во время попытки 1, она была установлена с использованием yum -y install nginx
.
Попытка 3
Гугл: "[emerg] unknown directive passenger_enabled"
указал, что nginx был скомпилирован без поддержки Phusion Passenger. В этом случае это должно быть неверно, так как passenger-install-nginx-module
был запущен, и вывод установки во время попытки 1 показал, что Nginx должен быть установлен.
Попытка 4
/etc/nginx/nginx.conf
passenger_root /usr/local/share/gems/gems/passenger-4.0.56;
passenger_ruby /usr/bin/ruby;
/etc/nginx/conf.d/puppet.conf
passenger_enabled on;
Попытка 5
Чтобы проверить, возникает ли эта проблема, с использованием другого веб-сервера sudo /usr/local/share/gems/gems/passenger-4.0.56/bin/passenger-install-apache2-module
был выполнен.
Ожидаемый результат
Выполнение passenger-install-nginx-module
и завершение шагов установки устанавливает Nginx. Служба Nginx может быть запущена, и поддержка Phusion-Passenger включена. Проверка того, находится ли порт 8140 в состоянии LISTEN, должна привести к истинному результату, поскольку Nginx должен запустить Puppetmaster.
Текущий результат
Выполнение passenger-install-nginx-module
и завершение шагов установки не устанавливает Nginx, в то время как выходные данные указывают на обратное.
Nginx with Passenger support was successfully installed.
Please edit your Nginx configuration file (probably /opt/nginx/conf/nginx.conf),
and set the passenger_root and passenger_ruby configuration options in the
'http' block, like this:
http {
...
passenger_root /usr/local/share/gems/gems/passenger-4.0.56;
passenger_ruby /usr/bin/ruby;
...
}
Установка Nginx с помощью yum тоже не работает. Проблема сохраняется, даже если passenger-install-nginx-module
выполняется снова.
[vagrant@vm-one ~]$ sudo systemctl status nginx.service -l
nginx.service - The nginx HTTP and reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled)
Active: failed (Result: exit-code) since Thu 2015-01-01 01:55:56 UTC;
2min 19s ago
Process: 7963 ExecStop=/bin/kill -s QUIT $MAINPID (code=exited, status=0/
SUCCESS)
Process: 7935 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
Process: 10814 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=1/FAILURE)
Main PID: 7937 (code=exited, status=0/SUCCESS)
Jan 01 01:55:56 vm-one.local systemd[1]: Starting The nginx HTTP and reverse
proxy server...
Jan 01 01:55:56 vm-one.local nginx[10814]: nginx: [emerg] unknown directive
"passenger_enabled" in /etc/nginx/conf.d/puppet.conf:5
Jan 01 01:55:56 vm-one.local nginx[10814]: nginx: configuration file /etc/nginx
/nginx.conf test failed
Jan 01 01:55:56 vm-one.local systemd[1]: nginx.service: control process exited,
code=exited status=1
Jan 01 01:55:56 vm-one.local systemd[1]: Failed to start The nginx HTTP and
reverse proxy server.
Jan 01 01:55:56 vm-one.local systemd[1]: Unit nginx.service entered failed state.
Попытка установить другой веб-сервер с поддержкой Passenger приводит к:
* Checking for Apache 2...
Found: no
* Checking for Apache 2 development headers...
Found: no
Это указывает на то, что passenger-install-apache2-module
в отличие от passenger-install-nginx-module
кажется, проверяет, установлен ли веб-сервер или нет.
Я автор Phusion Passenger. Вы неправильно понимаете что-то в основе Nginx.
Во-первых, Nginx не поддерживает динамически загружаемые модули. Это означает, что единственный способ расширить Nginx - это перекомпилировать Nginx с нуля с некоторыми включенными модулями.
В своей ментальной модели вы, кажется, думаете, что passenger-install-nginx-module
устанавливает где-нибудь файл модуля, и это yum install nginx
где-то устанавливает экземпляр Nginx, который затем загружает модуль Passenger. Это неправда. passenger-install-nginx-module
компилирует совершенно новый Nginx с нуля, с включенным модулем Passenger и статически связанным внутри него. В зависимости от заданных вами параметров (в первую очередь, префикса установки) вы получите полностью отдельную установку Nginx - ту, которая полностью независима от той, которую вы устанавливаете с помощью yum.
Это подробно описано в вики-странице Passenger: Почему Passenger не может продлить мой Nginx?. Это не то, что мы, авторы Passenger, решили. Так работает сам Nginx, и мы не можем это изменить. Установка любой Модуль Nginx выглядит так. Это резко контрастирует с модулями Apache, которые работают так, как вы думаете.
Во-вторых, вы, похоже, полагаете, что Passenger позаботится об установке службы Nginx. Это неправда. Определения служб полностью зависят от платформы и даже надстройки для конкретного дистрибутива, добавляемые упаковщиками дистрибутива. Определения сервисов не включены в исходный код Nginx и не установлены Passenger. Таким образом, если вы устанавливаете Passenger / Nginx из исходного кода (в отличие от RPM), вы должны сами установить определения служб. Об этом есть раздел в руководстве.