云计算百科
云计算领域专业知识百科平台

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%
    pause
    exit /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%
    pause
    exit /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%
    pause
    exit /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进程有读写权限。

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

赞(0)
未经允许不得转载:网硕互联帮助中心 » Windows server服务器上部署python项目域名访问(超详细教程)
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!