Nginx+ uWSGI+django
请求顺序 the web client <-> the web server <-> the socket <-> uWSGI <-> Python
环境:
- Linux: centos-release-7-3.1611.el7.centos.x86_64
- Python 2.7.5
- 注:全部以root执行
步骤:
- nginx 安装
1>安装编译工具及库文件
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
安装 PCRE ( Nginx 支持 Rewrite 功能)
2>下载 PCRE 安装包,下载地址 http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz
[root@bogon src]# wget http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz
注:wget方式可能下载文件缺失、导致解压失败。可能需离线下载、移动到指定文件夹。
3>解压安装包:
[root@bogon opt]# tar zxvf pcre-8.35.tar.gz
进入安装包目录
[root@bogon opt]# cd pcre-8.35
4>编译安装
[root@bogon pcre-8.35]# ./configure
[root@bogon pcre-8.35]# make && make install
5>查看pcre版本
[root@bogon pcre-8.35]# pcre-config --version
6>下载 Nginx,下载地址:http://nginx.org/download/nginx-1.6.2.tar.gz
[root@bogon opt]# wget http://nginx.org/download/nginx-1.6.2.tar.gz
7>解压安装包
[root@bogon opt]# tar zxvf nginx-1.6.2.tar.gz
9>进入安装包目录
[root@bogon opt]# cd nginx-1.6.2
10>编译安装
[root@bogon nginx-1.6.2]# ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/opt/pcre-8.35
注:–with-pcre 指向pcre解压文件 --with-pcre 随便指定路径
[root@bogon nginx-1.6.2]# make
[root@bogon nginx-1.6.2]# make install
11>查看nginx版本
[root@bogon nginx-1.6.2]# /usr/local/nginx/sbin/nginx -v
12>Nginx 配置
12.1>创建 Nginx 运行使用的用户 www:
12.2>配置nginx.conf ,将/usr/local/nginx/conf/nginx.conf修改首行为:
user root root;
12.3>检查配置文件ngnix.conf的正确性命令:
/usr/local/nginx/sbin/nginx -t
12.4>启动 Nginx
/usr/local//nginx/sbin/nginx
12.5>访问测试nginx
13>安装uwsgi
注:yum install 安装成功,启动失败,建议pip 安装
Pip安装可能失败 -先安装python-devel:先安装python-devel
13.1>安装uwsgi
Pip install uwsgi
13.2>测试 uwsgi 是否正常
新建 test.py 文件,内容如下:
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return "Hello World"
然后在终端运行:
uwsgi --http :8001 --wsgi-file test.py
在浏览器内输入:http://127.0.0.1:8001,查看是否有"Hello World"输出,若没有输出,请检查你的安装过程。
注:报错 --http xx ambiguous等,因为python与uwsgi问题,安装python-devel即可
14>安装 Django
pip install django
注:可能报错,报错原因django版本问题,可指定安装版本。测试版本django 1.11.5
14.1>测试 django 是否正常,运行:
django-admin.py startproject demosite
cd demosite
python2.7 manage.py runserver 0.0.0.0:8002
在浏览器内输入:http://127.0.0.1:8002,检查django是否运行正常
15.Nginx+uwsgi+Django
Django创建ncss项目时,在子目录ncssplatform下已经帮我们生成的 wsgi.py文件。所以,我们只需要再创建ncssplatform_uwsgi.ini配置文件即可
# ncssplatform_uwsgi.ini file
[uwsgi]
# Django-related settings
socket = :8000
# the base directory (full path)
chdir = /opt/ncss
# Django s wsgi file
module = ncssplatform.wsgi
# process-related settings
# master
master = true
# maximum number of worker processes
processes = 4
# ... with appropriate permissions - may be needed
# chmod-socket = 664
# clear environment on exit
vacuum = true
注:
socket 指定项目执行的端口号。
chdir 指定项目的目录。
module myweb.wsgi ,可以这么来理解,对于myweb_uwsgi.ini文件来说,与它的平级的有一个myweb目录,这个目录下有一个wsgi.py文件。
16. 修改nginx.conf配置文件。打开/etc/nginx/nginx.conf文件,添加如下内容
server {
listen 8080;
server_name localhost;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8000; //必须和uwsgi中的设置一致
index index.html index.htm;
client_max_body_size 35m;
}
}
17.最终启动
uwsgi --ini ncssplatform_uwsgi.ini & /usr/local/nginx/sbin/nginx
18.测试
访问http://127.0.0.1:8080,显示django work -ok
多个project部署在nginx,uwsgi
1.新建目录uwsgi_conf,目录下创建文件
op_platform.ini、tenant_platfrom.ini
内容添加为:
[uwsgi]
#plugins = python
#virtualenv = /Django/cmdb/env/
chdir =/opt/nsfocus/ncss_platform/op_platform
#touch-reload = /Django/cmdb/env/CMDB/
module = op_platform.wsgi
socket = 127.0.0.1:9000
vhost = false
chmod-socket = 664
master = true
enable-threads = true
workers = 4
threads = 2
vacuum = true
max-requests = 6000
#pidfile = /var/log/uwsgi/cmdb.pid
#daemonize = /var/log/uwsgi/cmdb.log
#touch-logreopen = /var/log/module/.touchforlogrotat
~
tenant_platfrom类似,端口修改即可
2.修改nginx配置文件nginx.conf
增加内容为
server {
listen 8888;
server_name localhost;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8000;
#index index.html index.htm;
client_max_body_size 35m;
}
}
server {
listen 9999;
server_name localhost;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:9000;
}
}
- 启动、测试
uwsgi --emperor uwsgi_conf/ ,然启动nginx -s reload