分类: Python
通过Nginx、Uwsgi快速部署Django

uwsgi:是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。
运行过程:
nginx作为服务器的最前端,它将接受WEB的所有请求,统一管理请求。nginx把所有静态请求自己来处理(这是nginx的强项,静态文件像我们django博客项目中的static文件夹下面的图片,css,js)。

nginx将所有的非静态请求(像显示文章的详细信息,通常这类信息都保存在数据库,因此需要调用数据库获取数据)通过uwsgi传递给Django,由django来处理,从而完成一次WEB请求,uwsgi的作用就类似一个桥接器,起到桥梁的作用。
部署步骤:
安装zlib、pcre及nginx

wget https://www.zlib.net/fossils/zlib-1.2.10.tar.gz
tar -xzvf zlib-1.2.10.tar.gz
cd zlib-1.2.10
./configure --prefix=/usr/local/zlib
make
make install

wget https://ftp.pcre.org/pub/pcre/pcre-8.40.tar.gz
tar -xzvf pcre-8.40.tar.gz
cd pcre-8.40
./configure --prefix=/usr/local/pcre --libdir=/usr/local/lib/pcre --includedir=/usr/local/include/pcre
make
make install

wget http://nginx.org/download/nginx-1.12.2.tar.gz
tar xvf nginx-1.12.2.tar.gz
cd nginx-1.12.2
./configure --prefix=/usr/local/nginx --with-zlib=/opt/zlib-1.2.10 --with-pcre=/opt/pcre-8.40 --with-http_stub_status_module --with-http_realip_module --with-http_gzip_static_module --with-http_ssl_module
make
make install

安装Pip、Django、Uwsgi、virtualenv根据实际需求安装

yum install epel-release python-devel
yum install python-pip
pip install -U pip
pip install uwsgi --upgrade
pip install virtualenv
pip install Django==1.11.8
pip install PyMySQL
pip install mysqlclient

测试Uwsgi是否正常创建test.py文件

def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World"]
 uwsgi --http :8888 --wsgi-file test.py

django
浏览器或curl访问888端口成功即可;
配置Uwsgi创建mysite_uwsgi.ini文件(此处是根据项目名字创建的,路径为项目路径根目录)

[uwsgi]
socket = :8000
chdir           = /env_mysite/mysite
module          = mysite.wsgi
master          = true
processes       = 8
vacuum          = true
daemonize       = /tmp/uwsgi.log

启动uwsgi(后台运行uwsgi并把log输出到/tmp/uwsgi.log)

setsid uwsgi mysite_uwsgi.ini &
配置nginx(关键参数)

        location / { 
            include uwsgi_params;
            uwsgi_pass 127.0.0.1:8000;    #uwsgi的端口号
            uwsgi_read_timeout 2;
            error_log  logs/mysite_error.log error;
            access_log  logs/mysite_access.log main;
        } 

        location /static {
            expires 30d;
            add_header Cache-Control private;
            alias /env_mysite/mysite/static/;   #Django的静态目录
            error_log  logs/static_error.log error;
            access_log  logs/static_access.log main;
        }

最后启动nginx即可,nginx参数根据实际业务需求要进行优化,如设置上传文件大小、缓存、启用压缩等等,此处不做详细描述;
附uwsgi常用选项:

http : 协议类型和端口号

processes : 开启的进程数量

workers : 开启的进程数量,等同于processes(官网的说法是spawn the specified number ofworkers / processes)

chdir : 指定运行目录(chdir to specified directory before apps loading)

wsgi-file : 载入wsgi-file(load .wsgi file)

stats : 在指定的地址上,开启状态服务(enable the stats server on the specified address)

threads : 运行线程。

master : 允许主进程存在(enable master process)

daemonize : 使进程在后台运行,并将日志打到指定的日志文件或者udp服务器(daemonize uWSGI)。实际上最常用的,是把运行记录输出到一个本地文件上。

pidfile : 指定pid文件的位置,记录主进程的pid号。

vacuum : 当服务器退出的时候自动清理环境,删除unix socket文件和pid文件(try to remove all of the generated file/sockets)


相关博文:

发表新评论