nginx+uwsgi+djangos部署项目完整

Posted dongyangblog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx+uwsgi+djangos部署项目完整相关的知识,希望对你有一定的参考价值。

1、基本信息

Linux 版本:SentOS7.4

Python 版本:3.7.1

2、下载 uWSGI

pip3 install uwsgi

uwsgi 主要的任务是座位分发路由的服务器。

先写一个测试文件,测试 uwsgi 是否可以正常使用。

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

3、测试

然后用 uwsgi 启动测试文件

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

然后访问 127.0.0.1:8000 端口,即可收到 hello word 。证明 uwsgi 启动成功。

重点来了:用 uwsgi 使用配置文件启动 Django 项目。

4、启动 Django

先不要急,先用 Django 项目自带的 wsgi.py 文件启动一下 django 试试。

uwsgi --http :8000 --wsgi-file djangp/wsgi.py

访问 127.0.0.1:8000

OK,启动成功。

接下来的任务就是写配置文件了,可以设置更加详细的参数。

文件 wsgi.ini:

[uwsgi]

# django 相关配置
# 必须全部为绝对路径

# 项目执行的端口号
# http = :8000 # 用 uwsgi 启动项目用 http
socket = :8001 # 用 nginx 启动用 socket


# 项目路径

chdir = 项目路径

# Django 的 wsgi 文件的相对路径
# wsgi-file = 项目路径/wsgi.py
module = mysite.wsgi 

# python 虚拟环境的 路径
home = /root/pythonEnvs/virtualenvName

# 进程相关设置
# 主进程
master = True
# 最大数量工作进程
processes = 4
# socket文件地址,绝对路径(不用手动创建,额nginx链接后自动创建)
#socket = 
# 设置socket权限
#chmod-socket=666

# 守护进程的方式运行,log日志存在log文件里
deamonize = 项目路径/uwsgi.log
# 退出时清理环境
vacuum=True

现在用这个文件通过

uwsgi --ini wsgi.ini

就可以启动 django 项目了。

关于其中的 httpsocket 字段,当只用 uwsgi 启动 django 项目的时候,用 http 字段,因为是通过 http 请求服务器的。

如果还要使用 nginx 就使用 socket 字段。

好啦,现在 uwsgi 也配置好了。

接下来配置 nginx

5、配置 nginx

首先下载 nginx

yum install nginx

下载成功后执行 nginx 命令直接启动。

然后访问本地地址可以看到 nginx 的欢迎页面。

OK,接下来接入 nginx 就可以了,先来写 nginx 的配置文件。

events {
 worker_connections 1024;
}

http {

    upstream django {
        server 127.0.0.1:8001;
  }

    server {
        # the port your site will be served on
        listen     8000 ; # 端口号
        # the domain name it will serve for
        server_name 0.0.0.0; # 服务器 ip 或是域名
        charset     utf-8;
    
        # Django media
        location /media  {
            alias 项目路径/media; # 媒体文件所在文件夹
        }

        location /static {
            alias  项目路径/static; # 静态文件所在文件夹
        }
         # max upload size
        client_max_body_size 75M;   # adjust to taste

        # Finally, send all non-media requests to the Django server.
        location / {
            uwsgi_pass  django;
            include   /uwsgi_params; #uwsgi_params 路径
        }
    }
}

其中用到一个 uwsgi_params 文件,这个文件是用来链接 nginx 和 uwsgi 的。

自己建一个文件就可以,内容如下:

uwsgi_param  QUERY_STRING       $query_string;
uwsgi_param  REQUEST_METHOD     $request_method;
uwsgi_param  CONTENT_TYPE       $content_type;
uwsgi_param  CONTENT_LENGTH     $content_length;

uwsgi_param  REQUEST_URI        $request_uri;
uwsgi_param  PATH_INFO          $document_uri;
uwsgi_param  DOCUMENT_ROOT      $document_root;
uwsgi_param  SERVER_PROTOCOL    $server_protocol;
uwsgi_param  REQUEST_SCHEME     $scheme;
uwsgi_param  HTTPS              $https if_not_empty;

uwsgi_param  REMOTE_ADDR        $remote_addr;
uwsgi_param  REMOTE_PORT        $remote_port;
uwsgi_param  SERVER_PORT        $server_port;
uwsgi_param  SERVER_NAME        $server_name;

6、启动项目

先来部署一下静态文件,如果你的 app 下有多个静态文件的话(我没用到)。

python manage.py collectstatic

STATIC_ROOT 一定要设置好。

启动 nginx:

nginx -c 配置文件地址

配置文件地址一定要写绝对路径。

启动 uWSGI:

uwsgi --ini wsgi.ini

OK,到这里 nginx+uWSGI+Django 项目部署就完成啦。

以上是关于nginx+uwsgi+djangos部署项目完整的主要内容,如果未能解决你的问题,请参考以下文章

django 本地项目部署uwsgi+nginx

Django部署——uwsgi+Nginx(超详细)

使用Nginx+uWSGI部署Django项目

Nginx+uWSGI+Django部署web服务器

在centos上使用nginx+uwsgi部署django项目

nginx + uwsgi 部署 Django+Vue项目