php - 以另一个用户身份启动主管程序
问题描述
我有一个安装了主管php:7-fpm-alpine
的 docker ( ) 容器。它通过以下方式添加到默认安装中:
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 master 还是 nginx worker 获取用户?
我尝试将主管更改为以 nginx 用户身份启动,但由于主管需要 root 访问权限才能创建pid
。
将主管恢复为 root 并添加user=nginx
到[program:nginx]
部分使主管根本无法启动 nginx。
我怎样才能以正确的方式在这里获得权限?
解决方案
我认为你能做的最好的是将 nginx 和 php-fpm 作为 www-data:www-data 运行
第一步
将此添加/编辑到您的nginx.conf
:
user www-data www-data;
第二步
在此处添加/编辑php-fpm.conf
并将用户和组设置为 www-data 更多信息
我希望这会帮助你
推荐阅读
- haskell - 如何在haskell中反转图形?
- r - 将 data.table(或 data.frame)转换为 yaml,然后返回其原始格式
- javascript - 外部服务器上的 Cookie
- python - 创建一个 css 选择器以单次定位多个 id
- python - pd.read_sql_query 单/双引号格式化
- java - 使用 RxJava 在循环中链接异步方法
- html - 根据孩子的大小自动调整父母的高度(弹性元素)
- go - 在 Go 中,接口是否仅由 struct 数据类型实现?
- amazon-web-services - 通过空运行 API 调用验证 AWS IAM 策略
- c# - EWS:试图找到唯一的文件夹 ID