1. 程式人生 > 其它 >【Django學習】uWSGI命令學習與使用

【Django學習】uWSGI命令學習與使用

10. 完成uWSGI命令學習與使用

10.2 使用pip安裝uwsgi模組

pip3 install uwsgi

10.3 uwsgi的hello world測試

參照部落格https://www.cnblogs.com/tiger666/articles/10313069.html裡面的安裝uwsgi版塊

建立一個測試檔案testuwsgi.py, 執行簡單的uWSGI站點

10.3.1 建立檔案vim /opt/testuwsgi.py 寫入以下內容
def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World"]
10.3.2 使用uwsgi命令啟動此檔案
uwsgi --http :9000 --file testuwsgi.py
10.3.3 在瀏覽器通過IP加埠進行訪問
http://10.0.0.5:9000

10.4 配置uwsgi.ini檔案

在django專案根目錄下(manage.py同級別目錄)建立這個檔案

[uwsgi]
#使用nginx連線時使用,Django程式所在伺服器地址
# socket=0.0.0.0:9000
#直接做web伺服器使用,Django程式所在伺服器地址
http=0.0.0.0:9000
#專案目錄
chdir=/opt/book_manage
#專案中wsgi.py檔案的目錄,相對於專案目錄
wsgi-file=LIB/wsgi.py
# 程序數
processes=1
# 執行緒數
threads=2
# uwsgi伺服器的角色
master=True
# 存放程序編號的檔案
pidfile=uwsgi.pid
# 日誌檔案,因為uwsgi可以脫離終端在後臺執行,日誌看不見。我們以前的runserver是依賴終端的
# 如果啟用了supervisor工具,就將此行註釋
daemonize=uwsgi.log
# 指定依賴的虛擬環境
virtualenv=/root/Envs/book_manage_env
注意: 目前暫時先用http,如果使用nginx的話,就需要註釋掉http,啟用socket

10.5 使用uwsgi命令啟動django程式

uwsgi --ini /opt/book_manage/uwsgi.ini

10.6 uwsgi啟動後無法訪問的問題解決

修改專案裡面的wsgi.py檔案,將settings的配置指向dev.py

vim /opt/book_manage/book_manage/wsgi.py

修改配置檔案

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'book_manage.settings')

10.7 uwsgi不能處理靜態檔案

uwsgi本身是支援高併發,多程序的功能,這是它的優點

缺點: 不能處理靜態檔案

11 收集django的靜態檔案

由於uwsgi對靜態檔案的處理很差,然而nginx處理靜態檔案是一把手,所以我們的專案部署還需要結合nginx來使用

11.1 設定django的靜態檔案目錄並收集, 開啟mysite/settings.py, 加入這一項配置:

STATIC_ROOT='/opt/book_manage/static'  # 在STATIC_URL = '/static/'配置上面加這一行
STATIC_URL = '/static/'
STATICFILES_DIRS=[
os.path.join(BASE_DIR,"static"),
]

那麼,上述的引數STATIC_ROOT用在哪?看下面

11.2 通過python3 manage.py collectstatic 收集所有你使用的靜態檔案儲存到STATIC_ROOT

python3 manage.py collectstatic

# STATIC_ROOT 資料夾 是用來將所有STATICFILES_DIRS中所有資料夾中的檔案,以及各app中static中的檔案都複製過來
# 把這些檔案放到一起是為了用nginx等部署的時候更方便

11.3 檢視django的靜態檔案收集目錄

ls /opt/book_manage/static

12.完成nginx的安裝並配置nginx

完成nginx處理圖書管理系統專案的靜態檔案, 與後端的介面配置

12.1 nginx.conf配置檔案詳情

server {
listen 80;
server_name 10.0.0.5;
#charset koi8-r;
#access_log logs/host.access.log main;

location / {
include uwsgi_params;
uwsgi_pass 0.0.0.0:9000;
}
location /static {
root /opt/book_manage;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}

虛擬主機: 用於接受使用者發起的80埠的請求,反向代理轉發給9000的uwsgi應用, 同時處理後端的靜態檔案static

12.2 nginx配置並啟動好之後,再啟用uwsgi.ini配置檔案裡面的socket並禁用http配置

[uwsgi]
#使用nginx連線時使用,Django程式所在伺服器地址
socket=0.0.0.0:9000
#直接做web伺服器使用,Django程式所在伺服器地址
# http=0.0.0.0:9000
#專案目錄
chdir=/opt/book_manage
#專案中wsgi.py檔案的目錄,相對於專案目錄
wsgi-file=book_manage/wsgi.py
# 程序數
processes=2
# 執行緒數
threads=2
# uwsgi伺服器的角色
master=True
# 存放程序編號的檔案
pidfile=uwsgi.pid
# 日誌檔案,因為uwsgi可以脫離終端在後臺執行,日誌看不見。我們以前的runserver是依賴終端的
# 如果啟用了supervisor工具,就將此行註釋
daemonize=uwsgi.log
# 指定依賴的虛擬環境
virtualenv=/root/Envs/book_manage

13. 測試uwsgi與nginx

測試手動啟動uwsgi與nginx,能夠保證正常訪問即可

13.1 啟動uwsgi

/root/Envs/book_manage/bin/uwsgi /opt/book_manage/uwsgi.ini

13.2 平滑重啟nginx

/opt/nginx116/sbin/nginx -s reload

13.3 專案訪問不了的解決思路(重要指數****************)

1 先關閉nginx, 再關閉uwsgi,直接使用python manage.py runserver命令啟動django專案
2 關閉剛才啟動的django,使用uwsgi將專案跑起來, 使用9000埠訪問,確認是否正常
3 註釋掉uwsgi配置檔案中的http,啟用socket,再啟動uwsgi,再啟動nginx,再進行訪問
http://10.0.3.156

14 supervisor工具的安裝與使用

14.1 supervisor的概念

supervisor 是基於 python 的任務管理工具,用來自動執行各種後臺任務,當然你也能直接利用 nohup 命令使任務自動後臺執行,但如果要重啟任務,每次都自己手動 kill 掉任務程序,這樣很繁瑣,而且一旦程式錯誤導致程序退出的話,系統也無法自動過載任務。

14.2 安裝

由於supervisor在python3下無法使用,因此只能用python2去下載!!!!!!

由於supervisor在python3下無法使用,因此只能用python2去下載!!!!!!

由於supervisor在python3下無法使用,因此只能用python2去下載!!!!!!

easy_install supervisor  # 這個是python2下面的安裝模組命令,等同於python3下面的pip

如果easy_install命令無法使用的話,就安裝一下python-setuptools工具即可
yum install python-setuptools

14.3. 使用命令生成supervisor配置檔案

echo_supervisord_conf > /etc/supervisord.conf

14.4. 修改配置檔案/etc/supervisord.conf

在檔案末尾新增如下配置:

[program:book_manage]
command=/root/Envs/book_manage/bin/uwsgi /opt/book_manage/uwsgi.ini
stopasgroup=true
killasgroup=true
# 如果發現關閉supervisor程序後,結束uwsgi程序無效,就需要加上這兩個引數

14.5. 啟動supervisor工具

supervisord -c /etc/supervisord.conf

14.6 檢視supervisor的狀態

supervisorctl

supervisor互動模式中基本操作命令

start 程序名  # 啟動程序
stop 程序名 # 停止程序
start all # 啟動所有程序
stop all # 啟動所有程序

14.7 supervisor啟動命令引數

# 任務管理命令如下:有兩種,一個是引數形式, 一個是互動式
# 引數形式
supervisord -c /etc/supervisor.conf stop/start/restart all
supervisord -c /etc/supervisor.conf start qishi8

# 互動式形式
supervisord -c /etc/supervisor.conf

14.8 重新載入supervisor(瞭解即可)

一、新增好配置檔案後

二、更新新的配置到supervisord

supervisorctl update
三、重新啟動配置中的所有程式

supervisorctl reload
四、啟動某個程序(program_name=你配置中寫的程式名稱)

supervisorctl start program_name
五、檢視正在守候的程序

supervisorctl
六、停止某一程序 (program_name=你配置中寫的程式名稱)

supervisorctl stop program_name
七、重啟某一程序 (program_name=你配置中寫的程式名稱)

supervisorctl restart program_name
八、停止全部程序

supervisorctl stop all
注意:顯示用stop停止掉的程序,用reload或者update都不會自動重啟。
作者:gtea 部落格地址:https://www.cnblogs.com/gtea