基礎(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

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掉