nginx+uwsgi+djangos部署项目完整

一、基本信息

Linux 版本:SentOS7.4html

Python 版本:3.7.1python

二、下载 uWSGI

pip3 install uwsgi

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

先写一个测试文件,测试 uwsgi 是否能够正常使用。nginx

# 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 启动测试文件django

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

而后访问 127.0.0.1:8000 端口,便可收到 hello word 。证实 uwsgi 启动成功。服务器

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

四、启动 Django

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

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

访问 127.0.0.1:8000socket

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

五、配置 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;

六、启动项目

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

python manage.py collectstatic

STATIC_ROOT 必定要设置好。

启动 nginx:

nginx -c 配置文件地址

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

启动 uWSGI:

uwsgi --ini wsgi.ini

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

相关文章
相关标签/搜索