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_servidorActualice el gestor de paquetes e instale las utilidades necesarias:
apt update && apt upgrade -yapt install curl wget git -yInstalació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 -yVerifique la instalación:
dotnet --list-runtimesLa 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 ./publishUna vez finalizado, en la carpeta publish aparecerán todos los archivos necesarios. Archívelos:
tar -czf app.tar.gz ./publishCarga 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.dllLa 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