.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 自动化、多环境部署
相关推荐
uzong14 分钟前
最新:阿里正式发布首款AI开发工具Meoo(秒悟),0门槛、一键部署上线
人工智能·后端
用户83562907805117 分钟前
Python 操作 PowerPoint:添加与设置文本框完整教程
后端·python
HuaidongLi18 分钟前
三级缓存与循环依赖
后端
tongxh42325 分钟前
Spring Boot 3.X:Unable to connect to Redis错误记录
spring boot·redis·后端
回家路上绕了弯25 分钟前
Claude Superpower 全攻略:解锁 AI 自动开发模式,告别盲目编码
后端
kree1 小时前
Flowable 深度解析:现代企业级工作流引擎的核心与实践
后端
NCIN EXPE1 小时前
SpringBoot Test详解
spring boot·后端·log4j
2601_949194261 小时前
springboot之集成Elasticsearch
spring boot·后端·elasticsearch
splage2 小时前
Spring Cloud Data Flow 简介
后端·spring·spring cloud
woniu_maggie2 小时前
SAP RESTful 接口服务发布教程
后端