Despliegue de aplicación C# en VPS: guía paso a paso de la A a la Z

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

Introducción: ¿Por qué VPS es la solución ideal para aplicaciones C#?

El desarrollo en C# y la plataforma .NET hace tiempo que dejó de ser prerrogativa exclusiva de servidores Windows. Con la llegada de .NET Core (y ahora .NET 5/6/7/8), los desarrolladores obtuvieron la posibilidad de ejecutar sus aplicaciones en Linux, lo que abrió el acceso a servidores VPS económicos y de alto rendimiento. Desplegar una aplicación C# en VPS no solo permite ahorrar presupuesto, sino también tener control total sobre la infraestructura: desde la elección del sistema operativo hasta la configuración de seguridad.

En esta guía, analizaremos el ciclo completo de implementación de una aplicación ASP.NET Core en un servidor remoto. Aprenderá cómo preparar el servidor, configurar el proxy inverso Nginx, ejecutar la aplicación a través de Kestrel y protegerla con un certificado SSL. Todos los pasos están acompañados de ejemplos de código y comandos de consola.



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

Elección del sistema operativo y conexión SSH

Para desplegar una aplicación C# en VPS, se recomienda usar la distribución Ubuntu 22.04 LTS o Debian 11. Después de alquilar el servidor, conéctese a él mediante SSH:

ssh root@tu_IP_del_servidor

Actualice el gestor de paquetes e instale las utilidades necesarias:

apt update && apt upgrade -yapt install curl wget git -y


Instalación de .NET SDK o Runtime

Para ejecutar una aplicación ya compilada, basta con instalar ASP.NET Core Runtime. Si planea compilar código directamente en el servidor, instale el SDK. Agreguemos el repositorio de Microsoft e instalemos .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

Verifique la instalación:

dotnet --list-runtimes

La salida debe contener una línea con la versión de ASP.NET Core 8.0.x.



2. Preparación y publicación de la aplicación

Configuración del proyecto para producción

En su proyecto ASP.NET Core, abra el archivo Program.cs y asegúrese de que la aplicación escuche en la URL correcta. Para trabajar a través de Kestrel, asignaremos el puerto 5000:

var builder = WebApplication.CreateBuilder(args);builder.WebHost.UseUrls("http://0.0.0.0:5000");var app = builder.Build();app.MapGet("/", () => "¡Hola desde VPS!");app.Run();

Además, agregue en appsettings.json una sección para registros y cadenas de conexión a la base de datos, si se utilizan.



Publicación de la aplicación (Self-contained o Framework-dependent)

Elija el método de publicación. Self-contained incluye todas las dependencias, lo cual es conveniente si el servidor no tiene .NET Runtime. Framework-dependent requiere tener instalado el Runtime. Ejecute el comando en la carpeta del proyecto:

dotnet publish -c Release -o ./publish

Una vez finalizado, en la carpeta publish aparecerán todos los archivos necesarios. Archívelos:

tar -czf app.tar.gz ./publish


Carga al servidor

Use SCP o SFTP para transferir el archivo. Ejemplo mediante SCP (se ejecuta desde la máquina local):

scp app.tar.gz root@tu_IP:/var/www/myapp/

En el servidor, descomprima el archivo:

mkdir -p /var/www/myapptar -xzf /var/www/myapp/app.tar.gz -C /var/www/myapp/


3. Configuración de Kestrel y creación del servicio systemd

Ejecución de la aplicación a través de Kestrel

Kestrel es el servidor web integrado de ASP.NET Core. Para una ejecución de prueba, ejecute:

cd /var/www/myapp/publishdotnet YourAppName.dll

La aplicación debería iniciarse en el puerto 5000. Verifique con curl http://localhost:5000. Si todo funciona, detenga el proceso (Ctrl+C).



Creación del archivo unit de systemd

Para que la aplicación se inicie automáticamente al arrancar el sistema y se reinicie en caso de fallos, crearemos un servicio systemd. Cree el archivo:

nano /etc/systemd/syst                

Blogs

Book Recommendations