Flask采用Virtualenv+Supervisor+Nginx部署應用
--
首先是概念解釋
- WSGI服務器,負責我們的app與服務器的交互,常用的有Gunicorn
- Web服務器,是個HTTP服務器,就相當於tomacat於Java,常用的有Nginx
Web服務器中,Nginx是一款面向性能設計的HTTP服務器,相較於Apache、lighttpd具有占有內存少,穩定性高等優勢。
部署工具:
- Virtualenv,用戶創建獨立的虛擬的Python運行環境,可以解決版本,依賴等問題
- Supervisor,負責管理應用:應用的開啟,關閉,以及多應用的管理等
Virtualenv
安裝
sudo pip install virtualenv
使用
#創建虛擬環境
virtualenv venv
#啟動虛擬環境
source venv/bin/activate
#停止虛擬環境
deactivate
Supervisor
安裝
sudo apt-get install supervisor
使用
配置Supervisor的配置文件的路徑:/etc/supervisor/conf.d/*conf
cd /etc/supervisor/conf.d/*conf
在這里目錄下,我們創建我們應用的配置文件,這樣Supervisor才能讀取到
sudo vim app.conf
里面的內容輸入(內容其實就是執行我們的Python文件):
[program:app]
command = python /home/tengfei/api01/test/TestTo/TODO-orm/app.py
//注,這個配置是和后文中Nginx配置好后對象的9000的轉發端口執行的操作
[program:todo]
command = /home/tengfei/api01/test/TestTo/TODO-orm/venv/bin/gunicorn -b 127.0.0.1:9000 app:app
directory = /home/tengfei/api01/test/TestTo/TODO-orm
更改配置文件后,要讓supervisor的配置文件生效,執行
supervisorctl reload
啟動supervisor:
sudo service supervisor start
重啟:
sudo service supervisor restart
查看supervisor程序當前的狀態
sudo supervisorctl
這里面可以使用status指令來查看程序的運行狀態
app名字:就是剛才配置配置文件中[program:app]的,比如我這里輸入 start app就可以了,以后同上:
start app名字 # 啟動app
stop app # 停止app
需要注意的是supervisor發生錯誤的話,需要它的日志中才能看到
supervisor錯誤日志地址:
/var/log/supervisor/supervisord.log
Nginx
安裝
sudo apt-get update
sudo apt-get install nginx
配置
nginx的也是把程序運行需要的配置文件放到指定的目錄下即可
cd /etc/nginx
在/etc/nginx子目錄下,有兩個文件要格外關注關注一下:
sites-available :可用的配置文件
sites-enabled :生效的配置文件
1:先在sites-available 目錄下創建配置文件vim api_app
里面寫上:
# api_app內容
server {
listen 81;
location /static {
alias /home/tengfei/api01/test/TestTo/TODO-orm/;
}
location / {
proxy_pass http://127.0.0.1:9000;
}
}
注,listen 81;:意思是nginx監聽的是81端口,我開始監聽80端口,結果和默認的沖突了;location /static:是把靜態文件轉發到后文中的目錄下;location / :是把動態請求轉發到本機(服務器)的9000端口,上面文件的內容的格式可自行百度。我開始
然后創建軟連接到sites-enabled
sudo ln -s ../sites-available/api01_app .
然后重新啟動nginx
sudo service nginx reload
//這代表nginx重啟成功
* Reloading nginx configuration nginx [ OK ]
使用
啟動
sudo service nginx restart
重啟
sudo service nginx reload
查看nginx的狀態
sudo service nginx status
參考:How To Install Nginx on Ubuntu 14.04 LTS
gunicorn
安裝
apt-get install gunicorn
使用
gunicorn -b 0.0.0.0:8080 run:app
嘗試在虛擬環境中運行一下程序,看看是否可以成功
//注意下面語句前面的run是指運行的python文件的的名字為run.py的話,執行run:app,如果為app.py那就是app:app
參考文檔
“error: command 'x86_64-linux-gnu-gcc' failed with exit status 1” in virtualenv
how to install the SQLALchemy on the ubuntu?
聲明本文內容來源於:Flask應用部署與運維
特地感謝極客學院的shin0922老師,真的受益匪淺,如果涉嫌侵權,請告知我,我將刪除文章
