Introduction : Pourquoi le VPS est-il la solution idéale pour les applications C# ?
Le développement en C# et sur la plateforme .NET a depuis longtemps cessé d'être l'apanage exclusif des serveurs Windows. Avec l'arrivée de .NET Core (et maintenant .NET 5/6/7/8), les développeurs ont la possibilité d'exécuter leurs applications sur Linux, ce qui ouvre l'accès à des serveurs VPS économiques et performants. Déployer une application C# sur un VPS, c'est non seulement une économie budgétaire, mais aussi un contrôle total sur l'infrastructure : du choix du système d'exploitation à la configuration de la sécurité.
Dans ce guide, nous allons parcourir le cycle complet de déploiement d'une application ASP.NET Core sur un serveur distant. Vous apprendrez à préparer le serveur, configurer le proxy inverse Nginx, lancer l'application via Kestrel et la sécuriser avec un certificat SSL. Toutes les étapes sont accompagnées d'exemples de code et de commandes console.
1. Préparation du serveur et installation du Runtime .NET
Choix du système d'exploitation et connexion SSH
Pour déployer une application C# sur un VPS, il est recommandé d'utiliser une distribution Ubuntu 22.04 LTS ou Debian 11. Après avoir loué le serveur, connectez-vous via SSH :
ssh root@votre_IP_serveurMettez à jour le gestionnaire de paquets et installez les utilitaires nécessaires :
apt update && apt upgrade -yapt install curl wget git -yInstallation du SDK ou Runtime .NET
Pour exécuter une application prête, il suffit d'installer le Runtime ASP.NET Core. Si vous prévoyez de compiler le code directement sur le serveur, installez le SDK. Ajoutons le dépôt Microsoft et installons .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 -yVérifiez l'installation :
dotnet --list-runtimesLa sortie doit contenir une ligne avec la version ASP.NET Core 8.0.x.
2. Préparation et publication de l'application
Configuration du projet pour la production
Dans votre projet ASP.NET Core, ouvrez le fichier Program.cs et assurez-vous que l'application écoute la bonne URL. Pour fonctionner via Kestrel, définissons le port 5000 :
var builder = WebApplication.CreateBuilder(args);builder.WebHost.UseUrls("http://0.0.0.0:5000");var app = builder.Build();app.MapGet("/", () => "Bonjour depuis le VPS !");app.Run();Ajoutez également dans appsettings.json une section pour les logs et les chaînes de connexion à la base de données, si elles sont utilisées.
Publication de l'application (Self-contained ou Framework-dependent)
Choisissez la méthode de publication. Self-contained inclut toutes les dépendances, ce qui est pratique si le Runtime .NET n'est pas installé sur le serveur. Framework-dependent nécessite le Runtime installé. Exécutez la commande dans le dossier du projet :
dotnet publish -c Release -o ./publishUne fois terminé, tous les fichiers nécessaires apparaîtront dans le dossier publish. Archivez-les :
tar -czf app.tar.gz ./publishChargement sur le serveur
Utilisez SCP ou SFTP pour transférer l'archive. Exemple via SCP (exécuté depuis la machine locale) :
scp app.tar.gz root@votre_IP:/var/www/myapp/Sur le serveur, décompressez l'archive :
mkdir -p /var/www/myapptar -xzf /var/www/myapp/app.tar.gz -C /var/www/myapp/3. Configuration de Kestrel et création du service systemd
Lancement de l'application via Kestrel
Kestrel est le serveur web intégré d'ASP.NET Core. Pour un lancement de test, exécutez :
cd /var/www/myapp/publishdotnet YourAppName.dllL'application doit démarrer sur le port 5000. Vérifiez avec curl http://localhost:5000. Si tout fonctionne, arrêtez le processus (Ctrl+C).
Création du fichier unité systemd
Pour que l'application démarre automatiquement au démarrage du système et redémarre en cas de panne, créons un service systemd. Créez le fichier :
nano /etc/systemd/syst