Saltar al contenido principal
Backend .NET Nivel: Intermedio

Cómo publicar ASP.NET Core en un VPS Linux

Aprovecha la velocidad extrema de Kestrel y la estabilidad de Linux con systemd, Nginx y certificados SSL.

📅 Actualizado: ⏱️ Tiempo de lectura: 10 minutos 💻 Framework: .NET 8 / C# 🌐 Autor: Especialistas en .NET de Planeta Nube
Arquitectura Recomendada por Microsoft

En servidores Linux, la arquitectura estándar consiste en ejecutar el servidor interno Kestrel escuchando en http://localhost:5000, administrado por el demonio del sistema systemd, mientras que Nginx actúa como proxy inverso en el puerto 80/443 para manejar el cifrado SSL/TLS, compresión y balanceo de carga.

1. Compilar tu Aplicación .NET en Release

En tu computadora de desarrollo, genera los binarios optimizados para Linux:

dotnet publish -c Release -o ./publish

Esto creará una carpeta ./publish que contiene tu archivo ejecutable MiApp.dll, las vistas Razor precompiladas y los assets estáticos de wwwroot.

2. Instalar ASP.NET Core Runtime en el Servidor VPS

Conéctate a tu servidor Linux (Ubuntu Server) por SSH e instala el paquete del runtime de .NET 8:

# Registrar el repositorio oficial de Microsoft en Ubuntu
sudo apt-get update && sudo apt-get install -y wget
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
rm packages-microsoft-prod.deb

# Instalar el runtime de ASP.NET Core
sudo apt-get update
sudo apt-get install -y aspnetcore-runtime-8.0

Verifica la instalación:

dotnet --info

3. Subir tu Aplicación al Directorio /var/www

Crea el directorio destino y copia tus archivos de publish:

sudo mkdir -p /var/www/miapp
# Copia los archivos usando SCP desde tu máquina local:
# scp -r ./publish/* root@TU_IP_PUBLICA:/var/www/miapp/

Otorga la propiedad al usuario web del sistema:

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

4. Crear el Servicio systemd para Kestrel

Crea el archivo de servicio para que Linux ejecute tu aplicación de fondo y la reinicie ante cualquier fallo:

sudo nano /etc/systemd/system/kestrel-miapp.service

Pega la siguiente definición (ajusta el nombre del archivo DLL y el puerto si es necesario):

[Unit]
Description=Aplicacion ASP.NET Core en Planeta Nube
After=network.target

[Service]
WorkingDirectory=/var/www/miapp
ExecStart=/usr/bin/dotnet /var/www/miapp/MiApp.dll --urls "http://127.0.0.1:5000"
Restart=always
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=dotnet-miapp
User=www-data
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE_TO_USER=false

[Install]
WantedBy=multi-user.target

Habilita e inicia el servicio en Linux:

sudo systemctl daemon-reload
sudo systemctl enable kestrel-miapp.service
sudo systemctl start kestrel-miapp.service
sudo systemctl status kestrel-miapp.service

5. Configurar Nginx como Reverse Proxy

Crea la configuración del sitio en Nginx:

sudo nano /etc/nginx/sites-available/miapp.conf
server {
    listen 80;
    server_name tu-dominio.com www.tu-dominio.com;

    location / {
        proxy_pass         http://127.0.0.1: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;
    }
}

Activa el sitio y recarga Nginx:

sudo ln -s /etc/nginx/sites-available/miapp.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

6. Certificado SSL Gratuito Let's Encrypt

sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d tu-dominio.com -d www.tu-dominio.com

Errores Típicos en Despliegues de .NET

ForwardedHeaders Middleware en Program.cs

Para que ASP.NET Core reconozca correctamente las IPs reales de tus visitantes y el protocolo HTTPS cuando está detrás de Nginx, añade app.UseForwardedHeaders(); antes de cualquier otro middleware en tu Program.cs.

Guías Complementarias

¿Buscas un VPS ideal para .NET y C#?

Nuestro plan VPS Plus (4 GB RAM / 2-4 vCPU) es la elección preferida de desarrolladores .NET para correr Kestrel, bases de datos PostgreSQL o SQL Server sin cuellos de botella.

Ver servidores VPS para .NET Contratar VPS Plus