supervisord + nginx + Daphne + django4.0 最新asgi服务器部署实验

2023-12-13 04:05:09

由于需要用到channel,最近在研究通过asgi部署django。
先吐槽一下官方文档,这个地方讲的非常简单。然后中文互联网环境能找到的都是3.0试用的说明,这玩意是不是真的没人用啊?还是说Django已经脱离时代了。。。

简单研究了一下,发现uwsgi 应该就是相当于 supervisord + daphne + asgi 三个东西的合体。不得不说,异步以后真的复杂度直线提升,对于我们这种写玩具的系统人来说真的头秃。

我就不再赘述asgi和daphne在django中的设置了,这个还是比较简单,到处都能找到代码。我这里就说说nginx和supervisord这两个东西应该怎么配置。

Daphne 其实没

supervisord

supervisord有两种方式,一种是直接在python里面装,一种是用apt-get装。我觉得对于环境来说还是要用apt装。

配置主要看招手熊大佬的文章:(话说大佬这个代码块为啥是蓝色的,好看得多。)

https://blog.csdn.net/dorlolo/article/details/119336687

1.备份默认的配置文件

cp /etc/supervisor/supervisord.conf /etc/supervisor/supervisord.conf_bak

2.重新生成配置文件

echo_supervisord_conf > supervisord.conf

3.vim编辑器打开配置文件

vim /etc/supervisor/supervisord.conf

参考招手熊大佬我也都换成/var/run/,原因是使用默认的/tmp目录经常有权限的问题。

[unix_http_server]
file=/var/run/supervisor.sock  

[supervisord]
logfile=/var/log/supervisor/supervisord.log 
logfile_maxbytes=50MB       
logfile_backups=10         
loglevel=info              
pidfile=/var/run/supervisord.pid 
nodaemon=false              
silent=false             
minfds=1024            

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix:///var/run/supervisor.sock 

[include]
files = /etc/supervisor/conf.d/*.conf

在/etc/supervisor/conf.d目录下面新建一个项目名称.conf

[fcgi-program:项目名称]
socket=tcp://0.0.0.0:11000
# 原本是测试使用虚拟环境,但是设置起来很奇怪不方便使用,项目比较赶,所以最后还是直接用了系统的python
# environment=PATH="/home/cbirc/django/ythxt/ythxt_api/venv_ubuntu/bin"
# 项目文件所在目录
directory=项目文件所在目录
# 每个进程需要有一个单独的socket文件,所以我们使用process_num
# 确保更新“mysite.asgi”以匹配您的项目名称
command=python3 -m daphne -u 项目路径/%(process_num)d.sock --fd 0 --access-log - --proxy-headers 项目名称.asgi:application
# 要启动的进程数,大致为您拥有的 CPU 数
numprocs=4
# 给每个进程一个唯一的名称,以便它们可以被区分
process_name=asgi%(process_num)d
# 自动启动和恢复进程
autostart=true
autorestart=true
# 选择您希望日志存放的位置
stdout_logfile=日志目录/logs/asgi.log
redirect_stderr=true

然后就可以执行启动

sudo supervisord

后续通过supervisorctl查看进程运行情况

1.查看进程状态

sudo supervisorctl status

在这里插入图片描述
2.启动进程

sudo supervisorctl start 项目名称:*

3.停止进程

sudo supervisorctl stop 项目名称:*

4.重启进程

sudo supervisorctl restart 项目名称:*

5.停止所有进程

sudo supervisorctl stop all

6.更新配置后必须执行更新命令才生效

sudo supervisorctl update

7.重启supervisord,这个比较奇怪,好像update之后就会自动重启进程了,所以这个我没用过

sudo supervisorctl reload

8.关闭supervisord

sudo supervisorctl shutdown

nginx

nginx 就直接加一个pass 到对应的端口,配置也比uwsgi复杂很多。

		location /api {
            proxy_pass http://127.0.0.1:11000;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";

            proxy_redirect off;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Host $server_name;
        }

目前就是粗浅的搭起来先测试,后续有啥问题,我再来补充。

文章来源:https://blog.csdn.net/u013113491/article/details/134800233
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。