- 系统版本:centos7.1
- python版本:3.6
- sqlite版本:3.7
- django版本:2.1
- uwsgi版本:2.0.17
本文前提说明:html
- 一、安装uwsgi以前 python3 和 Django2.1 环境已经部署完成
- 二、已经安装过sqlite或其它数据库,进入python3可用正常引用模块 import sll
- 三、uwsgi配置文件格式 ini、xml、json 均可,本文以经常使用的ini配置格式为例
详细配置参数和变量可参考博文《uwsgi配置详解》或官方配置文档python
安装uwsgi[python2或未定义的请用pip命令安装]nginx
pip3 install uwsgi
查看uwsgi版本sql
uwsgi --version 2.0.17.1
为方便使用,建立uwsgi软链接数据库
ln -s /usr/local/python36/bin/uwsgi /usr/bin/uwsgi
建立 test.py 测试文件,该uwsgi测试文件在python3中执行不显示django
def application(env, start_response): start_response('200 OK', [('Content-Type','text/html')]) # return "Hello World" # 注:python2使用 return [b"Hello World"] # 注:python3使用
运行 uwgi 服务测试json
uwsgi --http :8001 --wsgi-file test.py
【结果】centos
输入 http://IP:8001 页面显示 Hello World 为服务正常运行
==备注说明:因部署环境版本不一样可能输出不了 Hello World 但服务能够正常运行,访问无报错信息便可。此服务测试仅作参考==app
具体配置参数可参考官方文档或博文《UWSGI配置详解》socket
==ini方法是较经常使用的配置方式==
建立 uwsgi.ini 配置文件,通常存放在在django项目下
[uwsgi] #自定义变量 projectname = MyDjango base = /www/DjangoProject/MyDjango/ # 启动uwsgi的用户名和用户组 uid = www gid = www # 个人项目目录 chdir = %(base) # 指定项目的application module = %(projectname).wsgi:application # 进程个数 workers = 5 # 启用主进程 master = true # 自动移除unix Socket和pid文件当服务中止的时候 vacuum = true # 序列化接受的内容,若是可能的话 thunder-lock = true # 启用线程 enable-threads = true # 设置自中断时间 harakiri = 30 # 设置缓冲 post-buffering = 4096 #pid文件保存路径 pidfile = /tmp/uwsgi.pid # 设置日志目录 daemonize = /tmp/uwsgi.log # 指定sock的文件路径,能够用端口或sock文件 #socket = 192.168.88.20:8099 socket = /tmp/uwsgi.sock
setting
DEBUG = False ALLOWED_HOSTS = ['www.test.com','127.0.0.1','192.168.88.88','localhost'] 或 ALLOWED_HOSTS = ['*']
添加nginx虚拟主机配置
==注意:alias路径要和项目setting的STATICFILES_DIRS路径设置保持一致==
server { listen 80; server_name www.test.com; charset utf-8; location / { include uwsgi_params; include mime.types; uwsgi_pass unix:/tmp/uwsgi.sock; } location /static/ { alias /www/DjangoProject/MyDjango/APP/templates/; } error_log /www/wwwlogs/www.test.com.error.log; access_log /www/wwwlogs/www.test.com.access.log; }
配置完成后启动服务加载配置
uwsgi --ini uwsgi.ini
重载uwsgi配置文件
uwsgi --reload /tmp/uwsgi.pid
中止uwsgi服务
uwsgi --stop /tmp/uwsgi.pid
若使用stop不能彻底中止进程能够用kill循环强行结束
for i in `ps axu |grep -vi 'grep'| grep "uwsgi" | awk '{print $2}'`;do kill -9 $i;done