centos7+宝塔+nginx+django+wsgi+asgi+daphne部署服务器环境

1.宝塔中建立站点

 

 2.上传项目文件到站点目录中

 上传文件后,请设置好setting.py,asgi.py,wsgi.py

 

 3.安装项目依赖包

可以在虚拟机环境中安装,也也可以直接在本机系统中安装,根据自己的情况来看。

在原项目下使用导出需要安装的包名:

pip3 freeze > packages.txt 

在服务器的虚拟环境下,一键下载项目依赖包:

pip install -r packages.txt

如果有数据库连接,请初始化数据库

进入项目根目录运行

python3 manage.py migrate

4.创建uwsgi的配置文件

在项目根目录创建一个名称myproject.ini,名称可以根据自己的项目名来定义

#添加配置选择
[uwsgi]
#配置和nginx连接的socket连接
socket=127.0.0.1:7003
#配置项目路径,项目的所在目录
chdir=/www/wwwroot/server.manai.tech/
#配置wsgi接口模块文件路径,也就是wsgi.py这个文件所在的目录
wsgi-file=myproject/wsgi.py
#配置启动的进程数
processes=4
#配置每个进程的线程数
threads=2
#配置启动管理主进程
master=True
#配置存放主进程的进程号文件
pidfile=uwsgi.myproject.pid
#配置dump日志记录
daemonize=uwsgi.pmyproject.log

5.修改nginx配置

修改站点的nginx配置

 

 

 

listen 80;
    server_name server.manai.tech api.pms.webok.me;
    index index.php index.html index.htm default.php default.htm default.html;
    root /www/wwwroot/server.manai.tech;
    location / { 
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:7003;  #端口要和uwsgi里配置的一样
        uwsgi_param UWSGI_SCRIPT myproject.wsgi;  #wsgi.py所在的目录名+.wsgi
        uwsgi_param UWSGI_CHDIR /www/wwwroot/server.manai.tech/; #项目路径 
        }

 

6.uwsgi启动项目

确保先安卓了uwsgi  没安装  运行 pip3 install uwsgi

在项目的目录下运行一下命令(创建了虚拟的,要在虚拟环境下启动)

uwsgi --ini  myproject.ini

停止:kill -9 pid   /  uwsgi --stop uwsgi.pid

问题1:实际应用过程中发现UWSGI没有主动释放内存,导致内存不断增大。

办法:启动时:uwsgi --ini uwsgi.ini --evil-reload-on-as 100 --evil-reload-on-rss 100

#虚拟内存或者实际内存大于100M,UWSGI主进程将重启子进程

问题2:没有uwsgi命令,uwsgi: command not found

find / -name uwsgi

ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi

 

7.asgi相关配置,以便运行websocket项目

修改nginx上的配置 在http {}中添加

 

 

# websocket
        upstream channels-backend {
           server 127.0.0.1:8001;
        }

进入项目目录运行daphne命令

daphne -p 8001 myproject.asgi:application -b 0.0.0.0

 

 问题:运行上面命令提示 bash:daphne command not found

先卸载daphne  

pip3 uninstall daphne

然后重新安装

pip3 install daphne

然后重新建立软连接

find / -name daphne

ln -s /home/spark/bulut/python3/python3/bin/daphne /usr/bin/daphne

然后重新运行daphne命令就可以了

 

8.websocket在线测试

http://www.jsons.cn/websocket/

 

 

 

 

9.supervisor进程管理

上面已经完成了Daphne的部署,但是此时启动daphne是在服务器屏幕前端启动的,启动之后没法干别的事,而且在进程挂掉之后也没法自动重启,这两个问题还是挺严重的,因此需要使用supervisor来管理进程。

安装supervisor

yum install -y supervisor

安装完之后,最重要的就是配置conf文件,首先生成conf文件:

echo_supervisord_conf > /etc/supervisord.conf

修改配置文件/etc/supervisord.conf,最后一行增加(注意[include]前面不能有;)

[include]
files = supervisord.d/*.ini
表示配置文件读取supervisord.d目录下所有后缀为.ini的文件。

创建配置目录,并创建配置文件

mkdir /etc/supervisord.d/
vi /etc/supervisord.d/asgi.ini
内容如下:

[program:asgi]
directory = /www/wwwroot/server.manai.tech  # 项目根目录
command =  daphne -b 0.0.0.0 -p 8001 myproject.asgi:application
autostart=true
autorestart=true
# 日志文件
stdout_logfile=/www/wwwroot/server.manai.tech/logs/%(program_name).asgi.log
stderr_logfile=/www/wwwroot/server.manai.tech/logs/%(program_name).asgi.log

[program:uwsgi]
directory = /www/wwwroot/server.manai.tech
command = uwsgi --ini /www/wwwroot/server.manai.tech/myproject.ini
autostart=true
autorestart=true
# 日志
stdout_logfile=/www/wwwroot/server.manai.tech/logs/%(program_name).uwsgi.log
stderr_logfile=/www/wwwroot/server.manai.tech/logs/%(program_name).uwsgi.log


# 这个是必须的,不然启动服务会报错可以通过下面网站查看具体配置怎么写
#[http://supervisord.org/configuration.html#supervisord-section-settings]
[supervisord]
# supervisor日志,这里日志文件需要到路径下手动创建
logfile = /www/wwwroot/server.manai.tech/logs/supervisord.log
pidfile = /www/wwwroot/server.manai.tech/logs/supervisord.pid
directory = /www/wwwroot/server.manai.tech/logs
childlogdir = /www/wwwroot/server.manai.tech/logs

启动supervisord

supervisord -c /etc/supervisord.conf

问题:Error: Another program is already listening on a port that one of our HTTP servers is configured to use.  Shut this program down first before starting supervisord.

[root@air rootair]# ps -ef | grep supervisord
root      1438     1  0 03:12 ?        00:00:00 /usr/bin/python /usr/bin/supervisord -c /etc/supervisord.conf
root      2882  2820  0 03:14 pts/0    00:00:00 grep --color=auto supervisord
[root@air rootair]# kill -s SIGTERM 1438

然后重新运行supervisord -c /etc/supervisord.conf

 

使用supervisorctl tail program_name stderr命令查看错误信息

sudo supervisorctl tail daphne stderr

 

修改了Supervisor 配置文件正确配置后,可以使用以下命令重新加载配置文件以使其生效:

sudo supervisorctl reread
sudo supervisorctl update

注意:/etc/supervisord.d/asgi.ini里面的单词千万别错了 directory

 

其他:

停用uwsgi重启uwsgi(我这里启用uwsgi的端口是7003)

netstat -anp|grep 7003|awk '{print $7}'|awk -F '/' '{print $1}'|xargs kill -s 9

supervisorctl restart uwsgi

同理重启daphne

supervisorctl restart daphne

 

 

 

 



 
 

 

posted @ 2023-02-21 21:06  繁华博客  阅读(950)  评论(0编辑  收藏  举报