virtualenv+nginx+uwsgi+django配置

来源:互联网 发布:安卓ar软件 编辑:程序博客网 时间:2024/06/03 22:46

现有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 = trueenable-threads = trueworkers = 2wsgi-file = /root/venv/mysite/mysite/wsgi.py virtualenv =/root/venvchdir =/root/venv/mysiteprocesses = 2listen = 80socket = 127.0.0.1:8000pidfile = /root/venv/mysite/tmp/mysite.pidvacuum = true#daemonize = /root/venv/mysite/tmp/mysite.log #开启就是后台运行reload-mercy = 8max-requests = 5000 thunder-lock = truebuffer-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 =truemaster = trueenable-threads = trueworkers = 2processes = 2listen = 80socket = 127.0.0.1:8000pidfile = /root/venv/mysite/tmp/mysite.pidvacuum = true#daemonize = /root/venv/mysite/tmp/mysite.logreload-mercy = 8max-requests = 5000 thunder-lock = truebuffer-size = 32768

c。启动uwsgi和nginx,访问127.0.0.1:8080/admin和127.0.0.1:8081/admin应该都是管理界面。当项目中没有app时可能报错,所以采用复制mysite app进行测试。

原创粉丝点击