Nginx+uwsgi+supervisor在Ubuntu上部署flask應用

原文地址:Nginx+uwsgi+supervisor在Ubuntu上部署flask應用

這個部署架構中Nginx主要作爲前置服務器,負責分發處理來自客戶端的請求,uwsgi作爲後端Flask應用的容器,supervisor作爲監控程序,即看門狗。

環境配置:

sudo apt-get install uwsgi-plugin-python # 這個不裝的話當發起請求時uwsgi會報錯
若是Python3的話改爲:
sudo apt-get install uwsgi-plugin-python3

STEP 1: Nginx安裝配置

安裝Nginx
1. 輸入Nginx安裝命令
sudo apt-get install nginx

  1. 啓動Nginx服務器:
    sudo service nginx start
    啓動Nginx服務器並用瀏覽器訪問測試一下Nginx是否安裝成功,若成功,進入下一步。

  2. 配置Nginx
    進入/etc/nginx/sites-enabled/文件夾 注意不是sites-available
    直接配置/etc/nginx/nginx.conf也可以,不過要根據其語法來配置,其實最後nginx.conf還是會調用/etc/nginx/sites-enabled/default的配置。
    先將默認配置文件default備份(養成修改配置前先備份的習慣):
    mv default default.bak
    編輯配置文件:
    vim default
    寫入配置內容:

    server {
    listen 80; # 服務器監聽端口 server_name 110.110.110.110; # 這裏寫你的域名或者公網IP charset utf-8; # 編碼 client_max_body_size 75M; # 之前寫的關於GET和POST的區別,這裏應該是原因之一吧
    location / {
    include uwsgi_params; # 導入uwsgi配置 uwsgi_pass 127.0.0.1:8000; # 轉發端口,需要和uwsgi配置當中的監聽端口一致
    uwsgi_param UWSGI_CHDIR /home/chihu; # 項目根目錄 uwsgi_param UWSGI_SCRIPT manage:app; # 項目的主程序 }
    }

    輸入:wq保存配置文件。配置好了之後別急着啓動Nginx,記得先通過nginx -t測試一下配置文件是否正確,若檢測配置文件失敗,再好好檢查下配置文件有沒有疏漏。

此時訪問Nginx服務器應該會得到502 Bad Gateway的提示,因爲請求被Nginx轉發了,但是並沒有轉發服務器來處理請求(還沒有配置好uwsgi)。

STEP 2: uwsgi安裝配置

安裝uwsgi
sudo apt-get install uwsgi
編寫uwsgi配置文件
在項目文件根目錄新建配置文件uwsgi.ini(uwsgi支持多種配置文件格式, xml, ini, json等)

vim uwsgi.ini
寫入配置內容如下:

[uwsgi] socket = 127.0.0.1:8000 # uwsgi的監聽端口 plugins = python # 這行一定要加上,不然請求時會出現– unavailable modifier requested: 0 –錯誤提示 chidir = /home/chihu # 項目根目錄 wsgi-file = manage.py # flask程序的啓動文件 callable = app # 程序變量名
輸入:wq保存配置文件,可以通過uwsgi uwsgi.ini來啓動uwsgi。

STEP 3: 啓動及測試

Nginx和uwsgi都配置好了之後下一步就是啓動Nginx和uwsgi了。

啓動Nginx

sudo service nginx restart
啓動uwsgi
進入項目根目錄,即uwsgi.ini所在的目錄,執行以下命令。

uwsgi wsgi.ini
若一切正常的話就可以在終端上看到uwsgi的啓動信息了。

測試:
打開瀏覽器訪問服務器,若可以正常訪問,說明Nginx和uwsgi配置成功了,但離真正項目上線還差一段,因爲uwsgi是直接在前臺啓動的,當我們的連接終端跟服務器斷開的時候uwsgi進程也被關閉了,所以我們需要讓uwsgi在後臺運行。

STEP 4: 進程監控

單獨一個uwsgi程序運行短時間可能沒問題,但是網絡狀況瞬息萬變,萬一uwsgi進程掛了網站也就訪問不了了…..爲了防止出現意外情況,還需要一個監控程序來監控uwsgi的狀況,這裏該supervisor出場了。具體什麼是supervisor可以Google之。

  1. 首先安裝supervisor

sudo apt-get install supervisor
2. 生成默認配置文件

echo_supervisord_config > supervisord.conf
3. 加入監控程序的配置

[program:project_name] # project_name這裏寫上你的項目名稱,如我的爲[project:chihu]
command = uwsgi –ini /home/chihu/uwsgi.ini # 跟手動啓動的命令一樣
stopsignal=QUIT
autostart=true
autorestart=true
stdout_logfile=/var/log/uwsgi/supervisor_chihu.log # 運行日誌stderr_logfile=/var/log/uwsgi/supervisor_chihu_err.log # 錯誤日誌

  1. 啓動supervisord

supervisorctl reload
5. 檢查uwsgi進程是否正常運行

ps aux|grep uwsgi
如果一切正常,此時應該可以看到uwsgi進程
嘗試kill掉uwsgi進程看supervisor會不會重新啓動一個新的uwsgi進程

sudo killall uwsgi
若再次通過ps aux|grep uwsgi查看發現有新的uwsgi進程在運行,那差不多可以祝你成功了, God bless you。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章