在阿里云 ECS 上部署 .NET 网站,主要取决于你使用的 .NET 版本。目前主流分为两种情况:
- ASP.NET Core (.NET 5/6/7/8):跨平台,可部署在 Linux(推荐)或 Windows。
- 传统 ASP.NET (.NET Framework 4.x):仅支持 Windows Server。
下面我将分别介绍这两种场景的部署步骤,并重点推荐 Linux + ASP.NET Core 方案(性能更好、成本更低)。
✅ 推荐方案:ASP.NET Core + Linux (Ubuntu/CentOS)
📌 前提条件
- 已创建阿里云 ECS 实例(建议 Ubuntu 20.04/22.04 或 CentOS 7/8)
- 已安装 .NET SDK/Runtime(服务器只需 Runtime)
- 网站代码已发布为“自包含”或“框架依赖”模式
🔧 步骤一:登录 ECS 并更新系统
ssh root@<你的ECS公网IP>
sudo apt update && sudo apt upgrade -y # Ubuntu
# 或
sudo yum update -y # CentOS
🔧 步骤二:安装 .NET Runtime
以 .NET 8 为例(根据实际项目版本调整):
# 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
sudo apt-get update
sudo apt-get install -y dotnet-runtime-8.0 aspnetcore-runtime-8.0
# CentOS 7/8
sudo rpm -Uvh https://packages.microsoft.com/config/rhel/8/packages-microsoft-prod.rpm
sudo yum install -y dotnet-runtime-8.0 aspnetcore-runtime-8.0
验证安装:
dotnet --version
🔧 步骤三:上传并发布网站
方法1:使用 VS Code / Visual Studio 发布到本地文件夹,再上传到 ECS
在本地项目中执行:
dotnet publish -c Release -o ./publish
然后通过 scp 或 rsync 上传到 ECS:
scp -r ./publish/* root@<ECS_IP>:/var/www/myapp
方法2:直接在 ECS 上使用 Git 拉取代码并编译(适合 CI/CD)
sudo mkdir -p /var/www/myapp
cd /var/www/myapp
git clone https://github.com/your-repo.git .
dotnet build
dotnet publish -c Release -o ./publish
🔧 步骤四:创建 Systemd 服务守护进程
为了让网站后台运行并自动重启,创建 systemd 服务文件:
sudo nano /etc/systemd/system/myapp.service
内容如下(请替换路径和用户名):
[Unit]
Description=My .NET Web App
After=network.target
[Service]
WorkingDirectory=/var/www/myapp/publish
ExecStart=/usr/bin/dotnet /var/www/myapp/publish/MyApp.dll
Restart=always
RestartSec=10
SyslogIdentifier=myapp
User=root
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
[Install]
WantedBy=multi-user.target
启用并启动服务:
sudo systemctl daemon-reload
sudo systemctl enable myapp
sudo systemctl start myapp
sudo systemctl status myapp
查看日志:
sudo journalctl -u myapp -f
🔧 步骤五:配置反向X_X(Nginx)
安装 Nginx:
sudo apt install nginx # Ubuntu
# 或
sudo yum install nginx # CentOS
创建站点配置:
sudo nano /etc/nginx/sites-available/myapp
内容:
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
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;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
启用站点:
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx
⚠️ 注意:ASP.NET Core 默认监听端口是
5000(Kestrel),需确保防火墙开放 80 和 443 端口。
🔧 步骤六:配置安全组与域名
- 阿里云控制台 → 安全组:添加入方向规则,允许
TCP 80和TCP 443。 - 绑定域名:在 DNS 管理中将域名解析到 ECS 公网 IP。
- HTTPS(可选但推荐):使用 Let’s Encrypt 免费证书:
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d yourdomain.com
❌ 替代方案:传统 ASP.NET (.NET Framework) + Windows Server
如果你使用的是 .NET Framework 4.6+,则必须使用 Windows Server:
步骤简述:
- 选择 Windows Server 镜像(如 Windows Server 2019 Datacenter)。
- 通过 RDP 远程桌面登录。
- 安装 IIS 和 .NET Framework Hosting Bundle。
- 将网站文件复制到
C:inetpubwwwrootmyapp。 - 在 IIS 管理器中创建站点,指向该目录。
- 配置应用程序池为
.NET CLR Version: No Managed Code。 - 开放防火墙端口 80/443。
- 绑定域名。
💡 缺点:Windows Server 授权成本高,资源占用大,不推荐用于新项目。
🔄 进阶:使用 Docker 部署(更灵活)
Dockerfile 示例:
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
WORKDIR /app
EXPOSE 80
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src
COPY ["MyApp.csproj", "./"]
RUN dotnet restore
COPY . .
RUN dotnet publish -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=build /app/publish .
ENTRYPOINT ["dotnet", "MyApp.dll"]
构建并运行:
docker build -t myapp .
docker run -d -p 80:80 --name myapp-container myapp
再用 Nginx 反向X_X即可。
✅ 总结对比
| 项目 | ASP.NET Core + Linux | ASP.NET Framework + Windows |
|---|---|---|
| 操作系统 | Ubuntu/CentOS | Windows Server |
| 性能 | 高,轻量 | 较低,较重 |
| 成本 | 低(Linux 实例便宜) | 高(Windows 授权费) |
| 部署复杂度 | 中等(需配置 systemd/Nginx) | 简单(IIS 图形化) |
| 适用场景 | 新项目、微服务、云原生 | 遗留系统、内部工具 |
🛡️ 安全建议
- 禁用 SSH 密码登录,改用密钥认证。
- 定期更新系统和 .NET Runtime。
- 使用阿里云 Security Center 进行漏洞扫描。
- 数据库连接字符串等敏感信息不要硬编码,使用环境变量或密钥管理服务。
如需我为你生成具体的 Dockerfile、systemd 文件或 Nginx 配置模板,请告诉我你的 .NET 版本和项目结构!
轻量云Cloud