.NET Core 部署上线完整教程(Windows IIS / Linux / Docker)

.NET Core 应用主流部署方式有 Windows IISLinux 直接部署Docker 容器化,以下是从发布到上线的全流程实战教程,覆盖生产环境常用配置与避坑要点。

一、发布应用(所有部署方式通用)

1. 发布命令(推荐)

在项目根目录执行,生成可部署的 publish 文件夹:

bash 复制代码
# 框架依赖发布(轻量,服务器需安装对应.NET Runtime)
dotnet publish -c Release -r [运行时] --self-contained false -o ./publish

# 自包含发布(无需服务器装Runtime,体积大)
dotnet publish -c Release -r [运行时] --self-contained true -o ./publish
  • 运行时:Windows 用 win-x64,Linux 用 linux-x64
  • 示例(Windows 框架依赖):dotnet publish -c Release -r win-x64 --self-contained false -o ./publish

2. Visual Studio 可视化发布

  1. 右键项目 → 选择 发布
  2. 目标选 文件夹 → 配置发布路径(如 bin/Release/net8.0/publish
  3. 点击 发布,生成部署文件包

二、部署到 Windows IIS(最常用)

1. 服务器环境准备

(1)安装 IIS

  • 控制面板 → 程序 → 启用或关闭 Windows 功能
  • 勾选 Internet Information Services ,展开并勾选:
    • Web 管理工具 → IIS 管理控制台
    • 万维网服务 → 应用程序开发功能 → ASP.NET Core 模块(后续安装托管包自动补全)

(2)安装 .NET Core 托管捆绑包(必装)

  • 下载对应版本:.NET 托管捆绑包(选 Hosting Bundle)
  • 安装后重启 IIS:命令行执行 iisresetnet stop was /y && net start w3svc

2. IIS 配置(核心)

(1)创建应用程序池

  1. 打开 IIS 管理器 → 应用程序池 → 右键 添加应用程序池
  2. 名称自定义(如 NetCorePool
  3. .NET CLR 版本无托管代码(关键!Core 应用不依赖 CLR)
  4. 托管管道模式集成
  5. 高级设置:启动模式 → 始终运行,闲置超时 → 0(避免冷启动)

(2)创建网站

  1. 右键 站点添加网站
  2. 网站名称:自定义(如 NetCoreWeb
  3. 物理路径:指向发布的 publish 文件夹
  4. 绑定:IP/端口/主机名(如 http:*:80
  5. 应用程序池:选择刚创建的 NetCorePool
  6. 确定后,右键网站 → 管理网站启动

3. 常见问题排查

  • 500 错误:检查应用池权限(给 publish 文件夹添加 IIS_IUSRS 读写权限)
  • 404 错误:确认物理路径指向 publish 而非项目根目录,检查端口占用
  • 模块缺失:重新安装托管捆绑包并重启 IIS

三、部署到 Linux(Ubuntu/CentOS)

1. 服务器环境准备

(1)安装 .NET Runtime

bash 复制代码
# Ubuntu
sudo apt-get update && sudo apt-get install -y aspnetcore-runtime-8.0

# CentOS
sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
sudo yum install -y aspnetcore-runtime-8.0

(2)上传发布文件

bash 复制代码
# 本地执行,将 publish 文件夹上传到服务器
scp -r ./publish root@服务器IP:/var/www/NetCoreApp

2. 启动与守护(生产必备)

(1)直接启动(测试)

bash 复制代码
cd /var/www/NetCoreApp
dotnet 你的项目名.dll --urls http://0.0.0.0:5000
# 访问:http://服务器IP:5000

(2)配置 systemd 服务(后台守护,推荐)

  1. 创建服务文件:sudo vim /etc/systemd/system/netcoreapp.service
  2. 写入配置:
ini 复制代码
[Unit]
Description=.NET Core Web App
After=network.target

[Service]
WorkingDirectory=/var/www/NetCoreApp
ExecStart=/usr/bin/dotnet /var/www/NetCoreApp/你的项目名.dll
Restart=always
RestartSec=5
User=www-data
Environment=ASPNETCORE_ENVIRONMENT=Production

[Install]
WantedBy=multi-user.target
  1. 启动服务并设置开机自启:
bash 复制代码
sudo systemctl daemon-reload
sudo systemctl start netcoreapp
sudo systemctl enable netcoreapp
# 查看状态:sudo systemctl status netcoreapp

(3)Nginx 反向代理(生产标配)

  1. 安装 Nginx:sudo apt-get install nginx
  2. 配置站点:sudo vim /etc/nginx/sites-available/netcoreapp
nginx 复制代码
server {
    listen 80;
    server_name 你的域名;
    location / {
        proxy_pass http://localhost:5000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection keep-alive;
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}
  1. 启用配置并重启 Nginx:
bash 复制代码
sudo ln -s /etc/nginx/sites-available/netcoreapp /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl restart nginx

四、Docker 容器化部署(跨平台,环境一致)

1. 编写 Dockerfile(项目根目录)

dockerfile 复制代码
# 构建阶段
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src
COPY . .
RUN dotnet restore
RUN dotnet publish -c Release -o /app/publish

# 运行阶段(轻量镜像)
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
WORKDIR /app
COPY --from=build /app/publish .
EXPOSE 80
ENTRYPOINT ["dotnet", "你的项目名.dll"]

2. 构建与运行

bash 复制代码
# 构建镜像(末尾. 表示当前目录)
docker build -t netcoreapp:1.0 .

# 运行容器(端口映射:主机8080→容器80)
docker run -d -p 8080:80 --name netcore-container netcoreapp:1.0

# 访问:http://服务器IP:8080

3. Docker Compose 部署(多服务推荐)

创建 docker-compose.yml

yaml 复制代码
version: '3.8'
services:
  netcoreapp:
    build: .
    ports:
      - "8080:80"
    restart: always

启动:docker-compose up -d


五、生产环境关键配置

  1. 环境变量 :设置 ASPNETCORE_ENVIRONMENT=Production,关闭开发模式敏感信息
  2. 日志:配置 Serilog/NLog,输出到文件/ELK,便于排查问题
  3. HTTPS:IIS 绑定 SSL 证书,Linux 用 Let's Encrypt 配置 Nginx HTTPS
  4. 防火墙:开放对应端口(80/443/5000),禁止未授权访问
  5. 监控:集成 Prometheus+Grafana 监控应用性能与健康状态

六、部署方式对比

部署方式 优点 缺点 适用场景
Windows IIS 配置简单、Windows 生态兼容 仅 Windows、扩展性一般 传统 Windows 服务器、企业内网应用
Linux 直接部署 性能高、资源占用低 环境配置繁琐、依赖管理复杂 高性能 Web API、微服务
Docker 环境一致、跨平台、易迁移 学习成本略高、镜像管理 云原生、CI/CD 自动化、多环境部署
相关推荐
共享家95272 小时前
实现简化的高性能并发内存池
开发语言·数据结构·c++·后端
黄昏恋慕黎明2 小时前
spring的IOC与DI
java·后端·spring
用户608186527902 小时前
WPF 命令 ICommand 从原理到实战
后端
liuqun03192 小时前
go进阶之gc
开发语言·后端·golang
李小狼lee2 小时前
以一个简单案例来讲解RAG
后端
程序员清风2 小时前
OpenAI创始人学AI的底层逻辑,普通人照着做就能上手!
java·后端·面试
元俭2 小时前
【Eino 框架入门】用 JSONL 实现会话持久化
后端
Memory_荒年2 小时前
Netty面试终极指南:从“Hello World”到源码深处
java·后端
0xDevNull2 小时前
Java IO流教程:从入门到最佳实践
java·后端