Запуск программ супервизора от имени другого пользователя - PullRequest
0 голосов
/ 10 июля 2019

У меня есть контейнер докера (php:7-fpm-alpine) с установленным супервизором .Он добавляется в установку по умолчанию следующим образом:

RUN apk add nginx composer php7-fpm php7-session supervisor && \
    ... ... ...
    cp supervisord.conf /etc/supervisor.d/conf.ini

Supervisor имеет свою конфигурацию по умолчанию (не менял ее после установки), я добавил свою собственную конфигурацию, чтобы добавить к ней (supervisord.conf):

[program:php-fpm7]
command = /usr/sbin/php-fpm7 --nodaemonize --fpm-config /etc/php7/php-fpm.d/www.conf
autostart=true
autorestart=true
priority=5
stdout_logfile=/var/log/supervisor/php-fpm.log
stderr_logfile=/var/log/supervisor/php-fpm.error.log

[program:nginx]
command=/usr/sbin/nginx -g "daemon off;"
autostart=true
autorestart=true
priority=10
stdout_logfile=/var/log/supervisor/nginx.log
stderr_logfile=/var/log/supervisor/nginx.error.log

Теперь исходная проблема, с которой я столкнулся, заключается в том, что мое приложение Laravel не может записывать в папку хранилища.Я могу chmod 777 папку рекурсивно, и она работает, но это не то, что я хочу.

Итак, первые шаги, которые я предпринял, - это chown -R nginx:nginx /var/www/*, оставив разрешения без изменений.Это ничего не решило, до сих пор не могу написать.

Выполнение ps aux показало это:

PID   USER     TIME  COMMAND
    1 root      0:00 {supervisord} /usr/bin/python2 /usr/bin/supervisord --nodaemon --configuration /etc/supervisord.conf
    8 root      0:00 {php-fpm7} php-fpm: master process (/etc/php7/php-fpm.d/www.conf)
    9 root      0:00 nginx: master process /usr/sbin/nginx -g daemon off;
   10 nginx     0:00 nginx: worker process
   11 nginx     0:00 nginx: worker process
   12 nginx     0:00 nginx: worker process
   13 nginx     0:00 nginx: worker process
   14 nginx     0:00 {php-fpm7} php-fpm: pool www
   15 nginx     0:00 {php-fpm7} php-fpm: pool www

Итак, php-fpm работает как пользователь nginx (я изменил его исходную конфигурацию, чтобы заменить пользователя nobody на nginx).Это ничего хорошего не дало, так как при этих настройках вместо пользователя nobody запрос возвращает ошибку 502.

Главный процесс Nginx работает как root, а рабочие процессы как nginx.

Это немного сбивает с толку, так как я не уверен, какой пользователь использует мой веб-сервер здесь?Рут или нгинкс?Требуется ли от супервизора, мастера nginx или работника nginx?

Я пытался изменить супервизора для запуска от имени пользователя nginx, но это не удается, так как супервизору необходим root-доступ для создания pid.

Возврат супервизора в корень и добавление раздела user=nginx в [program:nginx] заставил супервизор вообще не запускать nginx.

Как мне правильно сделать разрешения здесь?

1 Ответ

1 голос
/ 10 июля 2019

Я думаю, что лучшее, что вы можете сделать, - запустить nginx и php-fpm как www-data: www-data

первый шаг

add /отредактируйте это в nginx.conf:

user www-data www-data;

шаг два

добавьте / отредактируйте php-fpm.conf и установите пользователя и группу на www-data подробнее здесь

Я надеюсь, что это поможет вам

...