使用Nginx+uWSGI+Django方法部署Django程序(下)
在上一篇文章《五步教你实现使用Nginx+uWSGI+Django方法部署Django程序(上)》中,阐述了如何只使用uWSGI来部署Django程序。
当然,单单只有uWSGI是不够的,在实际的部署环境中,Nginx是必不可少的工具。
在本篇文章中,我将一直延用“N步法”的风格来阐述如何将uWSGI与Nginx做连接来部署Django程序。并在最后,会较为完整的阐述本社区的部署方法。
本文大纲:
- 环境介绍
- 配置uWSGI
- 配置Nginx
- Nginx+uWSGI+Django的实现方式
- 一些建议
环境介绍
- Ubuntu 12.04.1 LTS
- django 1.4.2
- nginx/1.2.6
- 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的实现方式
在完成上面配置后,需要按以下步骤来做:
重启Nginx服务器,以使Nginx的配置生效。
nginx -s reload
重启后检查Nginx日志是否有异常。
启动uWSGI服务器
cd /home/work/src/sites/testdjango1/testdjango/mysite uwsgi -x djangochina_socket.xml
检查日志 uwsgi.log 是否有异常发现。
访问服务
基于上面的假设你的域名是www.you.com
因此,我们访问 www.you.com,如果发现程序与 单独使用Django启动的程序一模一样时,就说明成功啦!
关闭服务的方法
将uWSGi进程杀死即可。
一些建议
uWSG配置文件的进程数,可以根据实际情况分配。不要开得太大,否则机器可能会内存耗用太高。一般来说,对于一个小社区来说,4个进程已经足够了。
一般情况下,可以编写一下 stop.sh 脚本 来关闭uWSGI。
使用Nginx+uWSGI+Django方法部署Django程序(下)的更多相关文章
- 五步教你实现使用Nginx+uWSGI+Django方法部署Django程序
Django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比较常见的一种方式. 在这种方式中,我们的通常做法是,将nginx作为服务器最前端,它将接收WEB的所有请求,统一管理请求.ng ...
- 使用Nginx+uWSGI+Django方法部署Django程序(上)
Django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比较常见的一种方式. 在这种方式中,我们的通常做法是,将nginx作为服务器最前端,它将接收WEB的所有请求,统一管理请求.ng ...
- 使用Nginx+uWSGI+Django方法部署Django程序
第一步先解决uwsgi与django的桥接.解决在没有nginx的情况下,如何使用uwsgi+DJANGO来实现一个简单的WEB服务器. 第二步解决uwsgi与Nginx的桥接.通过nginx与uws ...
- Nginx+uWSGI或fastcgi部署Django项目
nginx+uWSGI ubuntu下先安装下C编译器和Python环境: sudo apt-get install build-essential python-dev 使用pip安装uWSGI: ...
- Django项目部署在Linux下以进程方式启动
Django项目部署在Linux下以进程方式启动 这是一篇关于如何在linux下,以后台进程的方式运行服务,命令改改基本上就通用了. 开发完Django项目后,需要把项目部署到linux环境下.当然, ...
- Django+Nginx+uWSGI生产环境部署
生产环境中的数据流 参考文档: wsgi详解:https://blog.csdn.net/li_101357/article/details/52748323 wsgi协议介绍(萌新版):https: ...
- Django项目部署(django+guncorn+virtualenv+nginx)
一.说明 为了django项目部署到生产环境上,能够稳定的运行,且能够同时指出http和https的访问,对django的部署进行了一些研究,决定采用django + gunicorn + virtu ...
- Ubuntu Nginx Uwsgi Python布置服务器Django项目
1 安装python 3.6 ubuntu预装了2.7,不需要卸载预装库,直接安装python3.6(其实现在的阿里云18.04会给你自动装python2.7.15和3.6.8) 你可以分别查看一下 ...
- nginx+uwsgi+virtualenv+supervisor部署项目
一.导论 WSGI是Web服务器网关接口.它是一个规范,描述了Web服务器如何与Web应用程序通信,以及Web应用程序如何链接在一起以处理一个请求,(接收请求,处理请求,响应请求) 基于wsgi运行的 ...
随机推荐
- SSH Secure Shell 无法登录:server responded "algorithm negotiation failed”
SSH Secure Shell Client 连接 ubuntu系统报错 修改ssh的配置文件 /etc/ssh/sshd_config在配置文件中添加: Ciphers aes128-cbc,ae ...
- eclipse断点调试基础
进入debug模式: 1.设置断点 2.启动servers端的debug模式 3.运行程序,在后台遇到断点时,进入debug调试状态 ============================= 作用域 ...
- hdu5081
题意有点绕,不过读懂了之后并不难 以Si结尾容易想到ac自动机,建好ac自动机并将fail指针反向即可得到一棵树 那么操作1就是将若干个子树的并中的节点全部权值+1 操作2就是将求若干个节点到根的路径 ...
- cogs 服务点设置
3. 服务点设置 ☆ 输入文件:djsa.in 输出文件:djsa.out 简单对比时间限制:1 s 内存限制:128 MB 问题描述为了进一步普及九年义务教育,政府要在某乡镇建立一所 ...
- Spring Struts里用到的设计模式
Bean工厂的Factory模式 AOP的Proxy模式
- [Contest20180415]看无可看
题意:有一个数列$f$,对$\forall i\geq2,f_i=2f_{i-1}+3f_{i-2}$,给定$f_0,f_1$,再给定一个集合$S=\{a_{1\cdots n}\}$和$k$,求$\ ...
- 【转载】linux2.6内核initrd机制解析
题记 很久之前就分析过这部分内容,但是那个时候不够深入,姑且知道这么个东西存在,到底怎么用,来龙去脉咋回事就不知道了.前段时间工作上遇到了一个initrd的问题,没办法只能再去研究研究,还好,有点眉目 ...
- Ubuntu 16.04使用rm -rf误删文件恢复方法收集
说明:不一定有效,需要不断尝试 一.lsof 文件刚刚被删除,想要恢复,先尝试lsof. lsof |grep data.file1 cp /proc/xxx/xxx/xx /dir/data.fil ...
- linux+iptables搭建网关服务器
公司购买的一批云服务器只带内网,配置了一个负载均衡器(lb),这批服务器通过lb可以对外提供服务,但是这批服务器不能主动连接外网,例如使用wget下载文件,或者curl访问ttlsa.com站点. 额 ...
- 【记录一下】phpMyAdmin 4.5.0-beta1 发布,要求 PHP 5.5
详情点击: [开源中国]http://www.oschina.net/news/65696/phpmyadmin-4-5-0-beta1 [phpMyAdmin]https://www.phpmyad ...