У меня есть контейнер докера (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.
Как мне правильно сделать разрешения здесь?