Introducción
Desarrollar una aplicación en C# en la plataforma .NET es solo la mitad del trabajo. Para que tu proyecto sea accesible para los usuarios en internet, debe desplegarse adecuadamente en un servidor. VPS (Servidor Privado Virtual) es una solución ideal para pequeñas y medianas empresas y desarrolladores independientes: proporciona control total sobre el entorno a un precio asequible. En este artículo, cubriremos el proceso completo de despliegue de una aplicación C# en un VPS con Linux (Ubuntu 22.04). Aprenderás cómo preparar el servidor, publicar la aplicación, configurar un proxy inverso con Nginx y asegurar el inicio automático mediante systemd.
1. Preparación del VPS e Instalación del Runtime .NET
1.1. Conexión al Servidor
Después de comprar un VPS, recibirás una dirección IP y una contraseña de root. Conéctate vía SSH:
ssh root@your-server-ipSe recomienda crear inmediatamente un usuario separado por seguridad:
adduser appuserusermod -aG sudo appusersu - appuser1.2. Instalación del Runtime .NET
Para que una aplicación C# se ejecute en el servidor, se necesita el Runtime de ASP.NET Core. Agrega el repositorio de Microsoft e instala el paquete:
wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.debsudo dpkg -i packages-microsoft-prod.debsudo apt-get updatesudo apt-get install -y aspnetcore-runtime-8.0Verifica la instalación:
dotnet --list-runtimesDeberías ver una línea con la versión ASP.NET Core 8.0.0.
2. Publicación de la Aplicación y Subida al Servidor
2.1. Publicación en la Máquina Local
En tu computadora con Visual Studio o .NET CLI, abre el proyecto y ejecuta el comando de publicación:
dotnet publish -c Release -o ./publishEste comando crea una carpeta publish que contiene todos los archivos necesarios para ejecutar la aplicación (incluyendo las dependencias del runtime si estás usando FDD — Framework-Dependent Deployment).
2.2. Subida al VPS
Copia la carpeta publish al servidor usando scp o sftp. En la máquina local, ejecuta:
scp -r ./publish appuser@your-server-ip:/home/appuser/myappAhora, en el servidor, verifica que los archivos estén en su lugar:
ls -la /home/appuser/myapp3. Configuración de systemd para el Inicio Automático
Para asegurar que la aplicación se inicie al arrancar el sistema y se reinicie automáticamente después de fallos, crea una unidad systemd.
3.1. Creación del Archivo de Servicio
Crea el archivo /etc/systemd/system/myapp.service con privilegios de root:
sudo nano /etc/systemd/system/myapp.serviceInserta el siguiente contenido:
[Unit]Description=My ASP.NET Core ApplicationAfter=network.target
[Service]WorkingDirectory=/home/appuser/myappExecStart=/usr/bin/dotnet /home/appuser/myapp/YourAppName.dllRestart=alwaysRestartSec=10KillSignal=SIGINTSyslogIdentifier=myappUser=appuserEnvironment=ASPNETCORE_ENVIRONMENT=ProductionEnvironment=ASPNETCORE_URLS=http://localhost:5000
[Install]WantedBy=multi-user.targetReemplaza YourAppName.dll con el nombre real de tu archivo .dll (generalmente coincide con el nombre del proyecto).
3.2. Inicio y Habilitación del Servicio
sudo systemctl daemon-reloadsudo systemctl start myappsudo systemctl enable myappVerifica el estado:
sudo systemctl status myappSi todo está configurado correctamente, verás el estado active (running). La aplicación ahora está escuchando en el puerto 5000 en la interfaz local.
4. Configuración de Nginx como Proxy Inverso
Para hacer que la aplicación sea accesible desde el exterior en los puertos estándar (80/443) y agregar un certificado SSL, instala y configura Nginx.
4.1. Instalación de Nginx
sudo apt updatesudo apt install nginx -y