Django-30 項目部署 uwsgi 基礎概念 WSGI定義 uWSGI定義 uWSGI安裝 uWSGI的運行管理 uWSGI常見問題彙總

基礎概念

項目部署是指在軟件發佈完畢後,將開發機器上運行的軟件實時安裝到服務器上進行長期運行
1,在安裝機器上安裝和配置同版本的環境[py,數據庫等]
2,django項目遷移

sudo scp /home/tarena/django/mysite1
[email protected]:/home/root/xxx
請輸入root密碼:

3,用uWSGI替代python3 manage.py runserver方法啓動服務器
4,配置nginx反向代理服務器
5,用nginx配置靜態文件路徑,解決靜態路徑問題

WSGI定義

WSGI(Web Server Gateway Interface)Web服務器網關接口,是Python應用程序或框架和Web服務器之間的一種接口,被廣泛使用
使用python manage.py runserver 通常只在開發和測試環境中使用。
當開發結束後,完善的項目代碼需要在一個高效穩定的環境中運行,這時可以使用WSGI


uWSGI定義

uWSGI是WSGI的一種,它實現了HTTP協議WSGI協議以及uwsgi協議
uWSGI功能完善,支持協議衆多,在python web圈熱度極高
uWSGI主要以學習配置爲主

uWSGI安裝

Ubuntu執行sudo pip3 install uwsgi==2.0.18 -i
我在macos是直接執行pip install uwsgi安裝成功的

檢查是否安裝成功

  • sudo pip3 freeze|grap -i 'uwsgi'
  • 如果成功安裝,則會輸出 uWSGI==2.0.18

配置uWSGI

添加配置文件 項目同名文件夾/uwsgi.ini
如:mysite1/mysite1/uwsgi.ini
文件以[uwsgi]開頭,有如下配置項:

  • 套接字方式的IP地址:端口號【此模式需要有nginx】
    socket=127.0.0.1:8000
  • Http通信方式的IP地址:端口號
    http=127.0.0.1:8000
  • 項目當前工作目錄
    chdir=/home/tarena/.../my_project
  • 項目中wsgi.py文件的目錄,相對於當前工作目錄
    wsgi-file=my_project/wsgi.py
  • 進程個數
    process=4
  • 每個進程的線程個數
    threads=2
  • 服務的pid記錄文件
    pidfile=uwsgi.pid
  • 服務的日誌文件位置
    daemonize=uwsgi.log
  • 開啓主進程管理模式
    master = true
[uwsgi]
http=127.0.0.1:8000
chdir=/Users/liujia/program/django_code/tedu_note
wsgi-file=tedu_note/wsgi.py
process=4
threads=2
pidfile=uwsgi.pid
daemonize=uwsgi.log
master=true
特殊說明:Django的settings.py需要做如下配置

1,修改settings.py將DEBUG=True改爲DEBUG=False
2,修改settings.py將ALLOWED_HOSTS=[]改爲ALLOWED_HOSTS=['網站域名']或者['服務監聽的ip地址']

uWSGI的運行管理

啓動uwsgi

cd 到uWSGI配置文件所在目錄
uwsgi --ini uwsgi.ini

liujiadeMacBook-Pro:tedu_note liujia$ uwsgi --ini uwsgi.ini
[uWSGI] getting INI configuration from uwsgi.ini
liujiadeMacBook-Pro:tedu_note liujia$ ps aux|grep 'uwsgi'
liujia            7583   0.0  0.0  4267768    900 s000  S+   10:05下午   0:00.00 grep uwsgi
liujia            7578   0.0  0.0  4377652    648   ??  S    10:05下午   0:00.00 uwsgi --ini uwsgi.ini
liujia            7577   0.0  0.0  4378176   2356   ??  S    10:05下午   0:00.00 uwsgi --ini uwsgi.ini
liujia            7576   0.0  0.2  4377652  33744   ??  S    10:05下午   0:00.47 uwsgi --ini uwsgi.ini
liujiadeMacBook-Pro:tedu_note liujia$ 

停止uwsgi

cd 到uWSGI配置文件所在目錄
uwsgi --stop uwsgi.pid

liujiadeMacBook-Pro:tedu_note liujia$ uwsgi --stop uwsgi.pid
liujiadeMacBook-Pro:tedu_note liujia$ ps aux|grep 'uwsgi'
liujia            7598   0.0  0.0  4285176    924 s000  S+   10:07下午   0:00.00 grep uwsgi
liujiadeMacBook-Pro:tedu_note liujia$ 

注意點

1,無論啓動還是關閉,都需要執行ps aux|grep 'uwsgi' 確認是否符合預期
2,啓動成功後,進程在後臺執行,所有日誌均輸出在配置文件所在目錄的uwsgi.log中
3,Django中代碼有任何修改,需要重新啓動uwsgi

uWSGI測試

在瀏覽器輸入http://127.0.0.1:8000/url 進行測試
注意:
此時端口8000被uWSGI進程監聽,並非runserver
如果當前有預期返回,則uWSGI啓動成功

uWSGI常見問題彙總

1,啓動失敗:端口被佔用

原因:有其他進程佔用uWSGI啓動的端口;
解決方案:可執行 sudo lsof -i:端口號 查詢出具體進程;殺掉進程後,重新啓動uWSGI即可

2,停止失敗:stop無法關閉uWSGI

原因:重複啓動uWSGI,導致pid文件中的進程號失準
解決方案:ps出uWSGI進程,手動kill掉

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章