1、背景
通过Python manager.py runserver 启动项目,只支持单线程,无法高并发,所以采用Django + uWSGI + Nginx 部署方式,下面以同时部署多个django项目为例。
2、安装nginx和uwsgi
2.1 安装uwsgi
#进入虚拟环境(如何安装python开发虚拟环境,可参考其他文章)
cd /data/env/pyweb
pipenv shell #启动虚拟环境
pip install uwsgi #安装uwsgi
2.2 安装nginx
wget http://nginx.org/download/nginx-1.5.6.tar.gz #下载nginx安装包,默认下载在/data/env/pyweb路径下,因为是在该路径执行的wget命令
tar -xvf nginx-1.5.6.tar.gz #解压
cd nginx-1.5.6 #进入到解压后的文件夹
./configure --prefix=/usr/local/nginx #配置到路径/usr/local/nginx
Make && make install #编译并安装
3、项目配置
3.1 配置nginx
#进入文件:/usr/local/nginx/conf/nginx.conf,关键配置如下
user root;
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
#项目一配置
server {
listen 80; #需要监控端口,浏览器访问该端口
server_name localhost;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8080; #与uwsgi中ip:端口相同
uwsgi_send_timeout 6000; #指定向uWSGI传送请求的超时时间,完成握手后向uWSGI传送请求的超时时间。
uwsgi_connect_timeout 6000; #指定连接到后端uWSGI的超时时间
uwsgi_read_timeout 6000; #指定接收uWSGI应答的超时时间,完成握手后接收uWSGI应答的超时时间。
}
location /static{
alias /data/wwwroot/ApiProj/static/; #静态文件路径,
}
}
#项目二配置
server {
listen 8000; #浏览器访问该端口
server_name localhost;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8001; #与uwsgi中ip:端口相同
uwsgi_send_timeout 6000; #指定向uWSGI传送请求的超时时间,完成握手后向uWSGI传送请求的超时时间。
uwsgi_connect_timeout 6000; #指定连接到后端uWSGI的超时时间
uwsgi_read_timeout 6000; #指定接收uWSGI应答的超时时间,完成握手后接收uWSGI应答的超时时间。
}
location /static{
alias /data/wwwroot/BiProj/static/; #静态文件路径
}
}
}
3.2 Django-setting.py文件配置
url.py中的配置
通常,然后执行: python manage.py collectstatic, 此命令是搜集静态文件的命令,搜集后的静态文件存放在/data/wwwroot/BiProj/stafile/中 ,
也可以这里配置的路径指向项目原始静态文件路径,所以不用执行该命令
STATICFILES_DIRS 告诉django首先到STATICFILES_DIRS寻找静态文件,然后通过collectstatis命令收集到 stafile文件中,即STATIC_ROOT配置的路径。STATIC_ROOT在开发的时候用不到,再部署的时候才会用到。
STATIC_URL让浏览器可以直接访问静态文件
通过uWSGI + Nginx部署项目,不执行3.2的话,项目页面无样式。因为文件中都配置了静态文件路径。
3.3 在项目根目录下创建uwsgi.ini文件
uwsgi.ini文件内容:
项目一文件内容:
[uwsgi]
socket = 127.0.0.1:8080 #与nginx.conf中配置的对应
chdir = /data/wwwroot/ApiProj
wsgi-file = /data/wwwroot/ApiProj/ApiProj/wsgi.py
processes = 4 #进程数量
threads = 3 #线程数量
master = true
pidfile = /usr/local/uwsgi/auwsgi.pid #里面存储uwsgi的pid
daemonise = /usr/local/uwsgi/uwsgi8080.log #日志路径
项目二文件内容:
[uwsgi]
socket = 127.0.0.1:8001 #与nginx.conf中配置的对应
chdir = /data/wwwroot/BiProj
wsgi-file = /data/wwwroot/BiProj/BiProj/wsgi.py
processes = 4
threads = 3
master = true
pidfile =/usr/local/uwsgi/buwsgi.pid
daemonise = /usr/local/uwsgi/uwsgi8080.log
4、启动
4.1 启动nginx
/usr/local/nginx/sbin/nginx # 启动
/usr/local/nginx/sbin/nginx -s stop # 停止
/usr/local/nginx/sbin/nginx -s reload # 重启,修改文件后
4.2 启动 uwsgi.ini
#进入到项目根目录执行,其中,nohup 省略命令的输出,将输出保存到nohup.out中, & 表示后台运行命令,关闭窗口后不会停止命令,且加上&后可弹出新的命令行,不然不会弹出
nohup uwsgi --ini uwsgi.ini &
至此,项目已经启动,可进行访问。
4.3 更新后重载
uwsgi --reload /usr/local/uwsgi/buwsgi.pid #重启
4.4 关闭
uwsgi --stop /usr/local/uwsgi/buwsgi.pid #关闭,这样就不用一个一个kill了
~~~~~欢迎大家交流指正~~~~~