Bereitstellung einer C#-Anwendung auf einem VPS: Fortgeschrittenes Niveau

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Fortgeschrittene Bereitstellung einer C# (.NET)-Anwendung auf einem VPS: Schritt-für-Schritt-Anleitung



Die Bereitstellung einer C#-Anwendung auf einem VPS ist mehr als nur das Kopieren von Dateien auf den Server. Für eine Produktionsumgebung ist eine umfassende Konfiguration erforderlich: von der Einrichtung eines Reverse Proxy bis zur Automatisierung der Bereitstellung. In diesem Artikel behandeln wir fortgeschrittene Bereitstellungstechniken, die erfahrene Entwickler verwenden. Sie lernen, wie Sie Nginx konfigurieren, HTTPS einrichten, CI/CD und Monitoring implementieren.



1. Servervorbereitung und Installation der .NET-Runtime



Stellen Sie vor Beginn der Bereitstellung sicher, dass Ihr VPS mit Ubuntu 22.04 oder neuer läuft. Verbinden Sie sich per SSH und führen Sie die grundlegende Einrichtung durch.



# Systemaktualisierungsudo apt update && sudo apt upgrade -y

# Installation des .NET SDK (für Builds) und der Runtime (für Ausführung)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

# Überprüfung der Installationdotnet --list-runtimes


Für die Produktion wird empfohlen, nur die Runtime zu verwenden, um die Image-Größe zu reduzieren. Das SDK wird nur auf dem Build-Rechner (z. B. in CI/CD) benötigt.



2. Optimierung der Anwendung für die Produktion



Konfigurieren Sie die Anwendung vor der Bereitstellung für die Produktionsumgebung. Dies umfasst die Konfiguration von Kestrel, Logging und Fehlerbehandlung.



2.1. Konfiguration von Program.cs



Geben Sie in der Datei Program.cs einen expliziten Port an und aktivieren Sie die HTTPS-Weiterleitung (falls Sie einen Reverse Proxy verwenden).



var builder = WebApplication.CreateBuilder(args);

// Kestrel-Konfiguration für den Betrieb über Reverse Proxybuilder.WebHost.ConfigureKestrel(options =>{ options.Listen(IPAddress.Any, 5000); // HTTP-Port für Nginx});

// Hinzufügen von Dienstenbuilder.Services.AddControllersWithViews();builder.Services.AddHealthChecks();

var app = builder.Build();

// Middleware für die Produktionif (!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. Build und Veröffentlichung



Erstellen Sie die Anwendung als self-contained, um nicht von der auf dem Server installierten Runtime abhängig zu sein.



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


Dieser Befehl erstellt einen Ordner publish mit allen erforderlichen Dateien. Übertragen Sie diesen Ordner mit scp oder rsync auf den Server.



3. Einrichtung von Nginx als Reverse Proxy



Nginx wird eingehende Anfragen entgegennehmen und an Ihre C#-Anwendung weiterleiten. Dies verbessert Leistung und Sicherheit.



3.1. Installation und Basiskonfiguration



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


Erstellen Sie eine Konfigurationsdatei für Ihre Anwendung:



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


Fügen Sie den folgenden Code ein:



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; }}


Aktivieren Sie die Website und starten Sie Nginx neu:

<

Blogs

Buchempfehlungen