Déploiement avancé d'une application C# (.NET) sur VPS : guide étape par étape
\n\nDéployer une application C# sur un VPS ne se limite pas à copier des fichiers sur le serveur. Pour un environnement de production, une configuration complète est nécessaire : de la configuration du proxy inverse à l'automatisation du déploiement. Dans cet article, nous aborderons les techniques avancées de déploiement utilisées par les développeurs expérimentés. Vous apprendrez à configurer Nginx, à activer HTTPS, à mettre en place CI/CD et le monitoring.
\n\n1. Préparation du serveur et installation du .NET Runtime
\n\nAvant de commencer le déploiement, assurez-vous que votre VPS fonctionne sous Ubuntu 22.04 ou une version plus récente. Connectez-vous via SSH et effectuez la configuration de base.
\n\n# Mise à jour du système\nsudo apt update && sudo apt upgrade -y\n\n# Installation du .NET SDK (pour la compilation) et du Runtime (pour l'exécution)\nwget https://dot.net/v1/dotnet-install.sh -O dotnet-install.sh\nchmod +x dotnet-install.sh\nsudo ./dotnet-install.sh --channel 8.0 --install-dir /usr/share/dotnet\nsudo ln -s /usr/share/dotnet/dotnet /usr/local/bin/dotnet\n\n# Vérification de l'installation\ndotnet --list-runtimes\n\nPour la production, il est recommandé d'utiliser uniquement le Runtime afin de réduire la taille de l'image. Le SDK n'est nécessaire que sur la machine de compilation (par exemple, dans CI/CD).
\n\n2. Optimisation de l'application pour la production
\n\nAvant le déploiement, configurez l'application pour fonctionner dans un environnement de production. Cela inclut la configuration de Kestrel, la journalisation et la gestion des erreurs.
\n\n2.1. Configuration de Program.cs
\n\nDans le fichier Program.cs, spécifiez un port explicite et activez la redirection vers HTTPS (si vous utilisez un proxy inverse).
var builder = WebApplication.CreateBuilder(args);\n\n// Configuration de Kestrel pour fonctionner via un proxy inverse\nbuilder.WebHost.ConfigureKestrel(options =>\n{\n options.Listen(IPAddress.Any, 5000); // Port HTTP pour Nginx\n});\n\n// Ajout des services\nbuilder.Services.AddControllersWithViews();\nbuilder.Services.AddHealthChecks();\n\nvar app = builder.Build();\n\n// Middleware pour la production\nif (!app.Environment.IsDevelopment())\n{\n app.UseExceptionHandler("/Home/Error");\n app.UseHsts();\n}\n\napp.UseStaticFiles();\napp.UseRouting();\napp.UseAuthorization();\n\napp.MapHealthChecks("/health");\napp.MapControllerRoute(\n name: "default",\n pattern: "{controller=Home}/{action=Index}/{id?}");\n\napp.Run();\n\n2.2. Compilation et publication
\n\nCompilez l'application en mode self-contained pour ne pas dépendre du Runtime installé sur le serveur.
\n\ndotnet publish -c Release -r linux-x64 --self-contained true -o ./publish\n\nCette commande créera un dossier publish avec tous les fichiers nécessaires. Transférez-le sur le serveur à l'aide de scp ou rsync.
3. Configuration de Nginx comme proxy inverse
\n\nNginx acceptera les requêtes entrantes et les redirigera vers votre application C#. Cela améliore les performances et la sécurité.
\n\n3.1. Installation et configuration de base
\n\nsudo apt install nginx -y\nsudo systemctl start nginx\nsudo systemctl enable nginx\n\nCréez un fichier de configuration pour votre application :
\n\nsudo nano /etc/nginx/sites-available/myapp\n\nInsérez le code suivant :
\n\nserver {\n listen 80;\n server_name your-domain.com www.your-domain.com;\n\n location / {\n proxy_pass http://localhost:5000;\n proxy_http_version 1.1;\n proxy_set_header Upgrade $http_upgrade;\n proxy_set_header Connection keep-alive;\n proxy_set_header Host $host;\n proxy_cache_bypass $http_upgrade;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n proxy_set_header X-Forwarded-Proto $scheme;\n }\n\n location /health {\n access_log off;\n return 200 "Healthy\\n";\n add_header Content-Type text/plain;\n }\n}\n\nActivez le site et redémarrez Nginx :
\n<