原文:http://www.catonlinepy.tech/
聲明:原創不易,未經許可,不得轉載python
這篇文章,貓姐將討論如何將flask程序部署到ubuntu服務器上。其中,部署過程涉及到Flask,Nginx,Gunicorn,Supervisor的安裝使用。經過學習今天的文章,你將學會部署本身開發的Flask web程序,真正讓本身開發的應用上線運行。nginx
使用ssh username@ip 進入雲主機的shell環境,並在雲主機上安裝須要依賴環境,使用以下命令安裝:web
sudo apt-get install nginx supervisor python-pip python3-venv
ssh的使用方法:ssh命令,加上@前面是雲主機服務器的用戶名,@後面是雲主機服務器的ip地址。shell
若是雲主機中沒有建立虛擬環境,那麼咱們有必要建立一個。虛擬開發環境的主要做用是爲了將web項目所用的各類庫與操做系統自帶的python庫隔離開來,這樣作的好處是開發環境與系統環境隔離,環境之間不會相互影響,特別是對於多人協做的大型項目開發,創建虛擬環境是很是有必要的。下面開始建立虛擬環境:flask
# 使用下面命令,建立一個虛擬開發環境 $ python3 -m venv <虛擬環境的名字> # 激活剛纔創建的虛擬開發環境,(這裏咱們建立一個名爲miao_venv的虛擬環境) $ python3 -m venv miao_venv $ source maio_venv/bin/activate # 安裝flask web程序所須要的python包 $ pip installl -r requirement.txt
激活虛擬環境後,進入run.py文件的目錄,在終端中輸入python run.py,就能夠將程序運行起來了。可是,這樣生產環境中將flask程序運行起來是不安裝的,而且處理用戶請求的能力也很是不足。因此,咱們應該去使用gunicorn這個工具去運行咱們的Flask web程序。ubuntu
Gunicorn(「Green Unicorn」)是一個unix上被普遍使用的高性能的Python WSGI UNIX HTTP Server。和大多數的web框架兼容,並具備實現簡單,輕量級,自動管理多個worker進程,高性能等多個特色。服務器
採用以下命令安裝gunicorn:併發
pip install gunicorn
gunicorn運行Flask web程序的方法也很是簡單,以下命令便可達到目的:app
gunicorn filename(run):變量名(app) -b localhost:端口號 & # 解釋:filename指的是可以將flask程序運行起來的python文件,如run.py的文件名run。冒號後面的是flask實例化的app變量。端口號是在網頁中輸入的url的端口號
查看端口服務是否生效,可使用下面的命令:負載均衡
# 在命令行中輸入: $ ps aux|grep gunicorn # 下面是效果 (miao_venv) root@vultr:~/flaskblog# ps aux|grep gunicorn root 4124 0.0 0.0 11020 980 pts/0 S+ 10:35 0:00 grep --color=auto gunicorn root 11117 0.0 2.1 33308 21400 ? S May28 0:10 /root/blog_venv/bin/python3 /root/blog_venv/bin/gunicorn run:app -b localhost:5006 root 11120 0.0 7.6 160528 77160 ? S May28 0:17 /root/blog_venv/bin/python3 /root/blog_venv/bin/gunicorn run:app -b localhost:5006
這樣就可以使用gunicorn進程去監聽5006的端口。如今gunicorn進程是工做在後臺的,但只有一個gunicorn進程會處理web請求,當用戶訪問量過大時,網站的併發處理能力很是弱。最理想的方法是,使用supervisor工具去啓動並監控多個gunicorn進程。
supervisor工具能夠監視並控制類Unix操做系統的進程。supervisor將gunicorn進程啓動後,會一直監控gunicorn進程的運行狀況。當gunicorn進程出現異常掛掉後,supervisor會馬上啓動guincorn進程,確保web程序提供的用戶服務不受影響。
supervisor的使用也很是簡單,只須要完成一個conf文件的編寫,在/etc/supervisor/conf.d/目錄下建立一個flaskblog.conf文件並依據本身的要求去配置它。配置內容以下所示:
# flaskblog.conf 文件內容以下 [program:flaskblog] # 你的博客程序所在的目錄 directory=/root/flaskblog/. command=/root/flaskblog/miao_venv/bin/gunicorn run:app -b localhost:5006 # 這個地方的端口號要與nginx.conf文件中一致 autostart=true autorestart=true stderr_logfile=/var/log/flaskblog.err.log stdout_logfile=/var/log/flaskblog.out.log
爲了使以上配置馬上生效,須要運行下面的命令:
$ sudo supervisorctl reread $ sudo service supervisor restart #另一些經常使用的命令 $ sudo service supervisor stop $ sudo service supervisor start
這樣, 咱們就能夠一般supervisor工具來完成對gunicorn進程的監控了,使用下面的命令能夠看到flaskblog是否處於運行狀態,及運行進程ID和運行時長:
$ sudo supervisorctl status # 狀態顯示 (miao_venv) root@vultr:~/flaskblog# sudo supervisorctl status flaskblog RUNNING pid 11117, uptime 19:18:31
Nginx能夠做爲HTTP服務器和反向代理服務器,它可以實現負載均衡,分擔服務器的壓力。
如今,爲咱們的flask程序定義一個服務塊,以下所示:
# 在/etc/nginx/nginx.conf文件中添加以下內容 # server添加的位置在http{}裏面 server { listen 80; server_name example.org; # 這是HOST機器的外部域名,用地址也行。如今尚未域名,能夠用example.org代替 location / { proxy_pass http://127.0.0.1:5006; # 這裏是指向 gunicorn host 的服務地址 proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } # 注意:proxy_pass中,代理傳遞的端口必須與gunicorn進程的端口號相同
如今重啓nginx web服務器,命令以下:
$ sudo nginx -t $ sudo service nginx restart
此時,你已經能夠經過雲主機上的公網IP來訪問你的Flask web程序了,貓姐的博客運行起來後的效果以下:
經過佈署flask程序到ubuntu雲主機服務器上,咱們掌握瞭如下技能:
1.學到了Gunicorn的使用
2.學到了Supervisor的使用
3.學到了Nginx的使用
今天的flask上線佈署教程就到這裏,喜歡的同窗們能夠在下面點贊留言,或是訪問個人博客地址:http://www.catonlinepy.tech/ 加入咱們的QQ羣進一步交流學習!