1. 程式人生 > 其它 >在 CentOS 上部署 Flask

在 CentOS 上部署 Flask

在 CentOS 6.5 中部署 Flask

平時開發的時候,Flask 自帶的 Web Server 可以滿足需要,但是部署到伺服器上則需要專門的符合 WSGI 協議的 Web Server。一種常見的組合是 Nginx + uWSGI。網上的教程挺多的,但大多也只是貼命令,對於關鍵點未做說明。本文希望能完整介紹 Flask 在 CentOS 上的部署,並且突出幾個關鍵要點。

安裝 Python 3.6

CentOS 6 自帶的 Python 版本為 2.6.6,因為我是用 Python 3 開發的,為了不與系統自帶的 Python 2.6.6 衝突,考慮使用虛擬環境 VirtualEnv,Python 3 在虛擬環境中執行。

安裝步驟:

# 下載 python 3.6.1
wget https://www.Python.org/ftp/python/3.6.1/Python-3.6.1.tar.xz

# 解壓
tar xJf  Python-3.6.1.tar.xz

# 進入 python-3.6.1 目錄
cd  Python-3.6.1

# 安裝
./configure  --prefix=/usr/local/python3 && make && make install

#建立軟連線
ln -s /usr/local/python3/bin/python3 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3

建立軟連線的作用是能夠區分 Python 2 和 Python 3,能夠區分 Python 2 中的 pip 和 Python 3 中的 pip3。因為我們接下來要使用 Python 3 中的 pip 來安裝 VirtualEnv。正確安裝 python3 應該會同時安裝好 pip,如果沒有,參考這篇文章:

CentOS6.8編譯安裝Python3.6 + pip + Nginx - CSDN部落格

安裝 virtualenv

pip3 install virtualenv

建立 python 的虛擬環境

/usr/local/python3/bin/virtualenv  -p /usr/bin/python3 venv

進入作業系統的目標目錄,比如 在 \~/py36venv 下執行上述命令建立虛擬環境。命令說明:virtualenv 命令位於 /usr/local/python3/bin 目錄下。使用 -p PYTHON_EXE 選項,作用是在建立虛擬環境的時候指定 Python 版本 (只能指定已安裝好的 Python 版本)。

啟用和關閉虛擬環境

啟用:

[root@localhost py36venv]#  source venv/bin/activate

關閉

(venv)[root@localhost py36venv]#  deactivate

安裝 Flask

在虛擬環境下安裝 使用 pip install flask 安裝 Flask。

安裝 Nginx

安裝 Nginx 有兩種方式, yum 安裝和原始碼安裝的方式。兩種方式有一些區別。這裡使用 yum 安裝:

yum install nginx

安裝之後通過 rpm -ql nginx 命令檢視安裝路徑。可能碰到的錯誤: No package nginx available, 則先進行如下操作:

# CentOS Linux v6.x user type the following command:
# wget http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
# rpm -ivh nginx-release-centos-6-0.el6.ngx.noarch.rpm

Reference: https://www.cyberciti.biz/faq/install-nginx-centos-rhel-6-server-rpm-using-yum-command/

檢視 Nginx 版本及配置引數

nginx -V

nginx 的主配置檔案是:/etc/nginx/nginx.conf,用 vi 或者 vim 檢視配置檔案, 檔案中這樣的一行:

include /etc/nginx/conf.d/*.conf;

表示在 /etc/nginx/conf.d 目錄下面建立副檔名為 conf 的檔案,將會被載入作為配置檔案。所以並需要修改 nginx.conf 主配置檔案。並且可以建立多個不同的配置檔案從來區分不同的 Web 服務。後面我將建立支援 WSGI 規範執行 Flask 的 Web 服務。

啟動和停止 Nginx

# 啟動
service nginx start 

# 停止
service nginx stop

# 重新啟動
service nginx restart

# 重新載入
service nginx reload

啟動 Nginx 後,在瀏覽器中輸入: http://localhost ,顯示 nginx 的初始介面,表示啟動成功。

在虛擬環境中安裝 uWSGI

在虛擬環境中安裝 uWSGI: pip install uwsgi

測試 uWSGI

安裝 uWSGI 後,建立一個名為 test.py 的 Python 檔案,輸入以下測試程式碼:

def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World"]

使用命令:

uwsgi --http :9090 --wsgi-file test.py

來測試 uwsgi 能否能正確提供 Web 服務,如果啟動正常,在瀏覽器中輸入 http://localhost:9090 ,將收到返回的字串 Hello World。當然,對於長期需要提供服務的 Flask Web 應用程式,最好是將配置放在配配置檔案中。在 ~/py36venv 路徑下配置 config.ini 檔案。檔案的內容如下:

[uwsgi]
# uwsgi 啟動時所使用的地址與埠
socket = 127.0.0.1:8001

# 指向網站目錄
chdir=/root/flask_restful_mysql

# python 啟動程式檔案
wsgi-file = manage.py

# python 程式內用以啟動的 application 變數名
callable = app

# 處理器數
processes = 4

# 執行緒數
threads = 2

buffer-size = 32768

#狀態檢測地址
stats = 127.0.0.1:9191

啟動及關閉 uWSGI

  • uwsgi 啟動 :虛擬環境下 uwsgi config.ini

  • uwsgi 關閉:虛擬環境下 killall -9 uwsgi

  • 檢視 uwsgi 程序: ps -ef | grep uwsgi

啟動 uWSGI 要注意一個問題,因為一般我們通過 SSH 工具遠端操作 Linux,所以當我們退出 SSH 的時候,服務就會終止。如果希望在關閉 SSH 後,作業系統仍然能提供服務,在啟動 uwsgi 的時候,使用 nohup 命令:

nohup uwsgi config.ini &

原始碼如何上傳到 Linux

最簡單的辦法是通過 WinSCP工具,可以將 Windows 中的原始碼上傳到 Linux。但可能每次對程式碼的修改都需要重新部署,比較費時。自動化可以考慮 Fabric 自動部署。這裡就不展開了。



作者:Stone0823
連結:https://www.jianshu.com/p/f1acbd401bed
來源:簡書
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。