Despliegue de una API ASP.NET (.NET 8) en un VPS con Apache

A continuación, te proporcionaré una guía paso a paso detallada y comentada sobre cómo desplegar una API en ASP.NET (.NET 8) en un VPS con Apache como servidor web, en lugar de Nginx. También explicaré cada paquete o dependencia que utilicemos a lo largo del proceso. Esta guía te permitirá configurar y desplegar tu API en un entorno de producción de manera eficiente.

Paso 1: Configuración inicial del VPS

Primero, debes asegurarte de que tu VPS esté configurado correctamente.

  1. Acceso al VPS a través de SSH

    Para conectarte a tu VPS desde tu terminal (Linux/Mac) o usando un cliente SSH (como PuTTY en Windows), utiliza el siguiente comando de ejemplo:

    ssh usuario@vps-ip
    • usuario: El nombre de usuario que te proporcionó el proveedor del VPS.
    • vps-ip: La dirección IP de tu servidor.
  2. Actualización de paquetes

    Una vez conectado, actualiza los paquetes de tu sistema operativo para asegurarte de que todo esté al día:

    sudo apt update && sudo apt upgrade -y
    • sudo: Ejecuta el comando con privilegios de superusuario.
    • apt update: Actualiza la lista de paquetes disponibles.
    • apt upgrade -y: Actualiza los paquetes instalados a la última versión disponible.

Paso 2: Instalar .NET 8 en el VPS

Para ejecutar una aplicación en .NET 8, primero debes instalar el SDK de .NET en el servidor.

  1. Instalar dependencias previas

    Antes de instalar .NET, asegúrate de tener configuradas algunas dependencias que son necesarias para que el sistema maneje paquetes HTTPS:

    sudo apt install -y apt-transport-https
    • apt-transport-https: Permite que apt maneje paquetes que se descargan a través de HTTPS.
  2. Agregar el repositorio de Microsoft para .NET

    Descarga el paquete que agrega el repositorio de Microsoft para que puedas instalar el SDK de .NET:

    wget https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/packages-microsoft-prod.deb
    sudo dpkg -i packages-microsoft-prod.deb
    • wget: Descarga archivos desde la web.
    • dpkg -i: Instala el paquete .deb que contiene la configuración del repositorio de Microsoft.
  3. Instalar .NET SDK 8

    Ahora que el repositorio está agregado, instala el SDK de .NET 8:

    sudo apt update
    sudo apt install -y dotnet-sdk-8.0

    Puedes verificar que la instalación fue exitosa ejecutando:

    dotnet --version

    Esto debería mostrarte la versión de .NET instalada (8.0.x).

Paso 3: Instalar y configurar Apache como servidor web

  1. Instalar Apache

    Apache es el servidor web que usaremos como proxy inverso para dirigir las peticiones HTTP a tu API en ASP.NET, que se ejecutará a través de Kestrel. Primero, instala Apache:

    sudo apt install -y apache2
    • apache2: El paquete que instala el servidor web Apache.
  2. Habilitar módulos necesarios de Apache

    Para configurar correctamente el proxy inverso, habilita los módulos de proxy:

    sudo a2enmod proxy
    sudo a2enmod proxy_http
    • a2enmod proxy: Habilita el módulo proxy en Apache.
    • a2enmod proxy_http: Habilita el módulo para usar HTTP en el proxy.
  3. Configurar el sitio de Apache para redirigir a Kestrel

    Vamos a crear un archivo de configuración para el sitio que maneje las solicitudes HTTP hacia tu aplicación ASP.NET. Crea un archivo en el directorio /etc/apache2/sites-available:

    sudo nano /etc/apache2/sites-available/tu-api.conf

    Coloca el siguiente contenido dentro del archivo:

    
       ServerName tu-dominio-o-ip
    
       ProxyPreserveHost On
       ProxyPass / http://localhost:5000/
       ProxyPassReverse / http://localhost:5000/
    
       ErrorLog ${APACHE_LOG_DIR}/error.log
       CustomLog ${APACHE_LOG_DIR}/access.log combined
    
    • ServerName: La dirección IP o dominio de tu servidor.
    • ProxyPass y ProxyPassReverse: Direccionan el tráfico desde Apache a tu aplicación .NET que se ejecutará en el puerto 5000 mediante Kestrel.
  4. Habilitar el sitio y reiniciar Apache

    Después de crear el archivo de configuración, habilita el sitio:

    sudo a2ensite tu-api.conf
    sudo systemctl restart apache2
    • a2ensite: Habilita el sitio configurado.
    • systemctl restart apache2: Reinicia Apache para aplicar los cambios.

Paso 4: Publicar y desplegar tu aplicación

  1. Publicar la API localmente

    Si estás desarrollando en tu máquina local, primero necesitas publicar tu aplicación ASP.NET. Desde el directorio raíz de tu proyecto, ejecuta el siguiente comando:

    dotnet publish --configuration Release

    Esto generará tu aplicación compilada en el directorio bin/Release/net8.0/publish.

  2. Subir la aplicación al servidor

    Usa scp o SFTP para subir los archivos de la aplicación publicados al VPS:

    scp -r bin/Release/net8.0/publish/ usuario@vps-ip:/home/usuario/app

Paso 5: Crear un servicio Systemd para la aplicación ASP.NET

Para asegurarte de que tu aplicación ASP.NET se ejecute como un servicio en segundo plano, crearemos un archivo de servicio de systemd.

  1. Crear el archivo de servicio

    Crea un nuevo archivo de servicio:

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

    Coloca el siguiente contenido:

    [Unit]
    Description=API ASP.NET running on Kestrel
    After=network.target
    
    [Service]
    WorkingDirectory=/home/usuario/app
    ExecStart=/usr/bin/dotnet /home/usuario/app/TuApi.dll
    Restart=always
    RestartSec=10
    SyslogIdentifier=dotnet-api
    User=www-data
    Environment=ASPNETCORE_ENVIRONMENT=Production
    
    [Install]
    WantedBy=multi-user.target
    • ExecStart: La ruta al ejecutable de .NET y tu aplicación compilada (TuApi.dll).
    • Restart=always: Asegura que el servicio se reinicie automáticamente si falla.
    • User=www-data: Ejecuta el servicio como el usuario www-data, el usuario predeterminado de Apache.
  2. Habilitar y arrancar el servicio

    Ahora, habilita e inicia el servicio:

    sudo systemctl enable kestrel-api.service
    sudo systemctl start kestrel-api.service

    Verifica que el servicio esté corriendo:

    sudo systemctl status kestrel-api.service

    Si está corriendo correctamente, debería aparecer como active (running).

Paso 6: (Opcional) Configurar HTTPS con Certbot

Si tienes un dominio, puedes proteger tu sitio con HTTPS utilizando Certbot y Let's Encrypt.

  1. Instalar Certbot

    sudo apt install certbot python3-certbot-apache
  2. Obtener un certificado SSL

    Ejecuta Certbot para obtener un certificado SSL gratuito:

    sudo certbot --apache -d tu-dominio.com -d www.tu-dominio.com
  3. Renovar el certificado automáticamente

    Certbot configurará automáticamente las renovaciones de tus certificados. Puedes simular una renovación con:

    sudo certbot renew --dry-run

Conclusión

Siguiendo esta guía paso a paso, has desplegado una API ASP.NET (.NET 8) en un VPS utilizando Apache como servidor web y Kestrel como servidor de aplicaciones. Has configurado Apache como proxy inverso y, opcionalmente, has asegurado tu sitio con HTTPS usando Certbot.

Este enfoque te permitirá gestionar y escalar tu aplicación en un entorno de producción con Apache.