背景:
服務器上面有需要部署兩個django項目,其中一個python3版本,一個是python2版本,
怎麼使用這兩個版本的項目使用uwsgi共存呢?
思路:
既然都是一個是使用python2 的wsgi,一個使用的是python3版本的uwsgi。
那麼就可用先安裝兩個uwsgi,之後對uwsgi進行不同版本重名了即可
步驟:
安裝uwsgi
pip2 install uwsgi
pip3 install uwsgi
由於我的系統默認自帶pip2,和python2,
然後python2版本安裝的uwsgi默認是在
這個目錄的
/usr/bin/uwsgi
這就說明直接運行uwsgi運行的python2版本的項目。
我的python3版本的uwsgi,pip安裝在這個目錄
/usr/local/python3/bin
於是可用對python3版本的uwsgi進行一個軟連接映射
ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi3
這樣就可以運行python3版本的而項目了
uwsgi3 --ini demopy3.ini
運行python2版本的的可以這樣操作
uwsgi --ini demopy2.ini
這樣就實現了版本共存了
參考:
https://blog.51cto.com/leizhu/2065394
uswgi配置
[uwsgi]
chdir = /home/mysite # 你的項目目錄
home = /home/mysite_env # 如果有虛擬環境,則需要指定虛擬環境目錄; 沒有則註釋掉
pythonpath = /usr/local/python3 # 指定python路徑; 可註釋
module = mysite.wsgi:application # 指向自己Django項目目錄下mysite目錄下的wsgi文件
master = True
processes = 4 # 使用進程數
harakiri = 60 # 最大超時時間
max-requests = 5000 # 最大請求數,到了後就會自動重啓
socket = 127.0.0.1:8001 # socket連接地址和端口,和之前nginx配置一致
#http = 127.0.0.1:800 # socket和http二選一
pidfile = /home/mysite_uwsgi/master.pid # 在失去權限前,將pid寫到指定的pidfile文件中
daemonize = /home/mysite_uwsgi/mysite.log # 使進程在後臺運行,並將日誌打到指定的日誌文件或者udp服務器
# chmod-socket = 664 # 如果沒有權限訪問uWSGI的socket,這裏可以設置權限
vacuum = True # 服務退出或重啓,自動刪除pid和socket文件
上面使用的socket方式nginx進行通訊,socket需要配合nginx使用,
如果直接訪問8001端口,會報錯
invalid request block size: 21573 (max 4096)...skip
解釋:
使用nginx來把請求發送給uwsgi。所以uwsgi被配置成使用socket方式(爲tcp協議)進行通信。如果打開瀏覽器訪問uwsgi指定的端口,那麼瀏覽器請求uwsgi的方式爲http協議,而不是socket方式。所以就導致uwsgi的log文件中打出上面的錯誤信息。
如果需要臨時調試,不經過nginx,可用使用使用http方式,
修改裏面內容把socket=127.0.0.1:8001替換成http=127.0.0.1:8001
參考:
鏈接: https://blog.csdn.net/kriszhang/article/details/68941829
uwsgi命令
nginx測試命令:nginx -t
查看uwsgi進程:ps -aux | grep uwsgi
正常關閉uwsgi進程:uwsgi --stop /home/mysite_uwsgi/master.pid
強制關閉全部uwsgi進程:ps -aux | grep uwsgi |awk '{print $2}'|xargs kill -9
重新加載uwsgi:uwsgi --reload /home/mysite_uwsgi/master.pid
參考文檔:
(Django官網)https://docs.djangoproject.com/en/2.1/howto/deployment/wsgi/uwsgi/
(uwsgi中文)https://uwsgi-docs-zh.readthedocs.io/zh_CN/latest/tutorials/Django_and_nginx.html
(uwsgi英文)https://uwsgi.readthedocs.io/en/latest/tutorials/Django_and_nginx.html
(自強學堂)https://code.ziqiangxuetang.com/django/django-nginx-deploy.html
參考https://www.jianshu.com/p/b91447672b35
內含根據不同配置文件部署django的介紹
nginx 配置
未完待續
見到配置
server {
listen 80;
#server_name www.baidu.cn;
location / {
include uwsgi_params;
uwsgi_pass 172.0.0.1:4000;
}
}