【適合中小企業應用的Flask網站部署指南】【小白指南系列】如何在Windows Server服務器上部署Flask網站和SSL證書開啟HTTPS
前言:
上一篇文章已經配置好Redis數據庫和網站雛形建立了。現在完善了一個比較重大的功能和進度之后,我們嘗試初步將Flask項目網站配置到真實運行的云服務上去,這個需要一個比較可靠和穩定的方案。這就是這篇文章的目標:讓你從測試環境搬遷到生產環境中運行你的網站。
準備生產環境:
第一步:上傳“源代碼”到云服務器。不需要移動.env文件夾。
上傳到服務器之后,檢查是否有env虛擬環境文件夾。如果有,刪除。
然后重新創建:
在project目錄下,使用服務器上的Python創建新環境輸入:
python -m venv newEnv
然后激活:
# CMD 中
newEnv\Scripts\activate.bat# PowerShell 中(需先允許執行腳本)
.\newEnv\Scripts\Activate.ps1
看到(newEnv)即可確定自己處于虛擬環境模式激活狀態。
進一步確認可以輸入:
where python
如果輸出路徑包含 newEnv\Scripts\python.exe(例如 C:\path\to\project\newEnv\Scripts\python.exe),說明當前處于 newEnv 環境中。
服務器上激活newEnv后執行:
#本地項目中先導出依賴清單
pip freeze > requirements.txt
#進入項目目錄
pip install flask waitress # 安裝Flask和Waitress
pip install -r requirements.txt # 安裝項目其他依賴
在目錄下創建或找到"run.py"文件,復制以下內容到文件中:
#run.py
from waitress import serve
from flask_app import app # 從主文件導入創建好的 app 實例if __name__ == '__main__':# 使用 Waitress 啟動應用,配置和原 Flask 服務器保持一致threads = 4serve(app, host='0.0.0.0', port=8080, threads = threads )
保存"run.py"文件,關閉它,然后回到powershell,在虛擬環境newEnv下面執行啟動命令:python run.py
環境變量配置:
A:關閉命令行窗口后,環境變量會失效,適合臨時測試。
# CMD 中:激活虛擬環境后,依次執行
set SECRET_KEY=124123124123124124bd21
set REDIS_HOST_IP=123.123.123.123
set REDIS_PORT=26739
set REDIS_PWD=1sdsdgasdfasdg
set DB_SERVER=abc.com
set MSSQL_USER=dbuser
set MSSQL_PWD=123345123
set DB_INSTANCE=
set DB_NAME_MAIN=dbName# 啟動應用
python run.py
B:如果不想每次都輸入,就創建批處理腳本:創建一個 .bat 腳本(如 start_app.bat),批量設置環境變量并啟動應用:
@echo off
:: 激活虛擬環境
call newEnv\Scripts\activate.bat:: 設置環境變量
set SECRET_KEY=124123124123124124bd21
set REDIS_HOST_IP=123.123.123.123
set REDIS_PORT=26739
set REDIS_PWD=1sdsdgasdfasdg
set DB_SERVER=abc.com
set MSSQL_USER=dbuser
set MSSQL_PWD=123345123
set DB_INSTANCE=......
set DB_NAME_MAIN=dbName:: 啟動應用
python run.py
使用時,雙擊 start_app.bat 或在命令行中執行即可。
配置 HTTPS (部署SSL證書)
可以不通過 IIS 在 自定義 端口直接配置 HTTPS,只需讓 Waitress 服務器直接支持 SSL 即可。以下是具體實現方法:
核心原理
Waitress 本身支持通過 ssl_context 參數配置 HTTPS,需要準備SSL 證書文件(.pem 格式),然后在啟動腳本中指定證書路徑和端口。
步驟 1:準備 SSL 證書
你需要兩個文件:
證書文件(cert.pem):包含公鑰
私鑰文件(key.pem):包含私鑰
如果你有正式 SSL 證書(如從 Let’s Encrypt、阿里云等申請),直接使用對應的 .pem 格式文件。
測試環境可生成自簽名證書(Windows 下可通過 OpenSSL 生成):
#安裝 OpenSSL(如通過 Chocolatey:choco install openssl)
openssl req -x509 -newkey rsa:4096 -nodes -out cert.pem -keyout key.pem -days 365
生成后會在當前目錄得到 cert.pem 和 key.pem,將它們放到項目目錄中(如 C:\python_Project\project\ssl\)。
步驟 2:修改 run.py 支持 HTTPS
在 run.py 中添加 SSL 配置,讓 Waitress 監聽 8080(自行修改) 端口并啟用 HTTPS:
from waitress import serve
from flask_app import app
import osif __name__ == '__main__':# 配置SSL證書路徑(替換為你的實際路徑)ssl_cert = os.path.join(os.path.dirname(__file__), 'ssl', 'cert.pem') # 證書文件ssl_key = os.path.join(os.path.dirname(__file__), 'ssl', 'key.pem') # 私鑰文件# 驗證證書文件是否存在if not os.path.exists(ssl_cert) or not os.path.exists(ssl_key):raise FileNotFoundError("SSL證書文件不存在,請檢查路徑是否正確")# 啟動Waitress并啟用HTTPS,綁定8080端口serve(app,host='0.0.0.0',port=8080,url_scheme='https', # 強制使用HTTPSssl_context=(ssl_cert, ssl_key) # 傳入證書和私鑰)
步驟 3:啟動應用并驗證
確保證書路徑正確(腳本中已添加路徑驗證,若路徑錯誤會直接報錯)。
在虛擬環境中啟動應用:
powershell
(yunEnv) PS C:\python_Project\YunShangERP> python run.py
啟動成功后,通過 https://服務器IP:8080 訪問(注意是 https 而非 http)。
擁有pfx文件,如何獲得pem?可以通過 OpenSSL 工具將 PFX 文件轉換為 PEM 格式的證書和私鑰文件。以下是具體步驟:
步驟 1:安裝 OpenSSL
如果服務器上沒有 OpenSSL,先安裝它:
方法 1(推薦):通過 Chocolatey 包管理器安裝(需管理員權限)
以管理員身份打開 PowerShell
安裝 Chocolatey(若未安裝):
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
安裝 OpenSSL:
choco install openssl -y
重啟 PowerShell 使配置生效。溫馨提示:OpenSSL下載很慢
步驟 2:轉換 PFX 到 PEM
假設你的 PFX 文件路徑為 C:\cert\your_cert.pfx,執行以下命令:
提取私鑰(key.pem)
openssl pkcs12 -in "C:\cert\your_cert.pfx" -nocerts -out "C:\cert\key.pem" -nodes
執行后會提示輸入 PFX 文件的密碼(若設置過),輸入后回車。
-nodes 表示不加密私鑰(避免啟動時需要輸入密碼)。
提取證書(cert.pem)
openssl pkcs12 -in "C:\cert\your_cert.pfx" -nokeys -out "C:\cert\cert.pem"
同樣可能需要輸入 PFX 密碼。
步驟 3:驗證文件
轉換完成后,在 C:\cert\ 目錄下會生成兩個文件:
key.pem:私鑰文件
cert.pem:證書文件
可以用文本編輯器打開查看,確認內容以 -----BEGIN PRIVATE KEY-----(私鑰)和 -----BEGIN CERTIFICATE-----(證書)開頭。
步驟 4:配置到應用中
將生成的 cert.pem 和 key.pem 放到項目的 ssl 目錄(如 C:\python_Project\project\ssl\),然后按之前的 run.py 配置即可啟用 HTTPS。
如果轉換過程中提示密碼錯誤,需確認 PFX 文件的原始密碼是否正確(通常是導出 PFX 時設置的密碼)。
其它方案:
用IIS來重定向綁定SSL證書
搭配 IIS 作為反向代理(可選)
如果需要處理靜態文件、SSL 證書或域名綁定,可使用 Windows 自帶的 IIS 作為反向代理:
安裝 IIS:通過「服務器管理器 → 添加角色和功能」安裝 IIS 及「URL 重寫」模塊
配置反向代理:
在 IIS 中創建網站,綁定域名和端口(如 80)
安裝「Application Request Routing」模塊
配置 URL 重寫規則,將請求轉發到 http://127.0.0.1:8000