阿里云ECS云服务器如何部署.net网站?

在阿里云 ECS 上部署 .NET 网站,核心在于确定你的 .NET 版本以及运行环境类型。目前 .NET 生态主要分为两种主流场景:

  1. ASP.NET Core (.NET 5/6/7/8):跨平台、高性能、推荐方案。
  2. 传统 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 中配置站点

  1. 打开“IIS 管理器”。
  2. 右键“网站” → “添加网站”。
  3. 设置站点名称、物理路径(指向发布目录)、绑定(IP:80 或 443 + 域名)。
  4. 确保应用程序池的“.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云枢 » 阿里云ECS云服务器如何部署.net网站?