先用1張圖表示centOS布署flask的關鍵點,以及可能遇到的問題,及解決辦法。
圖片看不清,可以【下載】下來看,清晰度能夠看清字
【目標】
- 局域網內,通過url可以訪問flask編寫的api
- 更新flask項目后,自動布署
【工具】
自動布署涉及的工具:
- gitlab
- jenkins
布署flask項目,涉及的工具:
- flask編程
- gunicorn:gunicorn啟動flask項目的方法
- nginx:明確nginx與gunicorn之間的關系,當瀏覽器訪問flask-api時,背后發生了什么
- supervisor:掌握使用方法
- linux操作:創建文件,切換目錄,安裝工具,啟動/重啟/關閉工具,查看被占端口號以及,殺死進程
【環境介紹】
- flask運行環境:
python3,pip3,python虛擬環境
- 布署環境:
centOS7
【操作步驟】
配置gunicorn:
1.創建虛擬環境,並下載gunicorn(pip install gunicorn)
2.在項目根目錄下創建gunicorn的啟動文件,wsgi.py,內容如下:
from app import create_app application = create_app() if __name__ == '__main__': application.run()
3.啟動命令:
gunicorn -w 4 -b 127.0.0.1:8000 wsgi:application
驗證結果:
這時候通過命令請求url,可以看到響應結果。這樣gunicorn就配置好了
curl http://127.0.0.1:8000 /users
配置nginx:
安裝nginx:
yum -y install nginx
如果提示沒有可用的軟件包,解決辦法:Centos 7下安裝nginx,使用yum install nginx,提示沒有可用的軟件包
如果啟動nginx失敗,因為80端口號被占用,解決辦法:centos7 ngxin啟動失敗:Job for nginx.service failed(80端口被占用的解決辦法)
驗證結果:
啟動nginx后,打開瀏覽器輸入http://10.2.1.92:8001(8001是nginx使用的端口)
看到如下界面,表示nginx環境搭建完畢
配置使用nginx代理gunicorn服務
具體配置參照:gunicorn+nginx配置方法
驗證結果:
驗證結果前,要確保gunicorn是啟動的
配置supervisor管理gunicorn進程(啟動|重啟|關閉)
最后使用supervisor后台啟動gunicorn進程,否則一關掉命令窗口,gunicorn進程也被殺死了,這當然不是大家希望看到的結果
supervisor的配置方法,參照supervisor的使用
驗證結果:
通過supervisor啟動gunicorn之后,關掉命令行窗口,注意器訪問 A地址/路由地址(A地址是什么,參照上圖),可以看到正確的響應結果,表示supervisor成功啟動了gunicorn
這樣nginx+gunicorn+supervisor布署flask項目就配置好了。
配置項目更新,自動布署:
如果想要實現更新flask項目,自動布署,可以借助jenkins與gitlab的web-hook功能。
具體配置方法(只看前面與gitlab的配置即可,后面寫的很亂,不用看):如何創建一個項目,讓gitlab自動觸發jenkins進行構建
驗證結果:
在項目中新建1個測試文件:test.py,提交到倉庫
在服務器~/.jenkins/workspace/job名稱下查看,也存在test.py文件,即表示自動布署配置成功
具體的配置不太清楚時,可以看看這1篇,寫的很亂,但可能會記錄一些具體配置
【疑問】
為什么每次自動布署之后,請求接口請求到的內容還是之前的內容呢?
但是這樣做之后,再更新接口,內容就更新過來了?(殺掉supervisor進程,再重啟)