当前位置: 首页 > news >正文

Windows server服务器上部署python项目域名访问(超详细教程)

        我们现在已经开发好了一个python3.10.6+flask+sqlite的web项目,想要部署到服务器上,由于开发和测试都是在windows系统上,所以我们希望在服务器上也采用windows server系统。

        上文,我们已经部署好了公网IP能够访问网站,但是现在还不能绑定域名访问,解析我们继续部署,实现域名访问网站。

        请先看以下文章:

(1)开发一个python3.10.6+flask+sqlite的web项目:python3.10.6+flask+sqlite开发一个越南留学中国网站的流程与文件组织结构说明-CSDN博客 

(2)阿里云ECS+windows server系统的购买与远程连接,可以看我的CSDN文章:阿里云ECS的windows server系统如何远程桌面连接-CSDN博客

(3)部署公网IP访问网站:https://lzm07.blog.csdn.net/article/details/150284006 

        要将本地可运行的Python+Flask+SQLite项目绑定域名并部署到Windows服务器,需完成以下关键步骤:

一、域名解析配置

(一)购买域名并解析

        在域名注册商(如腾讯云、阿里云)的控制台中添加A记录,将域名指向服务器的公网IP地址。例如:

(1)主机记录:www 或 @(根域名),当前vsic

(2)记录类型:A

(3)记录值:服务器公网 IP,当前47.107.172.52

(4)验证解析:使用 nslookup vsic.lsxxljy.com 检查是否指向正确IP。

        等待900秒后,验证解析。

        这里有一个条件,域名一定要备案才可以使用,同时域名和服务器最好是同一家的。否则后面设置的无法访问。

二、部署Flask应用

使用Waitress启动服务

1.安装工具Waitress

(1)通过远程桌面连接到服务器后,打开CMD,进入你的项目根目录:

cd C:\website\vietnam-study-in-china

(2)进入vsic-venv虚拟环境的Scripts目录,执行激活命令:

vsic-venv\Scripts\activate

(4)进入网站的虚拟环境后安装:

pip install waitress

2.启动命令

进入网站的虚拟环境后,使用waitress-serve启动的命令为:

waitress-serve --host 0.0.0.0 --port 5000 run:app

命令说明:

(1)--host 0.0.0.0:允许服务器所有网卡的IP访问(包括公网IP)。

(2)--port 5000:指定服务端口为5000(需确保该端口已在阿里云安全组和服务器防火墙中开放)。

(3)run:app:run指run.py文件(项目的启动文件),app指该文件中定义的Flask实例变量(需与run.py中的实际变量名一致)。

以后启动网站,就通过waitress-serve启动即可,不再需要py run.py的方式。

3.验证启动是否成功

命令执行后,若看到类似以下输出,说明启动成功:

Serving on http://0.0.0.0:5000

测试访问:

(1)在服务器本地浏览器访问http://localhost:5000或是http://127.0.0.1:5000,确认应用正常显示。

(2)通过公网访问 http://你的服务器公网IP:5000,确认能正常打开(需提前开放5000端口)。

至此,就可以通过公网IP访问网站:

(二)设置开机自启(可选)

为避免服务器重启后需手动启动应用,可创建一个批处理文件实现自启:

1.添加系统环境变量

waitress安装好后,会在虚拟环境C:\website\vietnam-study-in-china\vsic-venv\Scripts路径下有waitress-serve.exe,将waitress-serve.exe所在路径添加到系统环境变量。打开“系统属性”->“高级”选项卡 -> 环境变量。

2.项目根目录创建start_app.bat文件

可以先建一个txt,之后另存为”改后缀改文件编码,内容如下:

@echo off
chcp 936 >nul 2>nul:: 定义项目根目录的绝对路径(请根据实际文件夹名修改,确保正确)
set "PROJECT_DIR=C:\website\vietnam-study-in-china"
echo 项目目录:%PROJECT_DIR%:: 检查项目目录是否存在(替代cd命令的验证)
if not exist "%PROJECT_DIR%" (echo 错误:项目目录不存在!路径:%PROJECT_DIR%pauseexit /b 1
):: 激活虚拟环境(用绝对路径调用activate.bat)
set "ACTIVATE_PATH=%PROJECT_DIR%\vsic-venv\Scripts\activate.bat"
if exist "%ACTIVATE_PATH%" (call "%ACTIVATE_PATH%"echo 虚拟环境激活成功
) else (echo 错误:未找到虚拟环境激活脚本!路径:%ACTIVATE_PATH%pauseexit /b 1
):: 启动服务(用绝对路径调用waitress-serve,并指定工作目录为项目根目录)
set "WAITRESS_PATH=%PROJECT_DIR%\vsic-venv\Scripts\waitress-serve.exe"
if exist "%WAITRESS_PATH%" (echo 正在启动服务..."%WAITRESS_PATH%" --host 0.0.0.0 --port 5000 run:app
) else (echo 错误:未找到waitress-serve.exe!路径:%WAITRESS_PATH%pauseexit /b 1
)

另存为一定要选择编码ANSI

3.将该批处理文件添加到Windows启动目录

(1)按下Win + R,输入shell:startup打开启动文件夹。

(2)将start_app.bat的快捷方式复制到该文件夹C:\Users\admin\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup 目录(程序启动目录)。

4.测试bat文件

直接双击C:\website\vietnam-study-in-china\start_app.bat,观察是否能启动网站(正常情况下会弹出命令行窗口,显示Serving on http://0.0.0.0:5000)

三、配置反向代理(IIS或Nginx)

方案一:使用IIS(Windows推荐)

1.安装IIS:

(1)通过「控制面板」→「程序和功能」→「启用或关闭Windows功能」。

(2)打开「服务器管理器」→「添加角色和功能」。

(3)在「服务器角色」勾选「Web服务器(IIS)」,IIS即Internet Information Services。

(4)进入“功能”选项卡,展开「Web服务器(IIS)」→「Web服务器」→「应用程序开发」,确保勾选以下组件:

「.NET 扩展性4.8」(即使不使用.NET,也需勾选以启用相关配置项)

「CGI」(反向代理可能依赖)

「ISAPI扩展」和「ISAPI筛选器」

(5)进入“角色服务”,勾选:

完成安装后重启服务器,使组件生效。

安装好了,之后在“开始”菜单,就可以搜索IIS,并打开了。

2.创建网站:

(1)在IIS管理器中右键「网站」→「添加网站」,填写域名、物理路径(项目目录)。

(2)配置应用程序池:选择 .NET CLR版本 为 无托管代码

打开「IIS 管理器」→ 左侧导航栏展开服务器节点 → 点击「应用程序池」。

右键需要配置的应用程序池(网站名vsic.lsxxljy.com)→ 选择「高级设置」(而非“基本设置”)。

在弹出的“高级设置”窗口中,找到「.NET CLR 版本」选项:

点击下拉菜单,即可看到「无托管代码」(No Managed Code)选项。

(3)配置URL重写:
在网站根目录创建 web.config 文件,添加以下内容:

<?xml version="1.0" encoding="UTF-8"?><configuration><system.webServer><rewrite><rules><rule name="ReverseProxyInboundRule1" stopProcessing="true"><match url="(.*)" /><action type="Rewrite" url="http://localhost:5000/{R:1}" /></rule></rules></rewrite></system.webServer></configuration>

此配置将所有请求转发到本地5000端口的Waitress服务。

3.域名访问

输入 http://vsic.lsxxljy.com 检查是否显示Flask应用内容。

方案二:使用Nginx(高性能选项)

1.下载并启动Nginx:

从官网下载Windows版本,解压后运行 nginx.exe。

2.修改配置文件:

编辑 nginx.conf,在 http 块中添加:

server {listen 80;server_name yourdomain.com;location / {proxy_pass http://localhost:5000;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}
}

保存后重启 Nginx:nginx -s reload。

、防火墙与端口设置

1.开放端口:

(1)HTTP(80):允许外部访问域名。

(2)HTTPS(443):若启用SSL需开放。

(3)Flask端口(如5000):确保Waitress监听的端口可被IIS/Nginx访问。

2.防火墙端口设置

通过「控制面板」→「Windows Defender 防火墙」→「高级设置」添加入站规则开放对应端口。

、启用HTTPS(可选但推荐)

(一)申请SSL证书:

使用Let’s Encrypt或腾讯云SSL证书服务获取免费证书。

在IIS中配置证书:

导入 .pfx 证书到「服务器证书」。

在网站绑定中添加 HTTPS 类型,选择证书并指定 443 端口。

强制HTTPS跳转:

在 web.config 中添加重写规则:

<rule name="Redirect to HTTPS" stopProcessing="true"><match url="(.*)" /><conditions><add input="{HTTPS}" pattern="off" ignoreCase="true" /></conditions><action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" />
</rule>

、代码优化与安全

处理反向代理头:

在Flask应用中添加中间件以获取真实客户端IP和协议:

from werkzeug.middleware.proxy_fix import ProxyFix

app.wsgi_app = ProxyFix(app.wsgi_app, x_proto=1, x_host=1)

避免因代理导致的请求头错误。

SQLite注意事项:

生产环境建议改用MySQL/PostgreSQL,避免并发访问问题。

确保数据库文件路径正确,且IIS/Nginx进程有读写权限。

通过以上步骤,即可完成域名绑定与项目部署。若需更高性能或复杂场景,建议进一步优化数据库和负载均衡配置。

http://www.lryc.cn/news/618741.html

相关文章:

  • Day13 Vue工程化
  • 医疗智慧大屏系统 - Flask + Vue实现
  • Spring框架如何解决循环依赖
  • vue3 两种方法实现 按钮级别权限控制
  • vue3中el-upload使用http-request方式自定义上传文件
  • 支持任意 MCP 协议的客户端
  • Redis面试题及详细答案100道(16-32) --- 数据类型事务管道篇
  • 一,设计模式-单例模式
  • 2025年中科院2区红杉优化算法Sequoia Optimization Algorithm-附Matlab免费代码
  • VBS 字符串处理
  • 腾讯云服务器账户转移操作详解
  • Ceph存储池参数中pg_num和pgp_num的关系
  • 【Docker项目实战】使用Docker部署Vikunja任务管理工具
  • 熟悉并使用Spring框架 - XML篇
  • 破译真实感:渲染参数进阶指南——告别塑料感,唤醒材质生命力
  • 98、【OS】【Nuttx】【构建】cmake 配置问题定位:menuconfig.dir/build.make
  • 【力扣494】目标和
  • 笔试——Day36
  • Unity-VR插件AutoHand
  • Day 10-2: Mini-GPT完整手写实战 - 从组件组装到文本生成的端到端实现
  • 武汉火影数字|VR红色文化馆打造 沉浸式体验红色文化
  • Coze开源 Agent 的“乐高时代”
  • 【19】万集科技——万集科技嵌入式,校招 一面,二面,面试问答记录
  • Java 编程每日一题:实现一个简易的 LRU 缓存
  • 站在Vue的角度,对比鸿蒙开发中的递归渲染
  • C++单继承虚函数表探索
  • 什么是跨域访问问题,如何解决?
  • 使用 rsync 上传下载文件:详解原理、目录同步和常见问题
  • 间隙锁(Gap Lock)
  • 【C++】5. 内存管理