python2+python3+django+uwsgi+nginx共存

背景:

服務器上面有需要部署兩個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;
  }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章