Django-30 项目部署 uwsgi 基础概念 WSGI定义 uWSGI定义 uWSGI安装 uWSGI的运行管理 uWSGI常见问题汇总

基础概念

项目部署是指在软件发布完毕后,将开发机器上运行的软件实时安装到服务器上进行长期运行
1,在安装机器上安装和配置同版本的环境[py,数据库等]
2,django项目迁移

sudo scp /home/tarena/django/mysite1
[email protected]:/home/root/xxx
请输入root密码:

3,用uWSGI替代python3 manage.py runserver方法启动服务器
4,配置nginx反向代理服务器
5,用nginx配置静态文件路径,解决静态路径问题

WSGI定义

WSGI(Web Server Gateway Interface)Web服务器网关接口,是Python应用程序或框架和Web服务器之间的一种接口,被广泛使用
使用python manage.py runserver 通常只在开发和测试环境中使用。
当开发结束后,完善的项目代码需要在一个高效稳定的环境中运行,这时可以使用WSGI


uWSGI定义

uWSGI是WSGI的一种,它实现了HTTP协议WSGI协议以及uwsgi协议
uWSGI功能完善,支持协议众多,在python web圈热度极高
uWSGI主要以学习配置为主

uWSGI安装

Ubuntu执行sudo pip3 install uwsgi==2.0.18 -i
我在macos是直接执行pip install uwsgi安装成功的

检查是否安装成功

  • sudo pip3 freeze|grap -i 'uwsgi'
  • 如果成功安装,则会输出 uWSGI==2.0.18

配置uWSGI

添加配置文件 项目同名文件夹/uwsgi.ini
如:mysite1/mysite1/uwsgi.ini
文件以[uwsgi]开头,有如下配置项:

  • 套接字方式的IP地址:端口号【此模式需要有nginx】
    socket=127.0.0.1:8000
  • Http通信方式的IP地址:端口号
    http=127.0.0.1:8000
  • 项目当前工作目录
    chdir=/home/tarena/.../my_project
  • 项目中wsgi.py文件的目录,相对于当前工作目录
    wsgi-file=my_project/wsgi.py
  • 进程个数
    process=4
  • 每个进程的线程个数
    threads=2
  • 服务的pid记录文件
    pidfile=uwsgi.pid
  • 服务的日志文件位置
    daemonize=uwsgi.log
  • 开启主进程管理模式
    master = true
[uwsgi]
http=127.0.0.1:8000
chdir=/Users/liujia/program/django_code/tedu_note
wsgi-file=tedu_note/wsgi.py
process=4
threads=2
pidfile=uwsgi.pid
daemonize=uwsgi.log
master=true
特殊说明:Django的settings.py需要做如下配置

1,修改settings.py将DEBUG=True改为DEBUG=False
2,修改settings.py将ALLOWED_HOSTS=[]改为ALLOWED_HOSTS=['网站域名']或者['服务监听的ip地址']

uWSGI的运行管理

启动uwsgi

cd 到uWSGI配置文件所在目录
uwsgi --ini uwsgi.ini

liujiadeMacBook-Pro:tedu_note liujia$ uwsgi --ini uwsgi.ini
[uWSGI] getting INI configuration from uwsgi.ini
liujiadeMacBook-Pro:tedu_note liujia$ ps aux|grep 'uwsgi'
liujia            7583   0.0  0.0  4267768    900 s000  S+   10:05下午   0:00.00 grep uwsgi
liujia            7578   0.0  0.0  4377652    648   ??  S    10:05下午   0:00.00 uwsgi --ini uwsgi.ini
liujia            7577   0.0  0.0  4378176   2356   ??  S    10:05下午   0:00.00 uwsgi --ini uwsgi.ini
liujia            7576   0.0  0.2  4377652  33744   ??  S    10:05下午   0:00.47 uwsgi --ini uwsgi.ini
liujiadeMacBook-Pro:tedu_note liujia$ 

停止uwsgi

cd 到uWSGI配置文件所在目录
uwsgi --stop uwsgi.pid

liujiadeMacBook-Pro:tedu_note liujia$ uwsgi --stop uwsgi.pid
liujiadeMacBook-Pro:tedu_note liujia$ ps aux|grep 'uwsgi'
liujia            7598   0.0  0.0  4285176    924 s000  S+   10:07下午   0:00.00 grep uwsgi
liujiadeMacBook-Pro:tedu_note liujia$ 

注意点

1,无论启动还是关闭,都需要执行ps aux|grep 'uwsgi' 确认是否符合预期
2,启动成功后,进程在后台执行,所有日志均输出在配置文件所在目录的uwsgi.log中
3,Django中代码有任何修改,需要重新启动uwsgi

uWSGI测试

在浏览器输入http://127.0.0.1:8000/url 进行测试
注意:
此时端口8000被uWSGI进程监听,并非runserver
如果当前有预期返回,则uWSGI启动成功

uWSGI常见问题汇总

1,启动失败:端口被占用

原因:有其他进程占用uWSGI启动的端口;
解决方案:可执行 sudo lsof -i:端口号 查询出具体进程;杀掉进程后,重新启动uWSGI即可

2,停止失败:stop无法关闭uWSGI

原因:重复启动uWSGI,导致pid文件中的进程号失准
解决方案:ps出uWSGI进程,手动kill掉

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章