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

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

Desarrollar una aplicación C# es solo la mitad del trabajo. Para que tu proyecto esté disponible para los usuarios en Internet, es necesario desplegarlo en un servidor. Un Servidor Privado Virtual (VPS) es la solución ideal para alojar aplicaciones .NET, ya que te da control total sobre el entorno y te permite configurarlo todo según tus necesidades específicas.

En este artículo, analizaremos el proceso completo de despliegue de una aplicación C# (ASP.NET Core) en un VPS con Linux (Ubuntu 22.04). Aprenderás cómo preparar el servidor, instalar el software necesario, publicar la aplicación y configurar el servidor web para que funcione con ella. Todos los pasos están acompañados de ejemplos de código y comandos.

1. Preparación del VPS e instalación del SDK de .NET

El primer paso es la preparación del servidor. Usaremos Ubuntu 22.04 LTS, ya que es uno de los sistemas operativos más populares y estables para servidores. Nos conectamos al VPS por SSH:

ssh user@your-server-ip

Después de iniciar sesión, actualizamos la lista de paquetes e instalamos las dependencias necesarias:

sudo apt update
sudo apt upgrade -y
sudo apt install wget apt-transport-https software-properties-common -y

Ahora agregamos el repositorio de Microsoft e instalamos el SDK de .NET. Para .NET 8 ejecutamos:

wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
sudo apt update
sudo apt install dotnet-sdk-8.0 -y

Verificamos la instalación:

dotnet --version

Si ves el número de versión (por ejemplo, 8.0.100), todo está instalado correctamente.

Importante: Si tu aplicación usa una base de datos (por ejemplo, PostgreSQL o SQLite), instala el paquete correspondiente. Para PostgreSQL:

sudo apt install postgresql postgresql-contrib -y

2. Publicación y carga de la aplicación al servidor

Ahora prepararemos la propia aplicación para el despliegue. En tu computadora local (donde desarrollas), abre la terminal en la raíz del proyecto y ejecuta la publicación en modo Release:

dotnet publish -c Release -o ./publish

Este comando creará una carpeta publish con todos los archivos necesarios para ejecutar la aplicación en el servidor. Ahora necesitas cargar esta carpeta al VPS. Usa SCP o SFTP. Ejemplo con SCP:

scp -r ./publish user@your-server-ip:/home/user/myapp

Donde myapp es el nombre de la carpeta donde se almacenará tu aplicación en el servidor.

Después de la carga, conéctate al servidor y mueve los archivos a una ubicación más adecuada, por ejemplo, a /var/www/myapp:

sudo mkdir -p /var/www/myapp
sudo cp -r /home/user/myapp/* /var/www/myapp/

No olvides asignar los permisos correctos a la carpeta:

sudo chown -R www-data:www-data /var/www/myapp
sudo chmod -R 755 /var/www/myapp

3. Configuración de systemd para el inicio automático

Para que tu aplicación se inicie automáticamente al arrancar el sistema y se reinicie en caso de fallo, crearemos un servicio systemd. Crea un archivo de configuración:

sudo nano /etc/systemd/system/myapp.service

Inserta el siguiente contenido (reemplaza las rutas y el nombre de usuario por los tuyos):

[Unit]
Description=My ASP.NET Core Application
After=network.target

[Service]
WorkingDirectory=/var/www/myapp
ExecStart=/usr/bin/dotnet /var/www/myapp/YourApp.dll
Restart=always
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=myapp
User=www-data
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false

[Install]
WantedBy=multi-user.target

Guarda el archivo (Ctrl+O, luego Enter) y sal (Ctrl+X). Ahora recarga systemd e inicia el servicio:

sudo systemctl daemon-reload
sudo systemctl start myapp
sudo systemctl enable myapp

Verifica el estado:

Blogs

Book Recommendations