Django 使用 Nginx + uWSGI 啓動

1、前言

購買了騰訊雲服務器練習 Django 項目時,html

# 最開始用的啓動 Django 項目命令python

python3 manage.py runserver 0.0.0.0:80

後面發現我一旦把 xshell 窗口關閉,Django 項目就宕機了,沒法訪問。nginx

以後學了一個新的啓動命令,使用後臺常駐模式,shell

# 改進後的命令vim

nohup python3 manage.py runserver 0.0.0.0:80 > /dev/null 2> /dev/null &

這時候關了 xshell 窗口,Django 項目也能訪問了。服務器

開心了一小陣子,
隨後,發現性能差得離奇,就兩個併發用戶訪問,都會掛掉的那種,吐血。
查閱資料發現,使用 python3 manage.py runserver 只能用於單人調試,不能用於生產環境,可憐兮兮的我竟然一直覺得這是正確的啓動方式。併發

 

2、Django + uWSGI + Nginx 搭建

(1)uWSGI

概念性的東西,請看大神們的博客,寫得很清晰明瞭socket

傳送門:性能

http://www.javashuo.com/article/p-vaqqesjb-ng.html
https://www.cnblogs.com/new-rain/p/10089941.html測試

下面講一講搭建
首先,很是遺憾的說,Windows 是沒法安裝使用 uWSGI 的,網上不少教程說安裝 MinGW Installer 的,我試了也不行,只能運行在 Linux 上面
進入正題

# 安裝模塊

pip3 install uwsgi

而後在項目根目錄(跟 manage.py 同一層級的)新建文件 uwsgi.ini

寫入內容,備註代表了3個地方是須要根據你本身的狀況來修改的

[uwsgi] # (1)第一處修改的地方 # 這個地方有個坑,就是假如你是買的雲主機,那麼你的內網ip不是127.0.0.1,而是要去雲服務器控制檯看的 # socket = 你的服務器內網的ip地址:8889
http = 你的服務器內網的ip地址:8889
# (2)第二處修改的地方 # 項目根目錄
chdir = 項目根目錄的絕對路徑 # (3)第三處修改的地方
wsgi-file = 項目名稱/wsgi.py master = True processes = 4 threads = 2 pidfile = uwsgi.pid daemonize = uwsgi.log

接下來,測試一下,再也不使用 python3 manage.py runserver 啓動,而是改爲

uwsgi --ini uwsgi.ini

用 ps aux | grep uwsgi 有沒有啓動進程,或者訪問 你的服務器內網的ip地址:8889 能不能訪問到 Django的頁面
測試完了,停掉 uwsgi,使用命令

uwsgi --stop uwsgi.pid

(2)Nginx

安裝 Nginx 的,網上一堆教程,這裏就不寫了
第一步,爲了讓 Nginx 接管,須要修改上面 uwsgi.ini 文件,就是把 http 換成 socket

socket = 你的服務器內網的ip地址:8889
# http = 你的服務器內網的ip地址:8889

第二步,須要改 Nginx 的配置文件,個人配置文件在 /usr/local/nginx/conf,這個路徑根據我的狀況而定,

vim nginx.conf

在 http{} 裏面的 server{} 裏面添加內容

location / {   include uwsgi_params;   uwsgi_pass 你的服務器內網的ip地址:8889; }

保存,重啓 Nginx,啓動 uwsgi,訪問 80 端口,若是看到你的項目,說明就正確了

(3)靜態資源的問題
這時候,你會發現網站的圖片啊、樣式啊,都是沒法顯示的,是由於靜態文件的緣由
第一個要改的,項目的 settings.py
加一句

STATIC_ROOT = os.path.join(BASE_DIR, 'static_all')

而後執行命令

python3 manage.py collectstatic

第二個要改的,Nginx 的配置文件

vim nginx.conf

在 http{} 裏面的 server{} 裏面添加內容

location /static {   alias 項目根目錄的絕對路徑/static_all/; }

以後,重啓 Nginx 和 uwsgi ,就完成了

相關文章
相關標籤/搜索