【适合中小企业应用的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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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;本地文件名、服务端文件名、…