使用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
访问网页:
看在网页上是否有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程序的更多相关文章
- 五步教你实现使用Nginx+uWSGI+Django方法部署Django程序
Django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比较常见的一种方式. 在这种方式中,我们的通常做法是,将nginx作为服务器最前端,它将接收WEB的所有请求,统一管理请求.ng ...
- 使用Nginx+uWSGI+Django方法部署Django程序(下)
在上一篇文章<五步教你实现使用Nginx+uWSGI+Django方法部署Django程序(上)>中,阐述了如何只使用uWSGI来部署Django程序. 当然,单单只有uWSGI是不够的, ...
- 使用Nginx+uWSGI+Django方法部署Django程序(上)
Django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比较常见的一种方式. 在这种方式中,我们的通常做法是,将nginx作为服务器最前端,它将接收WEB的所有请求,统一管理请求.ng ...
- Nginx+uWSGI或fastcgi部署Django项目
nginx+uWSGI ubuntu下先安装下C编译器和Python环境: sudo apt-get install build-essential python-dev 使用pip安装uWSGI: ...
- 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运行的 ...
- nginx+uwsgi+flask搭建python-web应用程序
Flask本身就可以直接启动HTTP服务器,但是受限于管理.部署.性能等问题,在生产环境中,我们一般不会使用Flask自身所带的HTTP服务器. 从现在已有的实践来看,对于Flask,比较好的部署方式 ...
随机推荐
- Atom 绝赞插件
文件图标: file-icons 根据不同文件后缀名显示不同类型图标 标签栏根据不同文件格式显示色彩: filetype-color 在标签栏不同格式文件显示不同的颜色的标题,支持二度设置. 小地图: ...
- pt1000测温度
本设计使用的PT1000热电阻铂热电阻,它的阻值会随着温度的变化而改变.PT后的1000即表示它在0℃时阻值为1000欧姆,在300℃时它的阻值约为2120.515欧姆.它的工业原理:当PT1000在 ...
- zabbix日常监控项web(八)
存在一种情况:nginx或者httpd服务本身运行正常,但是网页挂了,类似于网页被黑,或者40X之类的...:可以用zabbix把web页面访问也监控起来,第一时间得知web崩溃信息并做相应处理. 被 ...
- jenkins 安卓打包生成二维码下载
先来张图看看吧 构思 jenkins gradle 打包apk文件,python myqr 模块生成二维码 放入nginx 访问图片的路径,apk安装包放在 nginx 下载目录. 环境 centos ...
- Spring Boot REST
资源(Resources) 所谓资源,就是网络上一个实体,或者是网络上一个具体信息.他可以是一段文本,一张图片,一种服务,总之是一个具体的实体.可以用一个URI(统一资源定位符)指向它,每种资源对应一 ...
- codeforces 741D Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths(启发式合并)
codeforces 741D Arpa's letter-marked tree and Mehrdad's Dokhtar-kosh paths 题意 给出一棵树,每条边上有一个字符,字符集大小只 ...
- python第二十四课——set中的函数
集合中常用的一些函数: 1.add(obj):追加一个obj元素到集合中 pop():从集合中随机弹出一个元素 remove(obj):删除集合中和obj匹配的元素 clear():清空集合 s1={ ...
- AOP的本质
AOP的本质是HOOK: HOOK的本质是:新函数包含原函数或新函数替换原函数: 需要解决的问题: 1.新函数的生成: 2.新函数的调用机制: 3.原函数的调用机制: 新函数的生成: 1.将已有的动态 ...
- Spring-IOC bean 生命周期之 Lifecycle 钩子
Lifecycle callbacks Initialization callbacks.Destruction callbacks 要与容器的bean生命周期管理交互,即容器在启动后和容器在销毁前对 ...
- BZOJ3052:[WC2013]糖果公园(树上莫队)
Description Input Output Sample Input 4 3 51 9 27 6 5 12 33 13 41 2 3 21 1 21 4 20 2 11 1 21 4 2 Sam ...