美文网首页django
Django-30 项目部署 uwsgi

Django-30 项目部署 uwsgi

作者: JuliusL | 来源:发表于2021-08-04 22:14 被阅读0次

    基础概念

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

    sudo scp /home/tarena/django/mysite1
    root@88.77.66.55:/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


    image.png

    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掉

    相关文章

      网友评论

        本文标题:Django-30 项目部署 uwsgi

        本文链接:https://www.haomeiwen.com/subject/otlyvltx.html