You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Supervisord以非root用户启动Python Flask应用

让Supervisord以非root用户运行Flask应用的解决方案

嘿,我来帮你搞定这个问题——让Supervisord用非root用户跑你的Flask应用其实很简单,跟着下面的步骤来就行:

1. 先搞定运行用户(如果还没的话)

首先得有个专门的非root用户来跑应用,比如我们创建一个叫flaskuser的用户:

sudo useradd -m flaskuser

然后把你的Flask应用目录的权限给到这个用户,不然它读不到代码:

sudo chown -R flaskuser:flaskuser /path/to/your/flask/app

2. 修改Supervisord的进程配置文件

找到你的Flask应用对应的Supervisord配置文件(一般在/etc/supervisor/conf.d/下面,比如叫flask_app.conf),在[program:flask_app]段里加上user参数,指定刚才创建的用户:

[program:flask_app]
command=/path/to/your/venv/bin/gunicorn -w 4 -b 0.0.0.0:5000 app:app  # 替换成你的实际启动命令
directory=/path/to/your/flask/app  # 你的应用根目录
user=flaskuser  # 核心配置:指定用这个用户运行进程
autostart=true
autorestart=true
stdout_logfile=/var/log/flask_app/stdout.log
stderr_logfile=/var/log/flask_app/stderr.log

3. 给日志目录设置正确权限

如果日志目录是root所有,flaskuser没权限写日志会报错,所以得调整:

sudo mkdir -p /var/log/flask_app
sudo chown -R flaskuser:flaskuser /var/log/flask_app

4. 重启Supervisord让配置生效

执行下面的命令更新配置并重启应用:

sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl restart flask_app

验证一下是否生效

你可以用这个命令检查进程的运行用户:

ps aux | grep flask_app

输出里应该能看到flaskuser作为进程的所属用户,就说明配置成功了。

额外小提示:如果需要绑定特权端口(比如80/443)

非root用户默认不能绑定1024以下的端口,要是你的应用需要用这些端口,不用切回root,可以给Python或者Gunicorn加个权限:

# 给虚拟环境里的Python加权限
sudo setcap 'cap_net_bind_service=+ep' /path/to/your/venv/bin/python
# 或者给Gunicorn加权限
sudo setcap 'cap_net_bind_service=+ep' /path/to/your/venv/bin/gunicorn

这样就能保证你的Flask应用始终以非root权限运行,同时保留Supervisord自动重启的功能啦。

内容的提问来源于stack exchange,提问作者Priyanka Makhija

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 11:09:27