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进程有读写权限。
通过以上步骤,即可完成域名绑定与项目部署。若需更高性能或复杂场景,建议进一步优化数据库和负载均衡配置。