Linux下Supervisor+Gunicorn部署指南

B站影视 港台电影 2025-05-29 16:05 2

摘要:return "Hello, Gunicorn + Supervisor!"

在 Linux 环境下使用 Supervisor + Gunicorn 部署 Python Web 应用的完整流程如下:

环境准备

系统要求:Ubuntu/CentOS 等主流 Linux 发行版Python 环境:确保已安装 Python 3.x 和 pip

bash

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 监控下稳定运行,当进程崩溃时会自动重启,实现生产级部署。

来源:老客数据一点号

相关推荐