Despliegue de aplicación C# en VPS: nivel avanzado

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Despliegue avanzado de aplicación C# (.NET) en VPS: guía paso a paso



Desplegar una aplicación C# en un VPS no es simplemente copiar archivos al servidor. Para un entorno de producción se requiere una configuración integral: desde la configuración del proxy inverso hasta la automatización del despliegue. En este artículo analizaremos técnicas avanzadas de despliegue que utilizan desarrolladores experimentados. Aprenderá a configurar Nginx, conectar HTTPS, implementar CI/CD y monitoreo.



1. Preparación del servidor e instalación de .NET Runtime



Antes de comenzar el despliegue, asegúrese de que su VPS funcione con Ubuntu 22.04 o superior. Conéctese por SSH y realice la configuración básica.



# Actualización del sistemasudo apt update && sudo apt upgrade -y

# Instalación de .NET SDK (para compilación) y Runtime (para ejecución)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

# Verificación de la instalacióndotnet --list-runtimes


Para producción, se recomienda usar solo Runtime para reducir el tamaño de la imagen. El SDK solo es necesario en la máquina de compilación (por ejemplo, en CI/CD).



2. Optimización de la aplicación para producción



Antes del despliegue, configure la aplicación para funcionar en un entorno de producción. Esto incluye la configuración de Kestrel, registro y manejo de errores.



2.1. Configuración de Program.cs



En el archivo Program.cs, especifique un puerto explícito y habilite la redirección a HTTPS (si usa un proxy inverso).



var builder = WebApplication.CreateBuilder(args);

// Configuración de Kestrel para funcionar a través de proxy inversobuilder.WebHost.ConfigureKestrel(options =>{ options.Listen(IPAddress.Any, 5000); // Puerto HTTP para Nginx});

// Adición de serviciosbuilder.Services.AddControllersWithViews();builder.Services.AddHealthChecks();

var app = builder.Build();

// Middleware para producciónif (!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. Compilación y publicación



Compile la aplicación como autónoma (self-contained) para no depender del Runtime instalado en el servidor.



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


Este comando creará una carpeta publish con todos los archivos necesarios. Transfiérala al servidor usando scp o rsync.



3. Configuración de Nginx como proxy inverso



Nginx recibirá las solicitudes entrantes y las redirigirá a su aplicación C#. Esto mejora el rendimiento y la seguridad.



3.1. Instalación y configuración básica



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


Cree un archivo de configuración para su aplicación:



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


Inserte el siguiente código:



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


Active el sitio y reinicie Nginx:

<

Blogs

Book Recommendations