美文网首页
基于uWSGI和nginx部署Django

基于uWSGI和nginx部署Django

作者: Harvest | 来源:发表于2017-08-28 14:15 被阅读92次

基于uWSGI和nginx部署Django

原理

Web Client <===> Web Server(nginx) <===> The tcp <===> uWSGI <===> Django

也就是说我们通常这么做:将nginx作为服务器最前端,它接收WEB 即客户端的所有请求,统一管理请求。nginx把所有静态请求自己来处理 (这是NGINX的强项)。然后,NGINX将所有非静态请求通过uwsgi传递给Django,由Django来进行处理 ,从而完成一次WEB请求

安装uwsgi

pip install 
# Or 安装最新版
$pip install https://projects.unbit.it/downloads/uwsgi-lts.tar.gz

安装之后简单的测试:创建一个test.py文件:

# test.py
def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World"] # python3
    #return ["Hello World"] # python2

启动uWSGI服务器:

uwsgi --http :8000 --wsgi-file test.py

启动django项目


附张项目结构图

uwsgi --http :8000 --chdir /usr/projects/WillingDo/ -w WillingDo.wsgi

WillingDo.wsgi指项目下的wsgi.py文件,django创建项目时会自己生成

uwsgi一些常用选项

uwsgi --chdir=/path/to/your/project \
    --module=mysite.wsgi:application \
    --env DJANGO_SETTINGS_MODULE=mysite.settings \
    --master --pidfile=/tmp/project-master.pid \
    --socket=127.0.0.1:49152 \      # can also be a file
    --processes=5 \                 # number of worker processes
    --uid=1000 --gid=2000 \         # if root, uwsgi can drop privileges
    --harakiri=20 \                 # respawn processes taking more than 20 seconds
    --max-requests=5000 \           # respawn processes after serving 5000 requests
    --vacuum \                      # clear environment on exit
    --home=/path/to/virtual/env \   # optional path to a virtualenv
    --daemonize=/var/log/uwsgi/yourproject.log      # background the process  

安装nginx

sudo apt-get install nginx

增加些关于nginx的配置

uwsgi_params文件拷贝到项目文件夹下。uwsgi_params文件在/etc/nginx/目录下,也可以从这个页面下载

在项目文件夹下创建nginx的配置文件mysite_nginx.conf

upstream django{
    server 127.0.0.1:8001;
}//
server {
    listen         8000;//外界访问端口
    server_name    116.196.87.3;//主机ip,有域名可以填域名
    charset UTF-8;
    access_log      /var/log/nginx/myweb_access.log;
    error_log       /var/log/nginx/myweb_error.log;

    client_max_body_size 75M;

    location / { 
        include /usr/projects/WillingDo/uwsgi_params;
        uwsgi_pass django;//照应第一行的 django 指的本机IP端口,与myweb_uwsgi.ini中的端口要一致
        uwsgi_read_timeout 2;
    }   
    location /static {
        expires 30d;
        autoindex on; 
        add_header Cache-Control private;
        alias /usr/projects/WillingDo/static/;
     }
 }

之前一直没搞懂这些配置是干嘛的,后面好几个blog的都试了遍,终于成功,发现

include /usr/projects/WillingDo/uwsgi_params;
uwsgi_pass django;//照应第一行的 django 指的本机IP端口,与myweb_uwsgi.ini中的端口要一致

主要这两行,把nginx与uwsgi关联了起来;保存重启nginx

service nginx restart

用.ini文件配置uwsgi

每次都运行上面命令拉起Django应用实在麻烦,使用.ini文件能简化工作,方法如下:

在应用目录下创建文件mysite_uwsgi.ini,填入并修改下面内容:

[uwsgi]

# Django-related settings

socket = :8001 //对应nginx的配置文件

# the base directory (full path)
chdir           = /usr/projects/WillingDo

# Django s wsgi file
# 对于mysite_uwsgi.ini文件来说,与它的平级的有一个myweb目录,这个目录下有一个wsgi.py文件。
module          = WillingDo.wsgi

# process-related settings
# master
master          = true

# maximum number of worker processes
processes       = 4

# ... with appropriate permissions - may be needed
# chmod-socket    = 664
# clear environment on exit
vacuum          = true
# 这个配置,其实就相当于在上一小节中通过wsgi命令,后面跟一堆参数的方式,给文件化了。

切换到项目目录下,读取mysite_uwsgi.ini文件启动项目

uwsgi --ini mysite_uwsgi.ini

访问http://外网ip:你设置的端口应该能行了,如下是我测试的

2017-08-28_140224.png

感谢几个大佬 ,参考

基于nginx和uWSGI在Ubuntu上部署Django

通过Nginx部署Django(基于ubuntu)

ubuntu下的django 安装mysql

相关文章

网友评论

      本文标题:基于uWSGI和nginx部署Django

      本文链接:https://www.haomeiwen.com/subject/mbfgdxtx.html