以另一个用户身份启动主管程序
Starting supervisor programs as another user
我有一个安装了 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
用户,请求 returns 502 错误。
Nginx 主进程 运行 作为 root,工作进程作为 nginx。
这有点令人困惑,因为我不确定我的 Web 服务器在这里使用的是哪个用户?根还是 nginx?是否从 supervisor、nginx master 或 nginx worker 中获取用户?
我试过将主管更改为以 nginx 用户身份启动,但是失败了,因为主管需要 root 访问权限才能创建 pid
。
将 supervisor 恢复为 root 并将 user=nginx
添加到 [program:nginx]
部分使 supervisor 根本无法启动 nginx。
如何正确设置此处的权限?
我认为你能做的最好的就是 运行 nginx 和 php-fpm 作为 www-data:www-data
第一步
add/edit 这个给你的 nginx.conf
:
user www-data www-data;
第二步
add/edit php-fpm.conf
并将用户和组设置为 www-data 更多信息 here
希望对你有所帮助
我有一个安装了 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
用户,请求 returns 502 错误。
Nginx 主进程 运行 作为 root,工作进程作为 nginx。
这有点令人困惑,因为我不确定我的 Web 服务器在这里使用的是哪个用户?根还是 nginx?是否从 supervisor、nginx master 或 nginx worker 中获取用户?
我试过将主管更改为以 nginx 用户身份启动,但是失败了,因为主管需要 root 访问权限才能创建 pid
。
将 supervisor 恢复为 root 并将 user=nginx
添加到 [program:nginx]
部分使 supervisor 根本无法启动 nginx。
如何正确设置此处的权限?
我认为你能做的最好的就是 运行 nginx 和 php-fpm 作为 www-data:www-data
第一步
add/edit 这个给你的 nginx.conf
:
user www-data www-data;
第二步
add/edit php-fpm.conf
并将用户和组设置为 www-data 更多信息 here
希望对你有所帮助