virtualenv+nginx+uwsgi+django配置

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/songqiu65/article/details/77807553

现有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进行测试。

猜你喜欢

转载自blog.csdn.net/songqiu65/article/details/77807553