喵星在線-Flask博客上線佈署過程

原文:http://www.catonlinepy.tech/
聲明:原創不易,未經許可,不得轉載python

這篇文章,貓姐將討論如何將flask程序部署到ubuntu服務器上。其中,部署過程涉及到Flask,Nginx,Gunicorn,Supervisor的安裝使用。經過學習今天的文章,你將學會部署本身開發的Flask web程序,真正讓本身開發的應用上線運行。nginx

0. Flask Web應用處理請求的過程

圖片描述

1. 安裝相應的依賴環境

使用ssh username@ip 進入雲主機的shell環境,並在雲主機上安裝須要依賴環境,使用以下命令安裝:web

sudo apt-get install nginx supervisor python-pip python3-venv

ssh的使用方法:ssh命令,加上@前面是雲主機服務器的用戶名,@後面是雲主機服務器的ip地址。shell

2. 建立虛擬環境

若是雲主機中沒有建立虛擬環境,那麼咱們有必要建立一個。虛擬開發環境的主要做用是爲了將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

3. 設置Gunicorn

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進程。

4. 配置、啓動Supervisor

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

5. 配置、啓動Nginx

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程序了,貓姐的博客運行起來後的效果以下:
圖片描述

6. 總結

經過佈署flask程序到ubuntu雲主機服務器上,咱們掌握瞭如下技能:

1.學到了Gunicorn的使用

2.學到了Supervisor的使用

3.學到了Nginx的使用

今天的flask上線佈署教程就到這裏,喜歡的同窗們能夠在下面點贊留言,或是訪問個人博客地址:http://www.catonlinepy.tech/ 加入咱們的QQ羣進一步交流學習!
圖片描述

相關文章
相關標籤/搜索