Windows Server 部署全攻略:中间件、软件与网页发布

Windows Server 部署全攻略:中间件、软件与网页发布

前言

Windows Server 在企业中仍然广泛承载着 .NET 应用、IIS 网站、SQL Server 数据库等关键业务。作为运维实习生,你需要掌握在 Windows Server 上安装中间件、部署软件、发布网页 的标准操作。

本文将带你逐一完成以下任务:

  • 网页发布:IIS 静态网站 / .NET 应用部署
  • 中间件部署:Nginx、Tomcat、MySQL、Redis 等在 Windows 上的安装与配置
  • 软件部署:Java 应用、Python 应用、普通 exe 服务的运行
  • 防火墙配合:端口放行、安全加固
  • 系统服务化:将程序注册为 Windows 服务,实现开机自启

环境说明:本文操作基于 Windows Server 2016/2019/2022,部分方法同样适用于 Windows 10/11 专业版。


一、网页发布:IIS 全流程

IIS(Internet Information Services)是 Windows 自带的 Web 服务器,尤其适合托管 ASP.NET、.NET Core 和静态网站

1.1 安装 IIS 及必要组件

通过服务器管理器安装:

  1. 打开「服务器管理器」→「添加角色和功能」。
  2. 在"服务器角色"中勾选 Web 服务器(IIS),弹出的"添加所需功能"对话框点击"添加功能"。
  3. 在"角色服务"中,务必勾选以下常见选项:
    • 常见 HTTP 功能(静态内容、默认文档、目录浏览、HTTP 错误)
    • 应用程序开发 → ASP.NET 4.7 (若跑 .NET Framework 应用)、ISAPI 扩展ISAPI 筛选器.NET Extensibility 4.7
    • 运行状况和诊断(HTTP 日志、请求监视)
    • 安全性(请求筛选、基本/Windows 身份验证等按需勾选)
    • 管理工具(IIS 管理控制台)
  4. 完成安装并重启(通常不需要重启)。

命令行安装(PowerShell 管理员):

powershell 复制代码
Install-WindowsFeature -Name Web-Server -IncludeManagementTools
# 同时安装 ASP.NET 支持
Install-WindowsFeature -Name Web-Asp-Net45

1.2 发布静态网站

  1. 把你的网站文件(如 index.html、CSS、JS)放到一个目录,例如 C:\inetpub\wwwroot\mysite
  2. 打开 IIS 管理器(运行 inetmgr)。
  3. 右键"网站" → "添加网站"。
    • 网站名称:任意描述名。
    • 物理路径:指向你的网站文件夹。
    • 绑定 :IP 地址(默认"全部未分配")、端口(默认 80)、主机名(如 www.test.com,可选)。
  4. 点击"确定"。
  5. 如果启动失败,可能是端口被占用(默认网站占用了 80)。可以先停掉"Default Web Site"或修改其端口。
  6. 浏览器访问 http://服务器IP:80 即可看到网页。

若访问权限不足(403 错误),需在网站文件夹的"安全"属性中添加 IIS_IUSRSIUSR 账户的读取权限。

1.3 部署 ASP.NET / .NET Core 应用

.NET Framework 应用(传统)
  1. 开发给你一个发布好的文件夹(包含 binweb.config 等)。
  2. 在 IIS 中添加网站,物理路径指向该发布文件夹。
  3. 在网站右侧的"应用程序池"中,确认使用的是 .NET CLR v4.0 的池。
  4. 如果用到特殊管道模式,需在应用程序池"高级设置"中启用 32 位应用程序(若程序是 32 位)等。
.NET Core / .NET 5+ 应用
  1. 在服务器上安装 ASP.NET Core Hosting Bundle(从微软官网下载),它会安装 .NET Runtime 和 IIS 模块。
  2. 发布应用时,选择目标运行时为 win-x64portable
  3. 在 IIS 中创建网站,物理路径指向 publish 文件夹。
  4. 应用程序池的".NET CLR 版本"要设为 "无托管代码",因为 .NET Core 是自托管进程。
  5. 启动网站后,访问即可。

命令行部署(自动化)

powershell 复制代码
# 创建一个新网站
New-IISSite -Name "MyApp" -PhysicalPath "C:\apps\myapp" -BindingInformation "*:80:myapp.domain.com"
# 修改应用程序池属性
Set-ItemProperty IIS:\AppPools\MyApp -name managedRuntimeVersion -value ""

二、中间件部署

2.1 Nginx(Windows 版)

Nginx 官方提供了 Windows 版本的二进制文件,解压即用。

  1. Nginx 官网 下载 Windows 版本(zip)。
  2. 解压到 C:\nginx(不要有空格路径)。
  3. 启动:进入 C:\nginx 目录,双击 nginx.exe 或在 cmd 下执行 start nginx
  4. 验证:浏览器访问 http://localhost,看到 Nginx 欢迎页。
  5. 常用管理命令(在该目录下):
    • 重载配置:nginx -s reload
    • 停止:nginx -s stop / nginx -s quit
  6. 注册为 Windows 服务(开机自启):
    • 下载 WinSW 或使用 nssm
    • 将 WinSW 的 exe 命名为 nginx-service.exe 放入 C:\nginx,并创建同名 .xml 配置文件。

nginx-service.xml 示例:

xml 复制代码
<service>
  <id>nginx</id>
  <name>Nginx</name>
  <description>Nginx Web Server</description>
  <executable>C:\nginx\nginx.exe</executable>
  <stopexecutable>C:\nginx\nginx.exe</stopexecutable>
  <stopargument>-s</stopargument>
  <stopargument>stop</stopargument>
  <startarguments>-g "daemon off;"</startarguments>
  <logpath>C:\nginx\logs</logpath>
</service>

然后以管理员权限在 C:\nginx 下运行 nginx-service.exe install 即可。

配置反向代理、静态文件、HTTPS 等,与 Linux 版本语法完全一致。

2.2 Tomcat(Java 应用服务器)

Tomcat 需要 JDK/JRE 环境。假设已安装 JDK 并配置了 JAVA_HOME(如 C:\Program Files\Java\jdk-11)。

  1. Tomcat 官网 下载 64-bit Windows zip
  2. 解压到 C:\tomcat
  3. 启动:进入 C:\tomcat\bin,双击 startup.bat(会弹出命令行窗口显示日志)。
    看到 "Server startup in xxx ms" 表示成功。
  4. 访问 http://localhost:8080 看到小猫页面。
  5. 注册为 Windows 服务:
    • 以管理员身份打开 cmd,进入 C:\tomcat\bin
    • 运行 service.bat install
    • 此时在"服务"中会出现 Apache Tomcat 9.0 Tomcat9,设置为"自动"即可开机自启。
    • 卸载服务:service.bat remove

部署 WAR 包 :只需将 yourapp.war 复制到 C:\tomcat\webapps 目录下,Tomcat 会自动解压部署。访问路径:http://IP:8080/yourapp/

与 IIS/Nginx 配合:通常会使用 Nginx 或 IIS 作为反向代理,将 80 端口的请求转发给 Tomcat 的 8080 端口。

2.3 MySQL / MariaDB(数据库)

方法一:使用 MSI 安装包(简单)
  1. MySQL 官网 下载 mysql-installer-community-8.x.x.msi
  2. 双击运行,选择"Server only"或"Developer Default"。
  3. 配置步骤:
    • 选择"Standalone MySQL Server"。
    • 认证方式:Windows 建议选择"Use Legacy Authentication Method"(兼容旧程序)。
    • 设置 root 密码。
    • 配置 Windows Service 名称(默认 MySQL80),勾选"Start the MySQL Server at System Startup"。
  4. 完成安装后,MySQL 作为服务自动启动,默认监听 3306 端口。
方法二:解压绿色版(无 GUI,适合脚本化)
  1. 下载 mysql-8.x.x-winx64.zip,解压到 C:\mysql

  2. C:\mysql 下创建 my.ini 配置文件(至少包含 basedirdatadir)。

  3. 初始化数据库(生成 data 目录):

    cmd 复制代码
    mysqld --initialize-insecure --console

    不加 --insecure 则会生成随机 root 密码。

  4. 安装服务并启动:

    cmd 复制代码
    mysqld --install MySQL80
    net start MySQL80
  5. 后续升级配置:修改 my.ini,重启服务即可。

2.4 Redis(缓存)

Redis 官方没有原生 Windows 版,但微软维护了 3.x 版本(已老旧),或使用第三方分支(如 tporadowski/redis),也可在 Windows Server 上通过 WSL2 或 Docker 运行 Linux 版 Redis。

使用第三方 Windows 版(推荐生产临时方案,长期建议容器化):

  1. 下载 tporadowski/redis releases.zip 文件(如 Redis-5.0.14.1.zip)。

  2. 解压到 C:\redis

  3. 启动:redis-server.exe

  4. 注册服务:

    cmd 复制代码
    redis-server.exe --service-install --service-name Redis6379 --port 6379
    redis-server.exe --service-start --service-name Redis6379
  5. 配置文件 redis.windows.conf 可修改端口、密码等。

生产最佳实践:在 Windows 上通过 Docker 运行 Linux 版 Redis,性能好且版本新。

powershell 复制代码
docker run -d --name redis -p 6379:6379 redis:7 --requirepass yourpassword

并将 Docker 设置为 Windows 服务方式自启动。

2.5 RabbitMQ / ActiveMQ 等消息队列

这类中间件通常有 Windows 安装包,可直接下载 .exe 安装。

以 RabbitMQ 为例:

  1. 安装 Erlang 运行时(依赖项)。
  2. 下载并运行 RabbitMQ 安装程序。
  3. 安装后服务自动启动,可通过 http://localhost:15672 管理界面访问(需先启用插件)。
  4. 在生产环境注意修改默认用户和密码。

三、软件部署

"软件"这里指开发给你的业务程序(Java jar、Python 脚本、Node.js 应用、普通 exe 等),你需要让它在服务器上稳定运行、开机自启。

3.1 把应用注册为 Windows 服务(推荐)

任何可执行程序都可以通过 WinSWnssm 变成 Windows 服务。

使用 WinSW(推荐)
  1. 下载 WinSW.exe,重命名为 myapp-service.exe,放到你的应用目录。
  2. 创建一个同名的 .xml 文件,例如 myapp-service.xml
xml 复制代码
<service>
  <id>MyApp</id>
  <name>My Application</name>
  <description>公司主业务服务</description>
  <executable>java</executable>
  <arguments>-jar C:\apps\myapp.jar --server.port=8080</arguments>
  <logpath>C:\apps\myapp\logs</logpath>
  <log mode="roll-by-size">
    <sizeThreshold>10240</sizeThreshold>
  </log>
  <onfailure action="restart" delay="10 sec"/>
</service>
  1. 以管理员身份运行命令提示符,进入该目录,执行:

    cmd 复制代码
    myapp-service.exe install
    net start MyApp

卸载服务:myapp-service.exe uninstall

使用 nssm
cmd 复制代码
nssm install MyApp "C:\apps\myapp\run.bat"
nssm set MyApp AppDirectory "C:\apps\myapp"
nssm set MyApp DisplayName "My Application"
nssm start MyApp

3.2 部署 Java 应用(jar 包)

  1. 确保 JDK 已安装,java -version 可用。
  2. app.jar 放到某目录,如 C:\apps\myapp\
  3. 手动运行测试:java -jar C:\apps\myapp\app.jar
  4. 按上节方法注册为 Windows 服务(推荐),或写一个 .bat 启动脚本放入"启动"文件夹(不推荐,无守护)。

3.3 部署 Python 应用

  1. 在服务器上安装 Python(可从官网下载安装包,勾选"Add to PATH")。
  2. 推荐使用虚拟环境,将项目依赖装入 venv
  3. 部署方式(以 Flask 为例):
    • 直接运行:python app.py
    • 生产环境应使用 waitressgunicorn(Windows 不支持 gunicorn,可用 waitress)。
  4. 用 WinSW 注册为服务,executable 设为 python.exearguments 为脚本路径。

3.4 部署 Node.js 应用

  1. 安装 Node.js LTS 版。
  2. 将项目复制到服务器,运行 npm install --production
  3. 测试:node server.js
  4. 同样用 WinSW 注册服务,executablenode.exearguments 为入口文件路径。

四、防火墙放行端口

Windows 防火墙默认阻止入站流量,部署中间件后必须放行对应端口。

4.1 图形界面放行(最快)

  1. 运行 wf.msc 打开"高级安全 Windows 防火墙"。
  2. 点击"入站规则" → "新建规则"。
  3. 规则类型:端口 → TCP → 特定本地端口(如 80,443,8080)。
  4. 允许连接 → 全选配置文件 → 命名并完成。

4.2 PowerShell 命令放行

powershell 复制代码
# 放行 80 端口
New-NetFirewallRule -DisplayName "HTTP 80" -Direction Inbound -Protocol TCP -LocalPort 80 -Action Allow
# 放行 8080 端口
New-NetFirewallRule -DisplayName "Tomcat 8080" -Direction Inbound -Protocol TCP -LocalPort 8080 -Action Allow
# 放行 MySQL(仅限内网 IP 访问)
New-NetFirewallRule -DisplayName "MySQL for DBA" -Direction Inbound -Protocol TCP -LocalPort 3306 -RemoteAddress 192.168.1.100 -Action Allow

注意:云服务器(阿里云、腾讯云、AWS)还需在云控制台的安全组中放行相同端口。


五、网页发布的高级场景

5.1 一个服务器跑多个网站(主机头绑定)

在 IIS 中,多个网站可以使用相同 IP 和端口,通过 主机名 区分。

  • 网站 A:绑定 www.siteA.com:80,物理路径 C:\siteA
  • 网站 B:绑定 www.siteB.com:80,物理路径 C:\siteB

DNS 需要将这两个域名都解析到服务器 IP。IIS 会根据客户端请求头的 Host 字段分发到对应网站。

5.2 反向代理配置(IIS + ARR 模块)

如果想把 /api 请求转发到 Tomcat(8080),需要安装 ARR(Application Request Routing)模块。

  1. 下载并安装 Microsoft Application Request Routing 3.0 和 URL Rewrite。
  2. 在 IIS 根级别(或网站级别)打开"URL 重写"。
  3. 添加入站规则 → 反向代理规则,输入后端服务器地址(如 127.0.0.1:8080)。
  4. 完成后,访问 IIS 的指定路径就会被转发到 Tomcat。

常用替代方案:直接使用 Nginx 做反向代理更简单,IIS 仅用于托管 .NET 应用。

5.3 启用 SSL/HTTPS

  1. 获取 SSL 证书(如从云厂商申请或使用 Let's Encrypt)。
  2. 在 IIS 中,选中网站 → 右侧"绑定" → 添加 → 类型选 https,IP 地址不变,端口 443,选择或导入证书。
  3. 若要强制 HTTP 跳转 HTTPS,可在 web.config 中配置重写规则,或使用 URL Rewrite 模块。

六、常用运维命令速查(PowerShell)

任务 命令
安装 IIS Install-WindowsFeature -Name Web-Server -IncludeManagementTools
新建 IIS 网站 New-IISSite -Name "MySite" -PhysicalPath "C:\web" -BindingInformation "*:80:"
查看端口监听 `netstat -ano
放行防火墙端口 New-NetFirewallRule -DisplayName "Allow 80" -Direction Inbound -Protocol TCP -LocalPort 80 -Action Allow
查看服务状态 Get-Service MySQL80
启动/停止服务 Start-Service MySQL80 / Stop-Service MySQL80
注册服务(WinSW) myapp-service.exe install
查看日志 IIS 日志:C:\inetpub\logs\LogFiles\;Tomcat:C:\tomcat\logs\;Nginx:C:\nginx\logs\
重启服务器 Restart-Computer -Force

七、总结与学习建议

Windows Server 的部署操作和 Linux 有相似逻辑,但实现方式不同。你需要重点掌握:

  1. IIS 的网站创建、应用程序池配置、URL 重写,这是 Windows 网页发布的核心。
  2. 用 WinSW / nssm 将任意程序注册为服务,实现开机自启、守护进程。
  3. 中间件(Nginx、Tomcat、MySQL)在 Windows 上的安装及服务化
  4. 防火墙入站规则的配置,确保服务可被访问且安全。
  5. 多平台思维:许多开源中间件(Nginx、Tomcat、MySQL)在 Windows 上的配置与 Linux 几乎相同,只是安装方式不同(解压或 MSI)。

建议你动手搭一套完整的测试环境:

Windows Server + IIS 托管一个静态网站 + Nginx 反向代理到 Tomcat 上部署的 Java 应用 + MySQL/Redis 后端,最后配好防火墙并验证外网可访问。这能覆盖你日常 80% 的部署任务。

遇到具体报错,随时查看日志(事件查看器、IIS 日志、中间件日志),通常都能找到原因。加油!