在阿里雲部署 Flask 應用

在阿里雲部署 Flask 應用

本文簡單記錄在阿里雲部署 Flask 應用的過程。由於我的應用是業餘的,Demo 性質的(在簡書中有說明過初衷),很多操作也是現搜現用,怎麼方便怎麼來,所以並不適合真正的生產要求。這更有點像是知乎問題“自己擁有一臺服務器可以做哪些很酷的事情?”的一個稍稍跑題的回答吧。

雲服務器購買

雙十二時以 1 折(¥799.00/3年起)購買了一臺ECS共享型n4服務器。操作系統選擇了 ubuntu_18_04_64,因爲 Ubuntu 比 CentOS 更適合“把玩”。

環境搭建

前期準備

  1. 安裝本地 SSH 客戶端

我本地是 Windows 系統,可以選擇的有 SecureCRT,Putty,Bitvise SSH 等。最後我選擇的是 Bitvise SSH,個人用戶免費,界面也友好。可以在官網下載(速度慢),也可以在 CSDN 資源下載

  1. 添加安全組規則

在阿里雲控制檯,添加“入方向”的安全組規則,端口範圍:80/80,授權對象:0.0.0.0/0。這樣才能通過 80 端口訪問你的 Web 應用程序。

添加安全組規則

  1. 域名解析

我的域名也是在阿里雲註冊的,可以在域名控制檯進行域名解析設置。主機記錄填寫“@”或“www”域名前綴,效果是“http://example.com/”或“http://www.example.com/”。記錄值填寫雲服務器外網 IP。

域名解析配置

軟件安裝

在安裝軟件前,先通過 SSH 客戶端連接到雲服務器,更新系統軟件源。沒有通過更新系統軟件源的話,可能無法通過apt install安裝我們需要用到的軟件 :

$ sudo apt update 
$ sudo apt upgrade

安裝 Python 虛擬環境管理工具

Python 虛擬環境管理也有很多工具,如 pyenv + virtualenv/venv + virtualenvwrapper 等。我平時主要是在 Windows 下工作,習慣了 Anaconda,所以在服務器上也選擇 Anaconda。但對於常規的 Python 開發來說,Anaconda 太重了,而且主要面向科學計算領域,但是精簡版的 Miniconda 卻是一個很好的 Python 版本和虛擬環境管理工具。可以根據官方文檔Installing on Linux進行安裝,不過在官網下載安裝文件有可能很慢,在清華大學開源軟件鏡像站下載就快很多了。

安裝 Gunicorn

在安裝完 Miniconda 後創建 Python 虛擬環境,然後在虛擬環境中安裝 Gunicorn:pip install gunicorn

安裝 Nginx

除了源碼編譯,如果想方便,用簡單的apt命令就可以安裝了,apt install nginx,安裝完畢可以用curl測試是否成功,curl IP,如果不是返回...Failed to connect to...字樣的信息則是成功了。

安裝 Supervisor

Supervisor 是一個進程管理工具,當進程中斷的時候 Supervisor 能自動重新啓動。同樣可以用apt命令安裝,apt install supervisor

應用部署

在安裝完必須的軟件後就可以開始正式部署了,首先上傳應用文件到雲服務器,可以直接 FTP 上傳,也可以先上傳到 GitHub,然後通過 git clone下載。然後安裝應用依賴,進入 Python 虛擬環境執行命令:pip install -r requirements.txt

配置 Gunicorn

Gunicorn 支持以 Python 文件配置,更詳細的配置可參考官方文檔http://docs.gunicorn.org/en/stable/settings.html#settings,以下是我自己的配置,gconfig.py:

from gevent import monkey
monkey.patch_all()
import multiprocessing
debug = False
loglevel = 'debug'
bind = 'localhost:5002' # 綁定與Nginx通信的端口
pidfile = 'log/gunicorn.pid'
logfile = 'log/debug.log'
workers = multiprocessing.cpu_count() * 2 + 1 # 開啓的進程數
worker_class = 'gevent' # worker 進程的工作方式
reload = True

配置 Nginx

先備份 /etc/nginx/sites-available/default 文件,修改爲 default_old,然後再創建 default 文件。

mv default default_old
vim default

然後輸入以下內容,這是我的配置具體根據實際情況不同修改,需要注意的是要和前面 Gunicorn 綁定的端口號要一致:

server {
        listen 80; 
        root /www/ebox001;
        server_name mfzxs.com;
        location / {
            proxy_set_header x-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_pass http://localhost:5002/; # Gunicorn 綁定的端口號
        }
        # 配置static的靜態文件:
        location ~ ^\/static\/.*$ {
            root /www/ebox001;
        }
}

修改配置文件後用nginx -t檢查文件,最後重新加載配置文件nginx -s reload

配置 Supervisor

/etc/supervisor/conf.d/目錄下創建控制進程的配置文件,並以.conf結尾,這樣將會自動應用到主配置文件當中,創建後添加如下的配置內容,[program:ebox001]ebox001是進程名,gconfig.py是 Gunicorn 的配置文件:

[program:ebox001]
command=/www/ebox001/venv/bin/gunicorn -c /www/gconfig.py run:app
directory=/www/ebox001  //項目目錄
user=root
autorestart=true //設置自動重啓
startretries=3  //重啓失敗3次

保存配置文件之後,我們需要通過命令來更新配置文件:supervisorctl update,然後通過supervisorctl進行管理,start ebox001這時 Gunicorn 服務器應用就已經啓動了。可以通過curl IP進行測試,或者直接在瀏覽器上輸入域名訪問,譬如我的應用是:http://www.mfzxs.com/news_at_zhihu

原域名爲企業備案,現以遷移到個人備案站點 ebox001 :https://www.ebox001.com/news_at_zhihu 數據也放在了 GitHub 上,倉庫地址:https://github.com/JeetChan/history_json_daily_zhihu

訪問 Flask 應用

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