基礎概念
項目部署是指在軟件發佈完畢後,將開發機器上運行的軟件實時安裝到服務器上進行長期運行
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掉