1.在虚拟环境下安装uUWSGI
(env_dj) [root@chen1995 MyWebWord]# pip3 install uwsgi
2.在项目的同级目录新建一个script目录,然后新建一个uwsgi.ini文件
(env_dj) [root@chen1995 MyWebWord]# mkdir script # 新建目录
(env_dj) [root@chen1995 MyWebWord]# cd script # 进入目录
(env_dj) [root@chen1995 script]# vim uwsgi.ini # 新建uwsgi.ini
# 也可以在其他目录下新建uwsgi.ini文件,我这里直接在项目目录下创建,如下:
(env_dj) [root@chen1995 MyWebWord]# vim uwsgi.ini
3.配置uwsgi.ini文件
当配置socket或http,服务器地址时,这里有个坑需要注意–如果我们使用的是云服务器,这里要写私有IP----不要写公网IP
[uwsgi]
#套接字方式--使用nginx连接时使用,后面是Django程序所在服务器地址
# socket=192.168.0.214:8000
#http通信方式--直接做web服务器使用,后面是Django程序所在服务器地址
http=192.168.0.214:8000
#配置当前工作的项目目录
chdir=/home/myproject/MyWebWord
#项目中wsgi.py文件的目录,相对于项目目录
wsgi-file=MyWebWord/wsgi.py
# 进程数
processes=4
# 线程数
threads=2
# 开启主进程模式--uwsgi服务器的角色 uwsgi做主进程,关闭该进程其他相关进程也会被杀掉
master=True
# 存放进程编号的文件
pidfile=uwsgi.pid
# 后台运行,并输出日志,后面是日志文件位置,后台运行时看不见终端所以只能查看日志
daemonize=uwsgi.log
一般使用以上配置基本可以满足需求–但是uwsgi还有很多其他配置项如下:
# 并发的socket 连接数。默认为100。优化需要根据系统配置--未测试
listen = 4
# 如果想加载静态文件,则配置静态文件所在目录--未测试
static-map=/static=/home/myproject/MyWebWord/static
# 指定依赖的虚拟环境--未测试
virtualenv=/home/python/.virtualenvs/django_2.2_env
# 指定python环境路径 二选一 --未测试
pythonpath=/home/python/.virtualenvs/django_2.2_env/lib/python/site-packages
# pythonpath=/home/python/.virtualenvs/django_2.2_env/bin
#monitor uwsgi status 通过该端口可以监控 uwsgi 的负载情况--未测试
stats = 0.0.0.0:9192
# 启动uwsgi的用户名和用户组
uid=root
gid=root
# 设置自中断时间
harakiri=30
# 设置缓冲
post-buffering=4096
# 设置自中断时间
harakiri=30
# 设置缓冲
post-buffering=4096
4.使用uwsgi启动web服务
启动时进入虚拟环境–进入项目目录–输入以下命令
uwsgi --ini uwsgi.ini
5.关闭uswsgi
关闭时进入虚拟环境–进入项目目录–输入以下命令
uwsgi --stop uwsgi.pid
或者使用pkill杀掉所有uwsgi进程:
pkill -f -9 uwsgi
6.Django的settings.py文件配置
# 配置为生产环境时关闭debug功能
DEBUG = False
# 配置ALLOWED_HOSTS
ALLOWED_HOSTS = ['公网IP', 'localhost', '0.0.0.0:8000', '127.0.0.1']
7.使用脚本启动uWSGI
使用脚本前,需要先进入项目的虚拟环境后在执行脚本
启动uWSGI
import os
print('开始执行启动uWSGI')
print('执行命令: cd /home/myproject/MyWebWord')
os.popen(r"/home/myproject/MyWebWord")
start = os.popen('uwsgi --ini uwsgi.ini').read()
print('执行命令: uwsgi --ini uwsgi.ini')
print(start)
print('脚本执行完毕')
停止uWSG
import os
print('开始执行停止uWSGI')
print('执行命令: cd /home/myproject/MyWebWord')
os.chdir(r"/home/myproject/MyWebWord")
print('执行命令: uwsgi --stop uwsgi.pid')
stop = os.popen('uwsgi --stop uwsgi.pid').read()
print(stop)
print('脚本执行完毕')