Einleitung: Warum ist ein VPS die ideale Lösung für C#-Anwendungen?
Die Entwicklung mit C# und der .NET-Plattform ist längst nicht mehr nur Windows-Servern vorbehalten. Mit der Veröffentlichung von .NET Core (und jetzt .NET 5/6/7/8) haben Entwickler die Möglichkeit, ihre Anwendungen unter Linux auszuführen, was den Zugang zu kostengünstigen und leistungsstarken VPS-Servern eröffnet hat. Die Bereitstellung einer C#-Anwendung auf einem VPS spart nicht nur Budget, sondern bietet auch die vollständige Kontrolle über die Infrastruktur: von der Wahl des Betriebssystems bis zur Sicherheitskonfiguration.
In dieser Anleitung gehen wir den gesamten Zyklus der Bereitstellung einer ASP.NET Core-Anwendung auf einem entfernten Server durch. Sie erfahren, wie Sie den Server vorbereiten, den Reverse-Proxy-Server Nginx konfigurieren, die Anwendung über Kestrel starten und sie mit einem SSL-Zertifikat schützen. Alle Schritte werden mit Codebeispielen und Konsolenbefehlen begleitet.
1. Servervorbereitung und Installation der .NET-Runtime
Wahl des Betriebssystems und SSH-Verbindung
Für die Bereitstellung einer C#-Anwendung auf einem VPS wird die Verwendung der Distribution Ubuntu 22.04 LTS oder Debian 11 empfohlen. Nach der Anmietung des Servers verbinden Sie sich per SSH mit ihm:
ssh root@Ihre_Server_IPAktualisieren Sie den Paketmanager und installieren Sie die erforderlichen Dienstprogramme:
apt update && apt upgrade -yapt install curl wget git -yInstallation des .NET SDK oder der Runtime
Zum Ausführen einer fertigen Anwendung reicht die Installation der ASP.NET Core-Runtime. Wenn Sie den Code direkt auf dem Server kompilieren möchten, installieren Sie das SDK. Fügen wir das Microsoft-Repository hinzu und installieren .NET 8:
wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.debdpkg -i packages-microsoft-prod.debapt updateapt install aspnetcore-runtime-8.0 -yÜberprüfen Sie die Installation:
dotnet --list-runtimesDie Ausgabe sollte eine Zeile mit der Version ASP.NET Core 8.0.x enthalten.
2. Vorbereitung und Veröffentlichung der Anwendung
Projektkonfiguration für die Produktion
Öffnen Sie in Ihrem ASP.NET Core-Projekt die Datei Program.cs und stellen Sie sicher, dass die Anwendung auf die richtige URL hört. Für den Betrieb über Kestrel legen wir Port 5000 fest:
var builder = WebApplication.CreateBuilder(args);builder.WebHost.UseUrls("http://0.0.0.0:5000");var app = builder.Build();app.MapGet("/", () => "Hallo vom VPS!");app.Run();Fügen Sie außerdem in appsettings.json einen Abschnitt für Logs und Datenbankverbindungszeichenfolgen hinzu, falls diese verwendet werden.
Veröffentlichung der Anwendung (Self-contained oder Framework-dependent)
Wählen Sie die Veröffentlichungsmethode. Self-contained enthält alle Abhängigkeiten, was praktisch ist, wenn auf dem Server keine .NET-Runtime installiert ist. Framework-dependent erfordert eine installierte Runtime. Führen Sie den Befehl im Projektordner aus:
dotnet publish -c Release -o ./publishNach Abschluss erscheinen alle erforderlichen Dateien im Ordner publish. Archivieren Sie diese:
tar -czf app.tar.gz ./publishHochladen auf den Server
Verwenden Sie SCP oder SFTP, um das Archiv zu übertragen. Beispiel über SCP (wird vom lokalen Rechner aus ausgeführt):
scp app.tar.gz root@Ihre_IP:/var/www/myapp/Entpacken Sie das Archiv auf dem Server:
mkdir -p /var/www/myapptar -xzf /var/www/myapp/app.tar.gz -C /var/www/myapp/3. Konfiguration von Kestrel und Erstellung eines systemd-Dienstes
Starten der Anwendung über Kestrel
Kestrel ist der integrierte Webserver von ASP.NET Core. Führen Sie für einen Teststart Folgendes aus:
cd /var/www/myapp/publishdotnet YourAppName.dllDie Anwendung sollte auf Port 5000 starten. Überprüfen Sie dies mit curl http://localhost:5000. Wenn alles funktioniert, stoppen Sie den Prozess (Strg+C).
Erstellen einer systemd-Unit-Datei
Damit die Anwendung automatisch beim Systemstart startet und bei Abstürzen neu gestartet wird, erstellen wir einen systemd-Dienst. Erstellen Sie die Datei:
nano /etc/systemd/syst