现有django app “mysite”,需要用nginx和uwsgi。
下图是在virtualenv创建的虚拟环境下:
A。单应用
1.安装nginx,版本是1.13.4:
安装gcc g++的依赖库
#apt-get install build-essential
#apt-get install libtool
安装 pcre依赖库(http://www.pcre.org/)
#sudo apt-get install libpcre3 libpcre3-dev
安装 zlib依赖库(http://www.zlib.net)
#apt-get install zlib1g-dev
安装 ssl依赖库
#apt-get install openssl
安装Nginx(http://nginx.org)
下载最新版本:
#cd /usr/local/src
#wget http://nginx.org/download/nginx-1.13.4.tar.gz
解压:
#tar -zxvf nginx-1.13.4.tar.gz
进入解压目录:
#cd nginx-1.13.4
配置:
#./configure --prefix=/usr/local/nginx
编辑nginx:
#make
安装nginx:
#sudo make install
启动nginx:
#sudo /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
注意:-c 指定配置文件的路径,不加的话,nginx会自动加载默认路径的配置文件,可以通过 -h查看帮助命令。
查看nginx进程:
#ps -ef|grep nginx
停止 Nginx
#cd /usr/local/nginx/sbin/
#./nginx -s stop
2.安装uwsgi,版本2.0.15:
注意:需要先安装pcre,在上面的nginx中安装了,不然会有提示rebuild with pcre。
安装:
#pip install uwsgi -I –no-cache-dir
用ini运行:
在虚拟环境目录(看上面的图片)下新建文件uwsgi.ini,添如下面代码:
[uwsgi]
vhost = false
master = true
enable-threads = true
workers = 2
wsgi-file = /root/venv/mysite/mysite/wsgi.py
virtualenv =/root/venv
chdir =/root/venv/mysite
processes = 2
listen = 80
socket = 127.0.0.1:8000
pidfile = /root/venv/mysite/tmp/mysite.pid
vacuum = true
#daemonize = /root/venv/mysite/tmp/mysite.log #开启就是后台运行
reload-mercy = 8
max-requests = 5000
thunder-lock = true
buffer-size = 32768
注:关于socket和http的一点说明:
用http就可以直接 浏览器->uwsgi->django
用socket 浏览器->nginx->uwsgi->django
3.启动项目:
a.venv目录下启动uwsgi:
#uwsgi –ini ./uwsgi.ini
b.将STATIC_ROOT = os.path.join(BASE_DIR, "static/")
加入mysite/mysite/settings.py,然后执行python manage.py collectstatic
c.在/usr/local/nginx/conf/nginx.conf添加下面代码(添加在http{}中):
server {
listen 8080;
server_name localhost;
charset utf-8;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8000;
client_max_body_size 35m;
}
}
d.浏览器打开127.0.0.1:8080就可以访问项目了。
注意:conf中uwsgi_pass和ini中的socket相同
B。多应用
由于只有一个mysite app,所以多app用mysite复制一份到HelloWorld文件夹中。文件见下图:
多应用是用一个uwsgi和nginx,其中nginx中的server是对应一个app。
a。将上面3.c中的server改为下面代码(通常是同一端口,不同的server_name):
server {
listen 8081;
server_name localhost;
charset utf-8;
client_max_body_size 35m;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8000;
uwsgi_param UWSGI_CHDIR /root/venv/mysite; #你的项目的路径,最好用完整路径
uwsgi_param UWSGI_SCRIPT mysite.wsgi; #指向wsgi.py,相对于项目的根目录
}
}
server {
listen 8080;
server_name localhost;
charset utf-8;
client_max_body_size 35m;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8000;
uwsgi_param UWSGI_CHDIR /root/venv/HelloWorld; #你的项目的路径,最好用完整路径
uwsgi_param UWSGI_SCRIPT mysite.wsgi; #指向wsgi.py,相对于项目的根目录
}
}
}
b。将uwsgi.ini改为下面代码(这里不需要具体指定app,nginx已经指定了):
[uwsgi]
vhost =true
master = true
enable-threads = true
workers = 2
processes = 2
listen = 80
socket = 127.0.0.1:8000
pidfile = /root/venv/mysite/tmp/mysite.pid
vacuum = true
#daemonize = /root/venv/mysite/tmp/mysite.log
reload-mercy = 8
max-requests = 5000
thunder-lock = true
buffer-size = 32768
c。启动uwsgi和nginx,访问127.0.0.1:8080/admin和127.0.0.1:8081/admin应该都是管理界面。当项目中没有app时可能报错,所以采用复制mysite app进行测试。