在 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
來源:簡書
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。