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.
-
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.
-
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.
-
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 queapt
maneje paquetes que se descargan a través de HTTPS.
-
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.
-
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
-
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.
-
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óduloproxy
en Apache.a2enmod proxy_http
: Habilita el módulo para usar HTTP en el proxy.
-
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
yProxyPassReverse
: Direccionan el tráfico desde Apache a tu aplicación .NET que se ejecutará en el puerto5000
mediante Kestrel.
-
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
-
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
. -
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
.
-
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 usuariowww-data
, el usuario predeterminado de Apache.
-
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.
-
Instalar Certbot
sudo apt install certbot python3-certbot-apache
-
Obtener un certificado SSL
Ejecuta Certbot para obtener un certificado SSL gratuito:
sudo certbot --apache -d tu-dominio.com -d www.tu-dominio.com
-
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.