在VPS上部署C#应用程序:高级水平

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

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

开始课程

在VPS上高级部署C# (.NET) 应用程序:分步指南



在VPS上部署C#应用程序不仅仅是把文件复制到服务器上。对于生产环境,需要进行全面的配置:从反向代理配置到部署自动化。在本文中,我们将介绍经验丰富的开发人员使用的高级部署技术。您将学习如何配置Nginx、连接HTTPS、实施CI/CD和监控。



1. 服务器准备和安装 .NET Runtime



在开始部署之前,请确保您的VPS运行的是Ubuntu 22.04或更高版本。通过SSH连接并执行基本配置。



# 更新系统sudo apt update && sudo apt upgrade -y

# 安装 .NET SDK(用于构建)和 Runtime(用于运行)wget https://dot.net/v1/dotnet-install.sh -O dotnet-install.shchmod +x dotnet-install.shsudo ./dotnet-install.sh --channel 8.0 --install-dir /usr/share/dotnetsudo ln -s /usr/share/dotnet/dotnet /usr/local/bin/dotnet

# 检查安装dotnet --list-runtimes


对于生产环境,建议仅使用Runtime,以减小镜像大小。SDK仅在构建机器上需要(例如,在CI/CD中)。



2. 针对生产环境优化应用程序



在部署之前,配置应用程序以在生产环境中运行。这包括Kestrel配置、日志记录和错误处理。



2.1. 配置 Program.cs



在 Program.cs 文件中,指定显式端口并启用HTTPS重定向(如果使用反向代理)。



var builder = WebApplication.CreateBuilder(args);

// 配置Kestrel以通过反向代理工作builder.WebHost.ConfigureKestrel(options =>{ options.Listen(IPAddress.Any, 5000); // Nginx的HTTP端口});

// 添加服务builder.Services.AddControllersWithViews();builder.Services.AddHealthChecks();

var app = builder.Build();

// 生产环境的中间件if (!app.Environment.IsDevelopment()){ app.UseExceptionHandler("/Home/Error"); app.UseHsts();}

app.UseStaticFiles();app.UseRouting();app.UseAuthorization();

app.MapHealthChecks("/health");app.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}");

app.Run();


2.2. 构建和发布



将应用程序构建为自包含(self-contained),以不依赖于服务器上安装的Runtime。



dotnet publish -c Release -r linux-x64 --self-contained true -o ./publish


此命令将创建一个包含所有必要文件的 publish 文件夹。使用 scp 或 rsync 将其传输到服务器。



3. 配置Nginx作为反向代理



Nginx将接收传入请求并将其转发到您的C#应用程序。这提高了性能和安全性。



3.1. 安装和基本配置



sudo apt install nginx -ysudo systemctl start nginxsudo systemctl enable nginx


为您的应用程序创建配置文件:



sudo nano /etc/nginx/sites-available/myapp


粘贴以下代码:



server {    listen 80;    server_name your-domain.com www.your-domain.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; }

location /health { access_log off; return 200 "Healthy"; add_header Content-Type text/plain; }}


激活站点并重启Nginx:



<

博客

书籍推荐