1. 程式人生 > >nginx+uwsgi+djangos部署專案完整

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 專案部署就完成啦。