書接上回射亏。近忙。。
上一節(jié)分享了一下阿里云上的一些基本配置鸦泳,諸如防火墻银锻,這些雖然看似與部署無關(guān),但是都是整個實踐過程中為了確保安全性和便宜性不可缺少的事宜做鹰。
部署我們的應用
首先要明確的是击纬,把我們的代碼推送到linux服務器上的方式有很多,我用過的有g(shù)it管理和scp指令钾麸。git的方法很常用更振,在這里就不多說了炕桨,scp是常用的基于linux系統(tǒng)下ssh遠程拷貝的命令,使用scp的話就可以繞過git管理肯腕,是一種更加簡單的方式献宫,當然使用git的習慣還是很好的,在這里我們使用“scp”指令進行操作实撒。
scp -r USER/FILE/LOCATION USERNAME@00.00.00.00:~/
指令同Linux下常用的mv差不多姊途,這里不多作介紹。
同時如果使用這種方法知态,你需要手動添加一個"requirements.txt"文件夾捷兰,以“=”的格式寫上每個擴展所需的依賴,當然為了方便起見负敏,最好創(chuàng)建一個虛擬環(huán)境贡茅,將上述的依賴安裝到虛擬環(huán)境中。
上述步驟做好之后其做,如果你的敏感信息沒有暴露在外面顶考,那么你可以使用"flask run"查看你的應用了,注意妖泄,為了讓我們可以從本機環(huán)境中看到應用運行的狀態(tài)驹沿,我們使用:
flask run --host=0.0.0.0
注意我們上文開放的端口,有可能你即使開放了5000端口蹈胡,在本地瀏覽器輸入:
***.***.***.***:5000 //***代表你的共有IP
仍然可能打不開甚负,這是因為阿里云的安全組并沒有開放5000端口,你需要手動設(shè)置一下
?
Nginx Gunicorn and Supervisor
當然审残,實際的應用部署肯定不能這么草草了事,我們需要更健壯的服務器來運行我們的實例斑举。簡單的說搅轿,Nginx是一款Web服務器,很方便富玷,而且有不錯的性能璧坟,但是他只能處理CSS,JS等文件赎懦,不能識別Python代碼雀鹃,因此,Gunicorn就有了用武之地励两。gunicorn是一個python Wsgi http server黎茎,只支持在Unix系統(tǒng)上運行,來源于Ruby的unicorn項目当悔。Gunicorn使用prefork master-worker模型傅瞻,能夠與各種wsgi web框架協(xié)作踢代。
當然不只是這些,如果你想不用一直開著窗口網(wǎng)站也可以運行嗅骄,那么Supervisor之類的軟件就必不可少了胳挎,Supervisor是用Python開發(fā)的一套通用的進程管理程序,能將一個普通的命令行進程變?yōu)楹笈_daemon溺森,同時也可以對后臺程序進行監(jiān)控慕爬。通過這三個依賴相互結(jié)合,我們就可以創(chuàng)建出擁有不錯性能的小博客屏积。
首先刪除默認配置并寫入新配置:
sudo rm /etc/nginx/sites-enabled/default
sudo vim /etc/nginx/sites-enabled/flaskblog
//Nginx:
server{
listen 80;
server_name **.**.**.**;
location /static {
alias /home/**/**/app/static;
}
location / {
proxy_pass http://localhost:8000;
include /etc/nginx/proxy_params;
proxy_redirect off;
}
}
同時可以開啟80端口医窿,具體操作就不說了。
使用下面操作重啟Nginx肾请,當然這時候你可以看到CSS文件留搔,卻看不到網(wǎng)頁的樣子,原因就是我們之前所說的Nginx不識別Python Code铛铁。
sudo systemctl restart nginx
這時我們使用:
gunicorn -w 3 test:app
關(guān)于gunicorn我們在Flask部署在Heroku一文中已經(jīng)提到了隔显,這里不再詳述。
最后我們配置一下Supervisor:
[program:flaskblog]
directory=/home/**/tutorial
command=/home/**/tutorial/venv/bin/gunicorn -w 3 test:app
user=**
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
stderr_logfile=/var/log/flaskblog/flaskblog.err.log
stdout_logfile=/var/log/flaskblog/flaskblog.out.log
并創(chuàng)建我們需要的文件夾饵逐,重啟Supervisor即可得到成品的網(wǎng)站啦括眠。
下一節(jié),也就是最后一節(jié)倍权,我們會看看域名怎么和IP綁定掷豺。