文档章节

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

IamOkay
 IamOkay
发布于 2016/04/16 08:58
字数 1069
阅读 319
收藏 2

#程序员薪资揭榜#你做程序员几年了?月薪多少?发量还在么?>>>

在上一篇文章《五步教你实现使用Nginx+uWSGI+Django方法部署Django程序(上)》中,阐述了如何只使用uWSGI来部署Django程序。

当然,单单只有uWSGI是不够的,在实际的部署环境中,Nginx是必不可少的工具。

在本篇文章中,我将一直延用“N步法”的风格来阐述如何将uWSGI与Nginx做连接来部署Django程序。并在最后,会较为完整的阐述本社区的部署方法。

本文大纲:

  • 环境介绍

  • 配置uWSGI

  • 配置Nginx

  • Nginx+uWSGI+Django的实现方式

  • 一些建议

环境介绍

  1. Ubuntu 12.04.1 LTS

  2. django 1.4.2

  3. nginx/1.2.6

  4. uWSGI 1.4.4

关于uWSGI的安装可参见上一篇文章 上一篇文章《五步教你实现使用Nginx+uWSGI+Django方法部署Django程序(上)》

我们假定你已经安装好Nginx了。

配置uWSGI

在上一篇文章《五步教你实现使用Nginx+uWSGI+Django方法部署Django程序(上)》中,我们是直接使用命令行来启动uWSGI,在实际部署环境中,我们常用的是配置文件的方式,而非命令行的方式。我的一般做法是用命令行来测试是否uWSGI安装成功,然后用配置文件来真正部署。

另外,为了实现Nginx与uWSGI的连接,两者之间将采用soket来通讯方式。

在本节中,我们将使用uWSGI配置文件的方式来改进uWSGI的启动方式。

假定你的程序目录是 /home/work/src/sites/testdjango1/testdjango/mysite

我们将要让Nginx采用8077端口与uWSGI通讯,请确保此端口没有被其它程序采用。

注意,请确定你在上一节《五步教你实现使用Nginx+uWSGI+Django方法部署Django程序(上)》中的django_wsgi.py文件已经存在了。

新建一个XML文件:

djangochina_socket.xml,将它放在 /home/work/src/sites/testdjango1/testdjango/mysite 目录下:

<uwsgi>
    <socket>:8077</socket>
    <chdir>/home/work/src/sites/testdjango1/testdjango/mysite</chdir>
    <module>django_wsgi</module>
    <processes>4</processes> <!-- 进程数 --> 
    <daemonize>uwsgi.log</daemonize></uwsgi>

在上面的配置中,我们使用 uwsgi.log 来记录日志,开启4个进程来处理请求。

这样,我们就配置好uWSGI了。

配置Nginx

我们假设你将会把Nginx程序日志放到你的目录/home/work/var/test/logs/下,请确保该目录存在。

我们假设你的Django的static目录是/home/work/src/sites/testdjango1/testdjango/collectedstatic/ , media目录是/home/work/src/sites/testdjango1/testdjango/public/media/,请确保这些目录存在。

我们假设你的域名是 www.you.com (在调试时你可以设置成你的机器IP)

我们假设你的域名端口是 80(在调试时你可以设置一些特殊端口如 8070)

基于上面的假设,我们为conf/nginx.conf添加以下配置

server {

        listen   80;
        server_name www.you.com;
        access_log /home/work/var/test/logs/access.log;
        error_log /home/work/var/test/logs/error.log;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

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

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        location /static/ {
            alias  /home/work/src/sites/testdjango1/testdjango/collectedstatic/;
            index  index.html index.htm;
        }

        location /media/ {
            alias  /home/work/src/sites/testdjango1/testdjango/public/media/;
        }
    }

在上面的设置后,可以让Nginx来处理静态文件(/static/ 和 /media/ )。非静态文件请求Nginx会发给 socket 8077,然后让uWSGI来进行处理。

Nginx+uWSGI+Django的实现方式

在完成上面配置后,需要按以下步骤来做:

  1. 重启Nginx服务器,以使Nginx的配置生效。

    nginx -s  reload

    重启后检查Nginx日志是否有异常。

  2. 启动uWSGI服务器

    cd /home/work/src/sites/testdjango1/testdjango/mysite
    
    uwsgi -x djangochina_socket.xml

    检查日志 uwsgi.log 是否有异常发现。

  3. 访问服务

    基于上面的假设你的域名是www.you.com

    因此,我们访问 www.you.com,如果发现程序与 单独使用Django启动的程序一模一样时,就说明成功啦!

  4. 关闭服务的方法

    将uWSGi进程杀死即可。

一些建议

  1. uWSG配置文件的进程数,可以根据实际情况分配。不要开得太大,否则机器可能会内存耗用太高。一般来说,对于一个小社区来说,4个进程已经足够了。

  2. 一般情况下,可以编写一下 stop.sh 脚本 来关闭uWSGI。


本文转载自:http://www.django-china.cn/topic/124/

IamOkay

IamOkay

粉丝 204
博文 491
码字总数 411614
作品 0
海淀
程序员
私信 提问
加载中

评论(0)

django + nginx + uWSGI部署

uwsgi+nginx 部署 1.WSGI Python Web Server Gateway Interface,缩写为WSGI接口协议 2.uwsgi 线路协议 3.uWSGI uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。Nginx中HttpU...

hyhlinux
2016/10/28
66
0
Django之部署NGINX+uWSGI

参考地址:http://www.cnblogs.com/CongZhang/p/6548529.html http://www.cnblogs.com/alex3714/p/6538374.html http://uwsgi.readthedocs.io/en/latest/tutorials/Djangoandnginx.html ----......

LinQiH
2017/11/07
0
0
Ubuntu上通过nginx部署Django笔记

Django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比较常见的一种方式。今天在Ubuntu上使用Nginx部署Django服务,虽然不是第一次搞这个了,但是发现还是跳进了好多坑,google了好久才...

j_hao104
2016/11/16
156
0
nginx+uWSGI+django+virtualenv+supervisor发布web服务器流程

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

osc_eeqivisd
2019/02/28
3
0
Django + Uwsgi + Nginx 实现生产环境部署1

项目开发完毕后,需要将代码放到服务器上,这样用户才能访问。接下来我们一步一步来进行一波部署操作。 1. 简单粗暴 项目开发完毕,在部署之前需要再配置文件中将 ALLOWED_HOSTS配置设置为:...

osc_42ssirsd
2019/03/08
2
0

没有更多内容

加载失败,请刷新页面

加载更多

IntelliJ 安装 Python 插件

运行 IntelliJ,然后在 IntelliJ 的设置中找到 插件。 然后在插件中搜索 Python 如果你没有安装的话,你应该是没有办法找到的。 你可以选择搜索 MarketPlace 选择官方的插件进行安装就可以了...

honeymoose
刚刚
0
0
记一次element ui table 数据改变UI没渲染的坑

我要根据外界的值来判断我显示的table是单选还是多选,但是props的值变了UI却一直没什么反应,后来采用了强制刷新,在组件上加了一个:key= XXX,这个key根据外界的值得变化而变化,问题解决...

osc_5p8bxoq2
刚刚
0
0
ASP.NET Core MVC如何上传文件及处理大文件上传

用文件模型绑定接口:IFormFile (小文件上传) 当你使用IFormFile接口来上传文件的时候,一定要注意,IFormFile会将一个Http请求中的所有文件都读取到服务器内存后,才会触发ASP.NET Core MV...

osc_yq7pxbpa
1分钟前
0
0
ASP.NET Core MVC如何上传文件及处理大文件上传

用文件模型绑定接口:IFormFile (小文件上传) 当你使用IFormFile接口来上传文件的时候,一定要注意,IFormFile会将一个Http请求中的所有文件都读取到服务器内存后,才会触发ASP.NET Core MV...

osc_dihgscoq
3分钟前
0
0
马斯克的宇宙飞船爆炸了!但不会影响SpaceX的载人发射

  该炸的 Starship 原型机总是会炸的,该进行的载人任务也总是会发射的。   承载着 SpaceX 未来星际旅行梦想的 Starship 宇宙飞船原型机再一次在测试中以全部炸毁收场。      但需要...

osc_35ne77sz
4分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部