nginx+uwsgi+djangos部署專案完整
阿新 • • 發佈:2018-12-16
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 專案了。
關於其中的 http 和 socket 欄位,當只用 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 專案部署就完成啦。