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中的配置

Django Nginx 部署_nginx

通常,然后执行:  python manage.py collectstatic 此命令是搜集静态文件的命令,搜集后的静态文件存放在/data/wwwroot/BiProj/stafile/中

Django Nginx 部署_Django Nginx 部署_02

也可以这里配置的路径指向项目原始静态文件路径,所以不用执行该命令


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了

~~~~~欢迎大家交流指正~~~~~