• 使用Nginx+uWSGI+Django方法部署Django程序


    • 第一步先解决uwsgi与django的桥接。解决在没有nginx的情况下,如何使用uwsgi+DJANGO来实现一个简单的WEB服务器。

    • 第二步解决uwsgi与Nginx的桥接。通过nginx与uwsgi的桥接,打通nginx与django的连通,从而比较完美的实现django的部署。

    本文将分成五步来详细阐述uwsgi+django的部署方式。nginx+uwsgi+django的部署将在下一篇 文章中阐述。

    本文大纲:

    • 环境介绍
    • 安装uwsgi
    • 测试uwsgi
    • 配置django
    • 连接django和uwsgi,实现简单的WEB服务器。

    安装uwsgi(安装uwsgi前 需安装 XML支持 yum install libxml*)

    安装libxml*

    yum install libxml*

    如果在安装libxml前就安装了uwsgi则 在安装libxml后需要 重新编译安装

    #或者使用python编译
    python uwsgiconfig.py --build
     
    #复制生成的可执行文件uwsgi到/usr/sbin/目录下
    cp uwsgi /usr/sbin/

    否则直接安装

    cd uwsgi-2.0.14
    python setup.py install
    cp uwsgi /usr/bin


     在安装uwsgi后 python的软连接 有可能被设置回2.6上 需重新执行下软连接设置

    3、备份原有python命令执行文件
    
    mv /usr/bin/python /usr/bin/pythonbak
    
    4、创建新python软连接
    
    ln -s /usr/local/python3/bin/python3.5 /usr/bin/python

    4.测试uwsgi

    在你的机器上写一个test.py

    # test.py
    def application(env, start_response):
        start_response('200 OK', [('Content-Type','text/html')])
        return "Hello World"
    

    然后执行shell命令:

    uwsgi --http :8001 --wsgi-file test.py
    

    访问网页:

    http://127.0.0.1:8001/

    看在网页上是否有Hello World

     

     有些时候,把程序放在生产环境,不过出于一些原因还没有配置nginx等环境,关闭了Debug,想看看网站,这时会出现静态文件无法访问,界面一塌糊涂的情况。使用如下命令即可成功使用静态文件

    python manage.py runserver 0.0.0.0:8000 --insecure

    编写wsgi.py文件,将其放在与文件manage.py同一个目录下,如果程序本身已经有wsgi文件,把它放到和文件manage.py同一个文件夹

    #!/usr/bin/env python
    # coding: utf-8
    
    import os
    import sys
    
    # 将系统的编码设置为UTF8
    reload(sys)
    sys.setdefaultencoding('utf8')
    
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")
    
    from django.core.handlers.wsgi import WSGIHandler
    application = WSGIHandler()
    
     

    连接django和uwsgi,实现简单的WEB服务器。

    我们假设你的Django项目的地址是 /usr/local/BBS_Pro,

    然后,就可以执行以下命令:

    uwsgi --http :8000 --chdir /usr/local/BBS_Pro --module wsgi

    这样,你就可以在浏览器中访问你的Django程序了。所有的请求都是经过uwsgi传递给Django程序的



    二.Nginx安装

     

    l  gzip模块需要 zlib 库

     

    l  rewrite模块需要 pcre 库

     

    l  ssl 功能需要openssl库

     通过  yum 安装,安装下列插件 g++、gcc、openssl-devel、pcre-devel和zlib-devel

    yum -y g++ install

    安装完上面插件后 安装nginx

    获取nginx,在http://nginx.org/en/download.html上可以获取当前最新的版本。
    
     解压缩nginx-xx.tar.gz包。
    
      进入解压缩目录,执行./configure
    
      make & make install

    安装完成后 进入安装目录下 /nginx/sbin/  运行nginx服务

    ./nginx #启动
    ./nginx -s reload 重新启动

    正常情况访问 在浏览器中访问localhost可以看见nginx的欢迎界面,说明安装成功

    配置nginx和uwsgi互通

    2.在django项目文件夹manage.py目录 添加uwsgi和nginx的互相通信xml文件djangochina_socket.xml

    <uwsgi>
        <socket>127.0.0.1:8077</socket>
        <chdir>/usr/local/BBS_Pro</chdir>
        <module>wsgi</module>
        <processes>4</processes>
        <daemonize>uwsgi.log</daemonize>
    </uwsgi>


    3.进入nginx安装目录下 conf/nginx.conf文件编辑配置

    server 节点添加下列内容  8077为 内部通信端口

            location / {
                include uwsgi_params;
                uwsgi_pass 127.0.0.1:8077;
            }

    如果需要调整IP和端口设置server节点下列内容 80为 程序对外发布端口

        listen       80;
            server_name  loaclhost;

     设置完毕 重新载入 nginx

    sudo service nginx reload

    启动Nginx相关模块

    配置好之后就可以开启nginx服务器了。

    可以在终端执行:

    #service nginx start

    注:可能会出现一下错误:

    nginx: unrecognized service

    解决方法:

    下载nginx的启动脚本:
    # wget -O init-deb.sh http://library.linode.com/assets/660-init-deb.sh
    将脚本添加到init.d目录和生成可执行:
    # sudo mv init-deb.sh /etc/init.d/nginx
    # sudo chmod +x /etc/init.d/nginx
    加的nginx到系统启动:
    # sudo /usr/sbin/update-rc.d -f nginx defaults(这边可能不成功)

    现在我们可以使用nginx的控制:

    sudo service nginx stop 
    sudo service nginx start 
    sudo service nginx restart
    sudo service nginx reload

    启动uWSGI服务器 加载django的xml设置

    uwsgi -x /usr/local/BBS_Pro/djangochina_socket.xml

    如果两个都正常启动 可以在 进程中看见 命令:ss -tunlp

    tcp   LISTEN     0      100                                                           *:8077                                                         *:*      users:(("uwsgi",2762,3),("uwsgi",2764,3),("uwsgi",2765,3),("uwsgi",2766,3))
    tcp   LISTEN     0      128                                                           *:80                                                           *:*      users:(("nginx",3189,6),("nginx",3190,6))

    这个时候访问localhost:80就可以正常显示django项目页面

    如果正常访问后出现页面CSS 样式和js文件丢失的情况如下解决

    在django项目的settings.py文件中 添加 节点,设置css和js等静态文件的路径

    STATIC_ROOT='/usr/local/BBS_Pro/static1/'

    在nginx.conf中节点保证和上面设置一致

    location /static/ {
                alias  /usr/local/BBS_Pro/static1/;
                index  index.html index.htm;
            }

    调用命令执行django程序 静态文件的 收集到当前设置的路径

    python manage.py collectstatic


    重新启动nginx 访问正常!!

    ./nginx -s reload

     当服务器重新启动后 只需要 依次开启服务就可以访问

    1.开启nginx

    service nginx start
    

     2.运行DJANGO程序服务器 uwsgi

    uwsgi --http :8000 --chdir /usr/local/BBS_Pro --module wsgi
    

     3.运行DJANGO程序 XML配置文件

    uwsgi -x /usr/local/BBS_Pro/djangochina_socket.xml
    
  • 相关阅读:
    onmousewheel
    Zepto 使用中的一些注意点(转)
    oninput onpropertychange 监听输入框值变化
    try catch
    center的用法
    [转]你的编程语言可以这样做吗?(map/reduce的js示范) (转)
    vue中 $event 的用法--获取当前父元素,子元素,兄弟元素
    chrome的vue插件——vue.js devtools的安装
    说明与比较:new Vue() 和 export default {}
    Vue反转字符串及join(),reverse()与 split()函数用法解析
  • 原文地址:https://www.cnblogs.com/whzym111/p/5937501.html
Copyright © 2020-2023  润新知