我有一个已安装supervisor的docker(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身份运行。
这有点令人困惑,因为我不确定我的Web服务器在这里使用哪个用户?根还是nginx?是从主管,nginx母版还是nginx工作者那里获取用户的?
我尝试将超级用户更改为以nginx用户身份启动,但是失败了,因为超级用户需要具有root访问权限才能创建pid
。
将超级用户恢复为root用户并将user=nginx
添加到[program:nginx]
部分,使超级用户根本无法启动nginx。
如何在这里正确使用权限?
答案 0 :(得分:1)
我认为您能做的最好的就是同时将nginx和php-fpm作为www-data:www-data
第一步
将其添加/编辑到您的nginx.conf
:
user www-data www-data;
第二步
添加/编辑php-fpm.conf
并将用户和组设置为www-data更多信息here
希望对您有帮助