首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Django3.0+supervisor+uvicorn+nginx进行线上部署

Django3.0+supervisor+uvicorn+nginx进行线上部署

作者头像
kirin
发布2020-09-24 15:04:20
1.2K0
发布2020-09-24 15:04:20
举报
文章被收录于专栏:Kirin博客Kirin博客
开门见山的说

最近一个项目使用了django3.0,那么没有道理不用一下asgi异步特性来玩一玩,部署的时候花费了一些力气,故留个笔记

uvicorn的使用

uvicorn采用了uvloop 用Cython改写了python里面asyncio的时间循环, 将asyncio的效率提高了4倍以上

安装

pip3 install uvicorn

本地跑一下项目试一试

uvicorn myproject.asgi:application

此时出现

Django3.0+supervisor+uvicorn+nginx进行线上部署-麒麟博客
Django3.0+supervisor+uvicorn+nginx进行线上部署-麒麟博客
Django3.0+supervisor+uvicorn+nginx进行线上部署-麒麟博客
Django3.0+supervisor+uvicorn+nginx进行线上部署-麒麟博客

表示项目正常运行

其它的参数请参照文档: https://www.uvicorn.org/settings/

进程管理

用uvicorn部署了之后, 极高的提升了性能 但是在进程管理上就很麻烦

首先生产版本没有提供一个快速重启的接口 也没有优雅结束的功能

如果要结束服务,(特别是服务通过nohup等命令后台运行之后) 只能通过 ps -ef | grep uvicorn 查到进程id 然后通过 kill -9 process_id 杀死进程

那么supervisor就应运而生了. 这是一个进程管理系统, 可以把uvicorn运行成为它的子进程 从而进行管理

安装

yum install supervisor

测试是否安装成功

echo_supervisord_conf

然后会在/etc/supervisord.conf生成一个配置文件. 配置文件里曼有一行

[include]
files = supervisord.d/*.ini

也就是说在/etc/supervisord.d/里面的ini文件都会被包含进去

为了方便管理, 每一个应用最好都创建一个ini文件 放在/etc/supervisord.d/里面

vim /etc/supervisord.d/userSystem.ini

[fcgi-program:uvicorn]
socket=tcp://localhost:8000
directory=/usr/python_test/userSystem/
command=uvicorn --fd 0 userSystem.asgi:application
numprocs=4
process_name=uvicorn-%(process_num)d
stdout_logfile=/home/log/test.log
stdout_logfile_maxbytes=20MB

socket为对外暴露的接口 可以是unix 也可以是一个网络端口 端口的形式可以见官方文档

command为执行命令

directory为项目路径

numprocs是处理器个数

process_name是处理进程的名称

保存之后 用这个命令启动

supervisorctl update   #一定要先更新

supervisorctl start uvicorn:*

supervisorctl stop uvicorn:*

supervisorctl restart uvicorn:*

:*的作用是所有进程,. 其所有命令为:

start <name>            Start a process
start <gname>:*         Start all processes in a group
start <name> <name>     Start multiple processes or groups
start all               Start all processes

当出现以下提示时 代表已经启动完成

Django3.0+supervisor+uvicorn+nginx进行线上部署-麒麟博客
Django3.0+supervisor+uvicorn+nginx进行线上部署-麒麟博客
Django3.0+supervisor+uvicorn+nginx进行线上部署-麒麟博客
Django3.0+supervisor+uvicorn+nginx进行线上部署-麒麟博客
nginx反向代理

直接上配置文件把

server {
    listen         80;
    server_name    localhost
    charset UTF-8;
    access_log      /home/log/test_nginx_access.log;
    error_log       /home/log/test_nginx_error.log;

    client_max_body_size 75M;

    location / {
        proxy_pass http://127.0.0.1:8000;
    }
}

然后重启nginx就完事了 nginx -s reload

结束

按照以上的步骤,能够部署号一个django3.0项目,性能高效,方便管理

假如出现错误
error: <class 'socket.error'>, [Errno 2] No such file or directory: file: <string> line: 1

后面找了很久,终于找到了解决问题的方法。执行前,请先确认supervisord.conf配置文件所在路径:

sudo supervisord -c /etc/supervisord.conf  
sudo supervisorctl -c /etc/supervisord.conf 

文章出自:https://www.cnblogs.com/zhenyauntg/p/13188293.html
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-09-22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 开门见山的说
  • uvicorn的使用
  • 进程管理
  • nginx反向代理
  • 结束
  • 假如出现错误
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档