• nginx+uWSGI+django+virtualenv+supervisor发布web服务器


    项目部署

    —nginx+uWSGI+django+virtualenv+supervisor发布web服务器

    django的启动方式 python3 manage.py runserver 为什么不能在生产环境用?

    django只是一个web逻辑框架,它通过python3 manage.py runserver命令启动的socket服务端 是借助python内置的wsgi框架 wsgiref框架实现的 它是一个单机模块,单进程模块,性能很低因此在线上需要借助通过c语言编写的uwsgi这个web服务器软件,启动django

    为什么要用nginx 和uwsgi?

    nginx 可以解决uwsgi的静态文件问题,并且支持高并发请求,还能限流,保障后台服务器安全等等

    为什么要用uwsgi

    因为uwsgi支持多进程 多线程的方式,性能很高,启动django性能更好,但是uwsgi不解析django的静态文件

    我们以后会收集所有的django项目静态文件,丢给nginx去处理

    框架由低到高的性能顺序

    • djano

    • flask

    • tornado

    • sanic

    在进行uwsgi启动django的时候,是需要找到wsgi.py这个文件模块的,如果你报错提示 找不到application ,就是因为uwsgi 找不到wsgi.py

     

    1.准备crm项目代码

    2.准备一个新的虚拟环境,去启动crm,使用virtualenvwrapper创建新的虚拟环境

    1.解决虚拟环境依赖的问题,也就是保障本地开发环境和线上一致性的问题
    在windows本地 通过
    pip3 freeze > requirements.txt
    就能将 python3解释器中所有的模块导出到这个文件中 
        
    ​
    2.将这个 requirements.txt  文件传输到服务器上,进行安装,就可以自动解决所有模块问题
    pip3 install  -i http://pypi.douban.com/simple/  -r requirements.txt  

    3.使用uwsgi启动crm项目,确保进入虚拟环境,然后安装uwsgi

    workon nginx_crm
    ​
    下载uwsgi
    pip3 install uwsgi 

    4.使用uwsgi命令启动django项目,检测项目是否正常

    uwsgi --http :8088 --module Crm_Project.wsgi 
    ​
    参数解释
        --http指定http协议启动在 8088端口
        --module 找到项目第二层的目录,里面的wsgi.py文件
    如果你想启动一个http页面,提供测试访问,就用--http参数

    uwsgi支持热加载的启动方式命令如下

    uwsgi --http :8000 --module mysite.wsgi --py-autoreload=1    
    ​
    参数解释
        --http 启动在8088端口,
        --module 指定项目文件夹路径  
        --py-autoreload是热加载程序

    由于参数过多,这里引入配置文件的概念 叫做 uwsgi.ini my.cnf nginx.conf

     

    #正式启动环境在这里

    #正式启动环境在这里

    启动crm的配置文件如下 uwsgi.ini内容如下

    [uwsgi]
    # Django-related settings
    # the base directory (full path)
    #填写项目的绝对路径(第一层路径)
    chdir           = /opt/Crm_Project
    # Django's wsgi file
    #填写crm第二层目录下的wsgi.py文件的路径
    module          = Crm_Project.wsgi
    # the virtualenv (full path)
    #填写虚拟环境的绝对路径
    home            = /root/Envs/nginx_crm
    ​
    # process-related settings
    # master
    master          = true
    # maximum number of worker processes
    #基于uwsgi的多进程,根据cpu来优化 
    processes       = 4
    # the socket (use the full path to be safe
    ​
    #如果你用了nginx反向代理,就填写socket参数
    #如果你用了nginx反向代理,就填写socket参数
    socket          = 0.0.0.0:8000
    #如果你没用nginx,想直接通过浏览器测试后端,使用http 
    #http = 0.0.0.0:8000
    ​
    # ... with appropriate permissions - may be needed
    # chmod-socket    = 664
    # clear environment on exit
    vacuum          = true

    此时通过这种方式启动代码

    uwsgi --ini  uwsgi.ini

    5.配置crm收集所有的crm静态文件 编辑项目的settings.py 写入如下参数

    STATIC_ROOT= '/opt/crmstatic'  # 这个路径为自己要准备复制后存放的静态文件路径

    6.执行命令,收集crm所有的静态文件 ,会自动把项目下的静态文件复制在文件夹下面

    python3 manage.py collectstatic

    #此时后端的配置完毕!!!!开始搞nginx

    #此时后端的配置完毕!!!!开始搞nginx

    7.配置nginx,一是支持反向代理,二是支持静态文件加载 修改nginx.conf ,代码如下

    #当用户访问 www.s18dnf.com的时候,就进入这个虚拟主机
            location / {
            uwsgi_pass  0.0.0.0:8000;
            include uwsgi_params;
            }
    ​
            #这个location是解决crm的静态文件的问题的
            
    location /static  {
    #alias参数 就是将/static转化为/opt/crmstatic ,也就找到了我们所有的静态文件
    alias /opt/crmstatic;
    }

    8.重启nginx,查看反向代理效果

    nginx -s reload

    配置supervisor工具

    #注意要退出虚拟环境

    #注意要退出虚拟环境

    1.安装easy_install

    pip3是python3的软件包管理工具
    easy_install 是python2的软件包管理工具
        
    yum install python-setuptools

    2.安装supervisor

    easy_install supervisor

    3.创建supervisor的配置文件

    echo_supervisord_conf >  /etc/supervisor.conf 

    4.修改supervisor的配置文件,添加启动uwsgi的命令

    supervisor其实就是帮咱们执行了,需要手动执行的命令而已  

    vim /etc/supervisor.conf

    写入如下内容,在最底部写

    [program:s18crm]
    command=/root/Envs/nginx_crm/bin/uwsgi  --ini /opt/Crm_Project/uwsgi.ini
    stopasgroup=true
    killasgroup=true

    5.测试用supervisor启动uwsgi 

    #注意要确保此时uwsgi已经退出!

    #注意要确保此时uwsgi已经退出!

    supervisord -c  /etc/supervisor.conf   #这是启动supervisor服务端命令
    ​
    supervisorctl -c /etc/supervisor.conf   #这是supervisor客户端管理命令

    6.常用supervisor命令

    status s18crm #查看状态
    start s18crm  #启动任务
    stop  s18crm #停止任务
        
    start all  
    stop  all  #启停所有的任务

  • 相关阅读:
    Python爬虫系列(六):搜索文档树
    Python爬虫系列(五):分析HTML结构
    Python爬虫系列(四):Beautiful Soup解析HTML之把HTML转成Python对象
    Python爬虫系列(三):requests高级耍法
    Python爬虫系列(二):requests基础
    Python爬虫系列(一):从零开始,安装环境
    Python操作rabbitmq系列(六):进行RPC调用
    Python操作rabbitmq系列(五):根据主题分配消息
    Python操作rabbitmq系列(四):根据类型订阅消息
    Django使用模板进行动态局部刷新
  • 原文地址:https://www.cnblogs.com/robertx/p/10645696.html
Copyright © 2020-2023  润新知