部署到生產環境¶
本教學的這部分假設您有一個想要部署應用程式的伺服器。它概述了如何建立發行檔案並安裝它,但不會詳細說明要使用哪個伺服器或軟體。您可以在您的開發電腦上設定一個新的環境來試用以下指示,但可能不應該將其用於託管真正的公開應用程式。請參閱部署到生產環境,以取得許多不同託管應用程式方式的列表。
建置和安裝¶
當您想要將應用程式部署到其他地方時,您需要建置一個 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 伺服器和部署選項,您可以為您的專案選擇。
繼續到 繼續開發!。