第一步先解决uwsgi与django的桥接。解决在没有nginx的状况下,如何使用uwsgi+DJANGO来实现一个简单的WEB服务器。css
第二步解决uwsgi与Nginx的桥接。经过nginx与uwsgi的桥接,打通nginx与django的连通,从而比较完美的实现django的部署。html
本文将分红五步来详细阐述uwsgi+django的部署方式。nginx+uwsgi+django的部署将在下一篇 文章中阐述。node
本文大纲:python
安装libxml*nginx
yum install libxml*
若是在安装libxml前就安装了uwsgi则 在安装libxml后须要 从新编译安装shell
#或者使用python编译 python uwsgiconfig.py --build #复制生成的可执行文件uwsgi到/usr/sbin/目录下 cp uwsgi /usr/sbin/
不然直接安装django
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
在你的机器上写一个test.py服务器
# test.py def application(env, start_response): start_response('200 OK', [('Content-Type','text/html')]) return "Hello World"
而后执行shell命令:app
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项目的地址是 /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