• Django + Uwsgi +Nginx生产环境部署


    python manage.py runserver 0.0.0.0:80 ,一定不要用这个轻量级Server作为你的生产环境下的Server,因为它只能用于开发自测阶段。它既没有安全审计功能,而且又是单线程的。

    生产坏境部署当然是Docker+Uwsgi+Nginx。

    准备条件:

      一个完整的项目文件。

    1.安装uwsgi

      uwsgi是python的一个模块,安装uwsgi只需简单的pip命令就可以了,pip3 install uwsgi     

    2.启动项目

    uwsgi --http :80 --chdir /path/to/project --home=/path/to/env --module project.wsgi

    --home 指定virtualenv 路径,如果没有可以去掉。project.wsgi 指的是 project/wsgi.py 文件  

     3. ini 配置文件启动

    [uwsgi]
    socket = :8000 # http = :8000
    chdir = /path/to/project
    wsgi-file = project/wsgi.py
    
    
    processes = 4 # 与服务器cpu数相同即可
    threads = 2
    

    这里我要讲一下http 和socket的区别:

    http:nginx 和 uwsgi 中间走的是 http 协议,文本。
    socket:nginx 和 uwsgi 中间走的是 wsgi 协议,二进制

    性能的话是socket更优,但是如果是前后端分离的场景,我们就需要采用http了。

     修改nginx default.conf

    server {
        listen      80;
        server_name localhost;
        charset     utf-8;
     
        client_max_body_size 75M;
     
        location /media  {
            alias /path/to/project/media/;
        }
     
        location /static {
            alias /path/to/project/static/;
        }
    
        location = /favicon.ico {
    	 rewrite (.*) /static/images/favicon.ico;
        }
     
        location / {
             # proxy_pass http://127.0.0.1:8000;
             include uwsgi_params;
             uwsgi_pass 127.0.0.1:8000;
        
        }
    }    

    uwsgi 常用配置参数

    chdir=/xxx/xxx # 指定项目目录
    home=/xxx/xxx # 指定虚拟环境变量
    wsgi-file=xxx # 指定加载WSGI文件
    socket=xxx # 指定uwsgi的客户端将要连接的socket的路径(使用UNIX socket的情况)或者地址(使用网络地址的情况)。
    callable=xxx # uWSGI加载的模块中哪个变量将被调用
    master=true # 指定启动主进程
    processes=4 # 设置工作进程的数量
    threads=2 # 设置每个工作进程的线程数
    vacuum=true # 当服务器退出时自动删除unix socket文件和pid文件
    logfile-chmod=644 # 指定日志文件的权限
    daemonize=%(chdir)/xxx.log # 进程在后台运行,并将日志打印到指定文件
    pidfile=%(chdir)/xxx.pid # 在失去权限前,将主进程pid写到指定的文件
    uid=xxx # uWSGI服务器运行时的用户id
    gid=xxx # uWSGI服务器运行时的用户组id
    procname-prefix-spaced=xxx # 指定工作进程名称的前缀
    

      

    Dockerfile环节:

    FROM python:3.6
    ENV TZ "Asia/Shanghai" # 设置时区
    
    RUN pip3 install -r /root/requirement.txt -i https://pypi.doubanio.com/simple/ 
    && pip3 install uwsgi 
    && pip3 install https://codeload.github.com/sshwsfc/xadmin/zip/django2
    
    CMD uwsgi /code/uwsgi.ini
    

      

  • 相关阅读:
    Python运维开发之路《WEB框架:Django》
    Python运维开发之路《函数进阶》
    Python运维开发之路《编程》
    Python运维开发之路《模块》
    Linux系统运维之Web服务器Nginx安装
    Python运维开发之路《高阶函数》
    Python运维开发之路《函数》
    <读书笔记>软件调试之道 :实证方法
    (知识分享)软硬件调试九法:第九条规则 如果你不修复一个bug,它将永远 存在
    (知识分享)软硬件调试九法:第八条规则 求助他人, 获得全新观点
  • 原文地址:https://www.cnblogs.com/zenan/p/8881079.html
Copyright © 2020-2023  润新知