C# 调试与部署:VPS、Docker 还是 Cloud——该如何选择?

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

为什么部署 C# 并不可怕,反而好处多多



想象一下:您编写了一个很棒的 C# 应用程序——无论是基于 .NET 8 的 Telegram 机器人、电商网站的 Web API,还是用于处理支付的微服务。代码已调试完毕,测试通过,本地运行飞快。只剩下最后一步——将其发布到互联网上,让真实用户使用。



而这时,最有趣的部分开始了。部署到哪里?VPS、Docker 容器,还是直接上云?每种方案都有其优点、缺点和潜在陷阱。在本文中,我们将通过真实的 C# 代码示例来剖析这三种方法,帮助您做出明智的决策。



方案 1:VPS——适合喜欢掌控一切的经典之选



虚拟专用服务器 (VPS) 就像在“数字之家”租了一间公寓。您拥有 root 访问权限,可以自行安装操作系统、配置防火墙、安装 .NET Runtime。对于希望完全控制或有特殊需求的人来说,这是理想之选。



如何在 VPS 上部署 C#:分步指南



假设您有一个 ASP.NET Core Web API。以下是基本操作步骤:



  1. 通过 SSH 连接到服务器(Ubuntu 22.04)。
  2. 安装 .NET Runtime:


wget https://dotnet.microsoft.com/download/dotnet/scripts/v1/dotnet-install.shchmod +x dotnet-install.sh./dotnet-install.sh --channel 8.0export PATH="$HOME/.dotnet:$PATH"


以 Release 模式构建应用程序,并通过 SCP 或 Rsync 将文件复制到服务器:



dotnet publish -c Release -o ./publishscp -r ./publish/* user@your-server:/var/www/myapp/


将应用程序作为 systemd 服务运行,以便在崩溃后自动重启:



[Unit]Description=My C# App

[Service]WorkingDirectory=/var/www/myappExecStart=/home/user/.dotnet/dotnet /var/www/myapp/MyApp.dllRestart=alwaysRestartSec=10

[Install]WantedBy=multi-user.target


VPS 优点:完全控制、价格低廉(每月低至 5 美元)、可以运行任何系统——无论是 Windows 还是 Linux。



VPS 缺点:您需要自行负责安全、更新和备份。如果应用程序在凌晨 3 点崩溃——您得自己起来处理。



方案 2:Docker——为懒惰的完美主义者准备的容器化方案



Docker 是一种将您的 C# 应用程序及其所有依赖项打包到轻量级容器中的方法。“在我机器上能运行”变成了“在任何地方都能运行”。



.NET 8 的 Dockerfile



在项目根目录下创建一个 Dockerfile 文件:



FROM mcr.microsoft.com/dotnet/sdk:8.0 AS buildWORKDIR /appCOPY *.csproj .RUN dotnet restoreCOPY . .RUN dotnet publish -c Release -o out

FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS runtimeWORKDIR /appCOPY --from=build /app/out .ENV ASPNETCORE_URLS=http://+:80EXPOSE 80ENTRYPOINT ["dotnet", "MyApp.dll"]


构建并运行:



docker build -t my-csharp-app .docker run -d -p 8080:80 --name myapp my-csharp-app


现在,您的应用程序可以通过 http://localhost:8080 访问。如果需要多个服务(数据库 + API + 前端),请使用 Docker Compose:



version: '3.8'services:  api:    build: .    ports:      - "5000:80"    depends_on:      - db  db:    image: postgres:15    environment:      POSTGRES_PASSWORD: example


Docker 优点:隔离性、可重现性、易于扩展(只需再启动 5 个容器)、环境一致性。



Docker 缺点:需要了解 Docker 网络和卷,对于简单的应用程序来说可能有些大材小用。



方案 3:Cloud——将基础设施交给专业人士管理



云平台(Microsoft Azure、AWS、Google Cloud,以及俄罗斯本土的 Yandex Cloud、VK Cloud)负责管理服务器、负载均衡、

博客

书籍推荐