部署到生產環境

本教學的這部分假設您有一個想要部署應用程式的伺服器。它概述了如何建立發行檔案並安裝它,但不會詳細說明要使用哪個伺服器或軟體。您可以在您的開發電腦上設定一個新的環境來試用以下指示,但可能不應該將其用於託管真正的公開應用程式。請參閱部署到生產環境,以取得許多不同託管應用程式方式的列表。

建置和安裝

當您想要將應用程式部署到其他地方時,您需要建置一個 wheel (.whl) 檔案。安裝並使用 build 工具來完成此操作。

$ pip install build
$ python -m build --wheel

您可以在 dist/flaskr-1.0.0-py3-none-any.whl 中找到該檔案。檔案名稱的格式為 {專案名稱}-{版本}-{python 標籤}-{abi 標籤}-{平台標籤}。

將此檔案複製到另一台機器,設定新的虛擬環境,然後使用 pip 安裝該檔案。

$ pip install flaskr-1.0.0-py3-none-any.whl

Pip 將會安裝您的專案及其相依性。

由於這是不同的機器,您需要再次執行 init-db 以在 instance 資料夾中建立資料庫。

$ flask --app flaskr init-db

當 Flask 偵測到它是已安裝的(非可編輯模式),它會為 instance 資料夾使用不同的目錄。您可以在 .venv/var/flaskr-instance 找到它。

設定密鑰

在本教學的開始,您為 SECRET_KEY 提供了一個預設值。在生產環境中,這應該更改為一些隨機位元組。否則,攻擊者可能會使用公開的 'dev' 密鑰來修改 session cookie,或任何其他使用密鑰的東西。

您可以使用以下命令輸出隨機密鑰

$ python -c 'import secrets; print(secrets.token_hex())'

'192b9bdd22ab9ed4d12e236c78afcb9a393ec15f71bbf5dc987d54727823bcbf'

在 instance 資料夾中建立 config.py 檔案,工廠將在該檔案存在時從中讀取。將產生的值複製到其中。

.venv/var/flaskr-instance/config.py
SECRET_KEY = '192b9bdd22ab9ed4d12e236c78afcb9a393ec15f71bbf5dc987d54727823bcbf'

您也可以在此處設定任何其他必要的配置,儘管 SECRET_KEY 是 Flaskr 唯一需要的配置。

使用生產伺服器執行

當公開運行而不是在開發環境中運行時,您不應該使用內建的開發伺服器 (flask run)。開發伺服器由 Werkzeug 提供以方便使用,但其設計並非特別高效、穩定或安全。

相反地,請使用生產 WSGI 伺服器。例如,要使用 Waitress,首先在虛擬環境中安裝它

$ pip install waitress

您需要告訴 Waitress 您的應用程式,但它不使用像 flask run 那樣的 --app。您需要告訴它匯入並呼叫應用程式工廠以取得應用程式物件。

$ waitress-serve --call 'flaskr:create_app'

Serving on http://0.0.0.0:8080

請參閱 部署到生產環境,以取得許多不同託管應用程式方式的列表。Waitress 僅是一個範例,因其同時支援 Windows 和 Linux 而被選為本教學的範例。還有許多其他的 WSGI 伺服器和部署選項,您可以為您的專案選擇。

繼續到 繼續開發!