Déploiement d'une application C# sur VPS : niveau avancé

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Déploiement avancé d'une application C# (.NET) sur VPS : guide étape par étape

\n\n

Dé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\n

1. Préparation du serveur et installation du .NET Runtime

\n\n

Avant 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\n

Pour 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\n

2. Optimisation de l'application pour la production

\n\n

Avant 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\n

2.1. Configuration de Program.cs

\n\n

Dans le fichier Program.cs, spécifiez un port explicite et activez la redirection vers HTTPS (si vous utilisez un proxy inverse).

\n\n
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\n

2.2. Compilation et publication

\n\n

Compilez l'application en mode self-contained pour ne pas dépendre du Runtime installé sur le serveur.

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

Cette commande créera un dossier publish avec tous les fichiers nécessaires. Transférez-le sur le serveur à l'aide de scp ou rsync.

\n\n

3. Configuration de Nginx comme proxy inverse

\n\n

Nginx acceptera les requêtes entrantes et les redirigera vers votre application C#. Cela améliore les performances et la sécurité.

\n\n

3.1. Installation et configuration de base

\n\n
sudo apt install nginx -y\nsudo systemctl start nginx\nsudo systemctl enable nginx
\n\n

Créez un fichier de configuration pour votre application :

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

Insérez le code suivant :

\n\n
server {\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\n

Activez le site et redémarrez Nginx :

\n<

Blogs

Book Recommendations