【適合中小企業應用的Flask網站部署指南】【小白指南系列】如何在Windows Server服務器上部署Flask網站和SSL證書開啟HTTPS

【適合中小企業應用的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

OpenSSL下載很慢

重啟 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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/94224.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/94224.shtml
英文地址,請注明出處:http://en.pswp.cn/web/94224.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

std::exchange詳解

一、基本概念與函數原型 std::exchange 是 C++14 引入的標準庫函數,定義于 <utility> 頭文件。其核心功能是原子性地替換對象的值并返回舊值,適用于資源管理、狀態機更新等場景。 函數原型: template <class T, class U = T> T exchange(T& obj,

kubernetes-dashboard使用http不登錄

安裝了k8s v1.28&#xff0c;想要安裝kubernetes-dashboard以便可視化管理平臺&#xff0c;網上很多資料都是版本比較低的&#xff0c;自己摸索了很久&#xff0c;終于搞定了。直接上配置文件&#xff0c;拿去kubectl apply -f k8s-dashb.yml就行了。 # Copyright 2017 The Kub…

道路車道線分割數據集左車道右車道中線labelme格式3494張4類別

數據集格式&#xff1a;labelme格式(不包含mask文件&#xff0c;僅僅包含jpg圖片和對應的json文件)圖片數量(jpg文件個數)&#xff1a;3494標注數量(json文件個數)&#xff1a;3494標注類別數&#xff1a;4標注類別名稱:["center_lane","right_lane","…

12.Shell腳本修煉手冊--函數的基礎認知與實戰演練(fock炸彈!!)

Shell 函數的知識與實踐 文章目錄Shell 函數的知識與實踐Shell 函數介紹Shell 函數的語法Shell 函數的執行1. 不帶參數的函數執行2. 帶參數的函數執行Shell 函數的基礎實踐示例 1&#xff1a;簡單的 hello 函數&#xff08;驗證 “先定義后調用”&#xff09;示例 2&#xff1a…

微信小程序設計的請求封裝方案(request.js)

以下是為微信小程序設計的請求封裝方案&#xff0c;包含代碼示例和最佳實踐建議&#xff1a; 基礎請求封裝&#xff08;request.js&#xff09; // 基礎配置 const BASE_URL https://api.yourdomain.com; const TIMEOUT 10000;// 請求封裝函數 const request (options) >…

【Linux系統】進程信號:信號的處理

上一篇文章在介紹完信號的產生和保存后&#xff0c;我們現在對信號有了一個基本的認識&#xff0c;信號由鍵盤、系統調用、硬件異常、軟件條件等方式產生&#xff0c;然后被保存在三張表中&#xff0c;再將信號遞達&#xff0c;操作系統有三種處理方式&#xff1a;默認處理、忽…

權限管理模塊

登錄相關權限管理模塊(基礎版)模塊設計與實現優化點&#xff1a;前后端用戶驗證實現方式常見的攻擊手段及防御手段權限管理模塊(基礎版) RBAC(Role-Base Access Control&#xff0c;基于角色的訪問控制)&#xff1a;是權限管理的常用方案。 核心&#xff1a;通過用戶 - 角色 -…

征服與守護:從拉里·埃里森看八號人格的職場王者之道

真正的強者&#xff0c;從不遵守別人的規則2010年&#xff0c;加利福尼亞州的圣何塞機場迎來了一架不速之客——一架意大利產的馬基戰斗機以一種極其霸道的姿態降落在跑道上。艙蓋打開&#xff0c;走下來的不是空軍飛行員&#xff0c;而是一位身穿飛行員服、戴著墨鏡的企業家&a…

【Linux系統】命名管道與共享內存

前言&#xff1a; 上文我們講到了匿名管道【Linux系統】匿名管道以及進程池的簡單實現-CSDN博客 本文我們來講一講命名管道與共享內存 命名管道 上面我們講到&#xff0c;匿名管道只能用于有血緣關系&#xff08;尤其父子&#xff09;的進程進行通信&#xff01;但如果…

搜索體驗優化:ABP vNext 的查詢改寫(Query Rewrite)與同義詞治理

&#x1f50e; 搜索體驗優化&#xff1a;ABP vNext 的查詢改寫&#xff08;Query Rewrite&#xff09;與同義詞治理 &#x1f4da; 目錄&#x1f50e; 搜索體驗優化&#xff1a;ABP vNext 的查詢改寫&#xff08;Query Rewrite&#xff09;與同義詞治理1. 背景與問題界定 &…

Text2API與Text2SQL深度對比:自然語言驅動的數據交互革命

在數字化浪潮中&#xff0c;如何讓人機交互更加自然流暢&#xff1f;Text2API與Text2SQL技術應運而生&#xff0c;它們如同魔法般將自然語言轉化為機器可執行的指令&#xff0c;讓數據交互不再高不可攀。本文將深入剖析這兩項技術的原理、優劣勢及應用場景&#xff0c;帶您領略…

數據可視化與分析平臺設計與實現案例

數據可視化與分析平臺設計與實現案例(python) 下面分享一個完整的 Flask 數據可視化與分析平臺代碼,包含所有必要的組件和功能。這個平臺允許用戶上傳數據文件、進行基本的數據清洗、生成各種可視化圖表以及查看基礎統計分析結果。 產品設計 核心功能 數據上傳與管理(支…

Kotlin-基礎語法練習二

接上一篇博客 每個 Kotlin 程序都是由兩種部分組成的&#xff1a; 1、表達式&#xff08;Expressions&#xff09;&#xff1a;用于計算值的部分&#xff0c;比如 2 3、函數調用、變量賦值等&#xff0c;它們通常會返回一個結果。2、語句&#xff08;Statements&#xff09;…

與Deepseek對話了解單片機基礎知識

keil5里的c語言編程的程序燒錄到單片機里具體過程是啥&#xff1f;如何能把機器語言轉換為電路控制&#xff1f; 步驟 所在位置 核心工具 輸入->輸出 比喻 1. 編譯 Keil5 (PC) 編譯…

利用背景圖片定位套打檔案封面

某些表單設計起來比較復雜&#xff0c;或只有表單的空白圖片資料。Nhdeep檔案目錄套打工具&#xff08;nhdeep官網www.nhdeep.com&#xff09;支持將已有的表單圖片作為模版背景圖片&#xff0c;然后使用文本框進行精準的位置定位&#xff0c;再進行文本替換。 背景圖片定位套…

微信HOOK 實現自動下載視頻

1、前言 在收發消息的接口中&#xff0c;圖片和文件這類接口是相對容易自動下載&#xff0c;但是視頻的下載是需要手動點擊的&#xff0c;并且只有這一種下載方式&#xff0c;實現自動化也比較困難&#xff0c;一些項目的開發中&#xff0c;需要自動下載收到的視頻并保存&#…

【GPT入門】第57課 詳解 LLamaFactory 與 XTuner 實現大模型多卡分布式訓練的方案與實踐

【GPT入門】第57課 大模型多卡計算1. 理論2.LLamaFacotory實踐3. xtuner3.1 介紹3.1 安裝3.2 xtuner訓練3.4 訓練后格式轉換3.5 合并基礎模型與lora模型3.6 參數說明3.7 訓練過程主觀檢驗1. 理論 deepspeed的三種訓練方式 zero-1&#xff0c;優化器狀態分片。的優勢體現在多卡…

部隊多媒體信息發布系統:賦能 IPTV 與電教化,加速軍營信息化變革

在科技飛速發展的當下&#xff0c;部隊的信息化建設也在不斷推進。多媒體信息發布系統作為一種創新的技術手段&#xff0c;正逐步融入部隊的各個領域&#xff0c;為部隊的現代化建設注入強大動力。?在部隊 IPTV 方面&#xff0c;多媒體信息發布系統展現出卓越的性能。它打破了…

FTP/TCP上傳下載文件

封裝C風格地ftplib為ftp.c和ftp.h文件&#xff1a;cftplient類&#xff08;主要成員變量&#xff1a;文件大小、文件修改時間、主要成員函數&#xff1a;get函數&#xff08;遠程文件名、本地文件名、核對文件時間&#xff09;、put函數&#xff08;本地文件名、服務端文件名、…