使用gunicorn+supervisor+NGINX部署python项目

安装nginx

sudo apt install nginx

使用pip安装supervisor

pip install supervisor

使用echo_supervisord_conf生成配置文件

echo_supervisord_conf > supervisord.conf

编辑/etc/supervisord.conf

启用supervisor的web ui管理功能

[inet_http_server]        
port=0.0.0.0:9001        
username=user             
password=123               
  • ip地址必须改为0.0.0.0否则无法远程访问

gunicorn的配置

在项目根路径下创建gunicorn_demo.py(文件名任意)

import os
import multiprocessing

# 设置守护进程
daemon=False
# 监听内网端口8000
bind='127.0.0.1:8000'
# 设置进程文件目录
pidfile='./gunicorn.pid'
chdir='./' # 工作目录
# 工作模式
# worker_class = "gevent" # gevent需要自己安装
worker_class='uvicorn.workers.UvicornWorker' # uvicorn是fastapi项目自带的WEB服务
# 并行工作进程数
workers=3  # multiprocessing.cpu_count()+1 # 根据cpu核数设置进程数
# 指定每个工作者的线程数
threads=2
# 设置最大并发量
worker_connections = 2000
loglevel='debug' # 错误日志的日志级别
access_log_format = '%(t)s %(p)s %(h)s "%(r)s" %(s)s %(L)s %(b)s %(f)s" "%(a)s"'
# 设置访问日志和错误信息日志路径
log_dir = "./log"
if not os.path.exists(log_dir):
    os.makedirs(log_dir)
accesslog = "./log/gunicorn_access.log"
errorlog = "./log/gunicorn_error.log"
  • worker_class:根据实际情况指定

新增项目的supervisor配置文件

查看supervisord.confinclude目录,在目录下新增test.ini

[program:test]
directory = /home/hc/codes/huahuiqms-shenglan
command = /home/hc/venvs/shenglan-venv/bin/python -u /home/hc/venvs/shenglan-venv/bin/gunicorn huahuiQMS:app -c gunicorn.py
redirect_stderr=true
stdout_logfile_maxbytes = 20MB
stdout_logfile_backups = 10
stdout_logfile=/var/log/test.log
stderr_logfile=/var/log/test_err.log
autostart = true
autorestart = true
  • redirect_stderr=true:不设置这个所有的日志都会被写入/var/log/test_err.log

启动supervisor

supervisord -c /etc/supervisord.conf

supervisor最常见的报错信息

1、supervisor xxx entered FATAL state, too many start retries too quickly

出现这个错误的原因

1.1、gunicorn开启了守护进程。即:daemon=True

supervisor中command启动方式为后台启动,导致识别不到pid,然后不断重启,而supervisor本身就是后台启动守护进程。
所以,将gunicorn中daemonize设置为False,再次启动,成功。

1.2、以前启动的项目进程没有完全关闭

2、unknown error making dispatchers for 'test': EACCES

出现这个错误的原因

权限问题。需要用创建/etc/supervisord.conf文件的用户去启动supervisor

supervisor web ui管理界面

正常启动supervisor后,打开浏览器输入http://ip:9001输入账号密码,可见
在这里插入图片描述
在浏览器中查看项目日志
在这里插入图片描述

nginx的配置

nginx.conf 部分配置

server {
    listen 80;
    server_name sam_rui.com;
    access_log  /var/log/nginx/access.log;

    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

扩展

gunicorn、supervisor、NGINX分别起什么作用

  • gunicorn:可以提高服务性能。启用多进程,多线程,协程以提高服务性能。
  • supervisor:管理进程的工具。用来管理gunicorn进程
  • NGINX:一般用于服务集群的负载均衡;还可以隐藏服务的真实IP,防止被攻击
  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hzw0510

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值