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

时间:2022-09-01 16:10:37
  • 第一步先解决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:</socket>
<chdir>/usr/local/BBS_Pro</chdir>
<module>wsgi</module>
<processes></processes>
<daemonize>uwsgi.log</daemonize>
</uwsgi>

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

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

        location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:;
}

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

    listen       ;
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

使用Nginx+uWSGI+Django方法部署Django程序的更多相关文章

  1. 五步教你实现使用Nginx&plus;uWSGI&plus;Django方法部署Django程序

    Django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比较常见的一种方式. 在这种方式中,我们的通常做法是,将nginx作为服务器最前端,它将接收WEB的所有请求,统一管理请求.ng ...

  2. 使用Nginx&plus;uWSGI&plus;Django方法部署Django程序&lpar;下&rpar;

    在上一篇文章<五步教你实现使用Nginx+uWSGI+Django方法部署Django程序(上)>中,阐述了如何只使用uWSGI来部署Django程序. 当然,单单只有uWSGI是不够的, ...

  3. 使用Nginx&plus;uWSGI&plus;Django方法部署Django程序&lpar;上&rpar;

    Django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比较常见的一种方式. 在这种方式中,我们的通常做法是,将nginx作为服务器最前端,它将接收WEB的所有请求,统一管理请求.ng ...

  4. Nginx&plus;uWSGI或fastcgi部署Django项目

    nginx+uWSGI ubuntu下先安装下C编译器和Python环境: sudo apt-get install build-essential python-dev 使用pip安装uWSGI: ...

  5. Django&plus;Nginx&plus;uWSGI生产环境部署

    生产环境中的数据流 参考文档: wsgi详解:https://blog.csdn.net/li_101357/article/details/52748323 wsgi协议介绍(萌新版):https: ...

  6. Django项目部署&lpar;django&plus;guncorn&plus;virtualenv&plus;nginx&rpar;

    一.说明 为了django项目部署到生产环境上,能够稳定的运行,且能够同时指出http和https的访问,对django的部署进行了一些研究,决定采用django + gunicorn + virtu ...

  7. Ubuntu Nginx Uwsgi Python布置服务器Django项目

     1 安装python 3.6 ubuntu预装了2.7,不需要卸载预装库,直接安装python3.6(其实现在的阿里云18.04会给你自动装python2.7.15和3.6.8) 你可以分别查看一下 ...

  8. nginx&plus;uwsgi&plus;virtualenv&plus;supervisor部署项目

    一.导论 WSGI是Web服务器网关接口.它是一个规范,描述了Web服务器如何与Web应用程序通信,以及Web应用程序如何链接在一起以处理一个请求,(接收请求,处理请求,响应请求) 基于wsgi运行的 ...

  9. nginx&plus;uwsgi&plus;flask搭建python-web应用程序

    Flask本身就可以直接启动HTTP服务器,但是受限于管理.部署.性能等问题,在生产环境中,我们一般不会使用Flask自身所带的HTTP服务器. 从现在已有的实践来看,对于Flask,比较好的部署方式 ...

随机推荐

  1. Python自动化之rabbitmq rpc client端代码分析(原创)

    RPC调用client端解析 import pika import uuid # 建立连接 class FibonacciRpcClient(object): def __init__(self): ...

  2. C泊车管理系统

    // //  main.c //  泊车管理系统 // //  Created by 丁小未 on 13-7-14. //  Copyright (c) 2013年 dingxiaowei. All ...

  3. modeler与activiti进行整合

    整合Activiti Modeler到业务系统(或BPM平台) http://www.kafeitu.me/activiti/2013/03/10/integrate-activiti-modeler ...

  4. yum nfs

    linux下3大文件共享方法 1.NFS NFS服务器配置 编辑/etc/exports,在文件中列出,要共享的目录.书写规则是:共享目录主机(参数).并且每条规则占据一行.例如: /mnt/mp3 ...

  5. 利用代码改变世界 &num;AzureDev

    毫无疑问,开发人员是 //build/ 2013 的主角.开发人员是我们这个行业的心脏和灵魂,我们很感谢他们所做的一切.在 Satya Nadella 走上讲台发表第 2 天的主题演讲之前,我们播放了 ...

  6. POJ3617 Best Cow Line 馋

    虽然这个问题很简单,但非常好,由于过程是很不错的.发展思路的比较 并鼓励人们,不像有些贪心太偏,推动穷人,但恼人 鉴于长N弦S,然后又空字符串STR.每当有两个选择 1:删S增加虚假的第一要素STR于 ...

  7. 二部图&lpar;二分图判定--dfs&rpar;

    题目链接:二部图 二部图 时间限制:1000 ms  |  内存限制:65535 KB 难度:1 描述 二 部图又叫二分图,我们不是求它的二分图最大匹配,也不是完美匹配,也不是多重匹配,而是证明一个图 ...

  8. vue&plus;vuex 回退定位到初始位置

    先放出两张图(没错,你还在9012,做为一名资深设计师我唯一的技能点就是留白),简单说明下问题未做回退定位(从落地页回退,每次都回到A位置)想死啊有木有,每次都需要手动重新定位来选择,你大哥看到你做个 ...

  9. JavaSE &vert; 接口&vert; 枚举&vert; 注释&vert; 异常

    包: 1.包的作用:(1)避免类的同名(区分类):类的全名称:包.类名 回忆:java.util.Scannerjava.util.Arraysjava.lang.Stringj(2)可以限定某些类或 ...

  10. 修改web&period;config来开启Gzip压缩

    IIS 7.0之后引入的一个IIS配置文件,详细内容参考官方链接http://www.iis.net/learn/get-started /planning-your-iis-architecture ...