在阿里云 ECS 上部署 .NET 网站,核心在于确定你的 .NET 版本以及运行环境类型。目前 .NET 生态主要分为两种主流场景:
- ASP.NET Core (.NET 5/6/7/8):跨平台、高性能、推荐方案。
- 传统 ASP.NET (.NET Framework 4.x):仅支持 Windows Server,依赖 IIS。
下面我将分别针对这两种情况,给出最标准、生产级可用的部署流程。
一、前置准备(通用)
1. 创建 ECS 实例
- 地域选择:靠近用户群体(如华东上海、华北北京)。
- 实例规格:根据并发量选择,建议至少 2 vCPU + 4GB 内存起步。
- 操作系统镜像:
- 若用 ASP.NET Core → 选 Ubuntu 20.04/22.04 LTS 或 CentOS Stream 8/9 或 Alibaba Cloud Linux 3。
- 若用传统 ASP.NET → 选 Windows Server 2019/2022。
- 安全组规则:必须开放端口
80(HTTP)、443(HTTPS),若远程管理还需开放22(Linux)或3389(Windows)。
2. 域名与解析
- 购买域名并完成工信部备案(中国大陆地区强制要求)。
- 将域名 CNAME 或 A 记录指向 ECS 公网 IP。
二、方案 A:部署 ASP.NET Core 网站(推荐)
这是当前主流做法,无需 IIS,通过 Kestrel 反向X_X部署,性能更好。
步骤 1:安装 .NET SDK/Runtime
以 Ubuntu 22.04 为例:
# 导入微软密钥和源
wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
# 安装 .NET 8 SDK(包含运行时)
sudo apt update
sudo apt install dotnet-sdk-8.0
注:若只需运行网站,可只安装
dotnet-runtime-8.0;开发调试建议装 SDK。
步骤 2:上传并发布项目
- 本地使用
dotnet publish -c Release发布到文件夹。 - 使用 SCP 或 SFTP 将发布文件上传至 ECS,例如
/var/www/myapp。
scp -r ./publish/* root@<ECS_IP>:/var/www/myapp/
步骤 3:配置 Nginx 作为反向X_X
Nginx 负责处理静态资源、SSL 终止,并将请求转发给 Kestrel。
安装 Nginx:
sudo apt install nginx
编辑 Nginx 站点配置(假设域名为 www.example.com):
server {
listen 80;
server_name www.example.com;
location / {
proxy_pass http://localhost:5000; # Kestrel 默认监听端口
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;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
重启 Nginx:
sudo systemctl restart nginx
步骤 4:使用 Systemd 托管 Kestrel 进程
创建服务文件 /etc/systemd/system/myapp.service:
[Unit]
Description=My .NET App on Ubuntu
[Service]
WorkingDirectory=/var/www/myapp
ExecStart=/usr/bin/dotnet /var/www/myapp/myapp.dll
Restart=always
RestartSec=10
SyslogIdentifier=myapp
User=root # 生产环境建议创建专用用户
[Install]
WantedBy=multi-user.target
启用并启动服务:
sudo systemctl enable myapp
sudo systemctl start myapp
sudo systemctl status myapp
步骤 5:配置 HTTPS(Let’s Encrypt)
使用 Certbot 自动申请 SSL 证书:
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d www.example.com
Certbot 会自动修改 Nginx 配置并重定向 HTTP 到 HTTPS。
三、方案 B:部署传统 ASP.NET (.NET Framework)
此方案仅限 Windows Server,依赖 IIS。
步骤 1:连接服务器
使用 RDP 登录 Windows ECS。
步骤 2:安装必要组件
- 打开“服务器管理器” → “添加角色和功能”。
- 安装 IIS Web 服务器。
- 安装对应版本的 .NET Framework(如 4.8)。
- 若需 API 调用,可能还需安装 Web Platform Installer 中的 ASP.NET 扩展。
步骤 3:发布网站
- 在 Visual Studio 中右键项目 → “发布” → 选择“文件系统”。
- 将发布后的文件夹复制到 ECS 某个路径,如
D:inetpubwwwrootmyapp。
步骤 4:在 IIS 中配置站点
- 打开“IIS 管理器”。
- 右键“网站” → “添加网站”。
- 设置站点名称、物理路径(指向发布目录)、绑定(IP:80 或 443 + 域名)。
- 确保应用程序池的“.NET CLR 版本”设置为对应版本(如“无托管代码”用于 .NET 4.x,“集成管道模式”)。
步骤 5:配置防火墙与安全组
- Windows 防火墙需允许 IIS 端口(80/443)。
- 阿里云安全组已提前开放 80/443。
步骤 6:配置 HTTPS(可选但推荐)
- 购买或自签 SSL 证书。
- 在 IIS 中导入证书,并在站点绑定中启用 HTTPS。
四、高级优化建议(生产环境必备)
1. 数据库分离
- 不要将 SQL Server/MySQL 安装在同一台 ECS 上。
- 使用阿里云 RDS(关系型数据库服务)或 PolarDB,更安全、易维护、支持备份。
2. 静态资源 CDN
- 将图片、CSS、JS 等静态文件上传至 OSS(对象存储)。
- 启用 CDN 提速,降低 ECS 带宽压力。
3. 日志监控
- 使用 SLS(日志服务)收集应用日志,便于排查问题。
- 开启 云监控,设置 CPU、内存、磁盘告警。
4. 自动化部署(CI/CD)
- 使用 GitLab CI/CD 或 GitHub Actions。
- 结合 Alibaba Cloud CLI 或 SSH 脚本 实现自动发布。
- 示例 GitHub Actions 片段:
jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Publish run: dotnet publish -c Release - name: Deploy via SSH uses: appleboy/ssh-action@master with: host: ${{ secrets.ECS_HOST }} username: root key: ${{ secrets.SSH_KEY }} script: | cd /var/www/myapp rm -rf * cp -r $GITHUB_WORKSPACE/publish/* . systemctl restart myapp
5. 高可用架构(进阶)
- 多台 ECS 组成 SLB(负载均衡)后端。
- 使用 Auto Scaling 根据流量自动扩缩容。
- 前端接入 WAF(Web 应用防火墙)防御 CC 攻击。
五、常见问题排查
| 问题 | 可能原因 | 解决方案 |
|---|---|---|
| 访问返回 502 Bad Gateway | Kestrel 未启动或端口不对 | 检查 systemctl status myapp,确认 Nginx proxy_pass 端口正确 |
| 页面空白或报错 | 缺少依赖库或权限不足 | 检查发布目录是否有执行权限,查看 Nginx error.log |
| HTTPS 不生效 | 证书未正确加载或未重定向 | 检查 Certbot 配置,确保 Nginx 监听 443 |
| 数据库连接超时 | 网络不通或白名单未加 | 检查 RDS 白名单是否包含 ECS 私网 IP,测试连通性 |
总结
- 新项目首选 ASP.NET Core + Ubuntu + Nginx + Systemd,轻量高效。
- 老项目迁移才考虑 Windows + IIS,注意 .NET Framework 已进入维护期。
- 生产环境务必分离数据库、使用 CDN、配置 HTTPS、做好监控。
按照上述步骤操作,即可在阿里云 ECS 上稳定部署 .NET 网站。如有具体错误日志,可提供进一步诊断。
CLOUD云枢