摘要:return "Hello, Gunicorn + Supervisor!"
在 Linux 环境下使用 Supervisor + Gunicorn 部署 Python Web 应用的完整流程如下:
环境准备
系统要求:Ubuntu/CentOS 等主流 Linux 发行版Python 环境:确保已安装 Python 3.x 和 pipbash
sudo apt update && sudo apt install python3-pip -y # Ubuntu
sudo yum install python3-pip -y # CentOS
步骤 1: 安装必要组件
bash
# 安装 Gunicorn (在虚拟环境中)
pip3 install gunicorn
# 安装 Supervisor
sudo apt install supervisor -y # Ubuntu
sudo yum install supervisor -y # CentOS
sudo systemctl enable supervisor # 设置开机自启
步骤 2: 准备 Python 应用
以 Flask 应用为例(假设应用目录 /var/www/myapp):
项目结构:/var/www/myapp
├── app.py # 主应用文件
├── requirements.txt
└── venv/ # 虚拟环境
app.py 示例:python
from flask import Flask
app = Flask(__name__)
@app.route('/')
def home:
return "Hello, Gunicorn + Supervisor!"
if __name__ == '__main__':
app.run
创建虚拟环境:bash
python3 -m venv venv
source venv/bin/activate
pip install flask gunicorn
步骤 3: 测试 Gunicorn 运行
bash
gunicorn -w 4 -b 0.0.0.0:8000 app:app # Flask 应用
# Django 应用使用:gunicorn project.wsgi:application
访问 http://:8000 确认服务正常
步骤 4: 配置 Supervisor
创建配置文件:bash
sudo nano /etc/supervisor/conf.d/myapp.conf
配置文件内容:ini
[program:myapp]
command=/var/www/myapp/venv/bin/gunicorn -w 4 -b 0.0.0.0:8000 app:app
directory=/var/www/myapp
user=www-data # 按需修改运行用户
autostart=true
autorestart=true
stderr_logfile=/var/log/myapp.err.log
stdout_logfile=/var/log/myapp.out.log
environment=PATH="/var/www/myapp/venv/bin"
步骤 5: 启动服务
bash
# 重载 Supervisor 配置
sudo supervisorctl reread
sudo supervisorctl update
# 启动应用
sudo supervisorctl start myapp
# 查看状态
sudo supervisorctl status
预期输出:
myapp RUNNING pid 1234, uptime 0:00:30
常用管理命令
命令作用sudo supervisorctl stop myapp停止应用sudo supervisorctl restart myapp重启应用sudo supervisorctl tail myapp stderr查看错误日志sudo systemctl restart supervisor重启 Supervisor 服务故障排查
日志检查:bash
tail -f /var/log/myapp.err.log
sudo supervisorctl tail myapp
权限问题:Ø 确保 /var/www 目录权限:sudo chown -R www-data:www-data /var/www/myapp
Ø 检查日志文件写入权限
端口冲突:Ø 使用 netstat -tulnp | grep 8000 检查端口占用
环境变量问题:Ø 在 Supervisor 配置中添加所需环境变量:
ini
environment=KEY="value",PATH="/venv/bin:%(ENV_PATH)s"
进阶配置
Nginx 反向代理(推荐):server {
listen 80;
server_name your_domain.com;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
}
}
增加 Gunicorn 配置:Ø 创建 gunicorn_conf.py:
python
workers = 4
bind = "0.0.0.0:8000"
timeout = 120
Ø 修改 Supervisor 配置:
ini
command=/path/to/venv/bin/gunicorn -c gunicorn_conf.py app:app
通过以上步骤,您的应用将在 Supervisor 监控下稳定运行,当进程崩溃时会自动重启,实现生产级部署。
来源:老客数据一点号