Django-30 項目部署 uwsgi

基礎(chǔ)概念

項目部署是指在軟件發(fā)布完畢后,將開發(fā)機器上運行的軟件實時安裝到服務器上進行長期運行
1,在安裝機器上安裝和配置同版本的環(huán)境[py,數(shù)據(jù)庫等]
2,django項目遷移

sudo scp /home/tarena/django/mysite1
root@88.77.66.55:/home/root/xxx
請輸入root密碼:

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

WSGI定義

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


image.png

uWSGI定義

uWSGI是WSGI的一種,它實現(xiàn)了HTTP協(xié)議WSGI協(xié)議以及uwsgi協(xié)議
uWSGI功能完善,支持協(xié)議眾多,在python web圈熱度極高
uWSGI主要以學習配置為主

uWSGI安裝

Ubuntu執(zhí)行sudo pip3 install uwsgi==2.0.18 -i
我在macos是直接執(zhí)行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
  • 進程個數(shù)
    process=4
  • 每個進程的線程個數(shù)
    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=['網(wǎng)站域名']或者['服務監(jiān)聽的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,無論啟動還是關(guān)閉,都需要執(zhí)行ps aux|grep 'uwsgi' 確認是否符合預期
2,啟動成功后,進程在后臺執(zhí)行,所有日志均輸出在配置文件所在目錄的uwsgi.log中
3,Django中代碼有任何修改,需要重新啟動uwsgi

uWSGI測試

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

uWSGI常見問題匯總

1,啟動失敗:端口被占用

原因:有其他進程占用uWSGI啟動的端口;
解決方案:可執(zhí)行 sudo lsof -i:端口號 查詢出具體進程;殺掉進程后,重新啟動uWSGI即可

2,停止失?。簊top無法關(guān)閉uWSGI

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容