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

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

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

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

圖片描述

1. 安裝相應的依賴環境

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

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

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

2. 創建虛擬環境

如果雲主機中沒有創建虛擬環境,那麼我們有必要創建一個。虛擬開發環境的主要作用是爲了將web項目所用的各種庫與操作系統自帶的python庫隔離開來,這樣做的好處是開發環境與系統環境隔離,環境之間不會相互影響,特別是對於多人協作的大型項目開發,建立虛擬環境是非常有必要的。下面開始創建虛擬環境:

# 使用下面命令,創建一個虛擬開發環境
$ 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程序。

3. 設置Gunicorn

Gunicorn(“Green Unicorn”)是一個unix上被廣泛使用的高性能的Python WSGI UNIX HTTP Server。和大多數的web框架兼容,並具有實現簡單,輕量級,自動管理多個worker進程,高性能等多個特點。

採用如下命令安裝gunicorn:

pip install gunicorn

gunicorn運行Flask web程序的方法也非常簡單,如下命令即可達到目的:

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羣進一步交流學習!
圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章