Publicación ASP.NET Core en servidor Ubuntu + NGINX

En una entrada anterior hablamos sobre cómo instalar NGINX en un servidor Ubuntu y cómo configurarlo para tener nuestra primera página web.

Puedes acceder desde aquí.

Ahora veremos cómo configurar el servidor para poder desplegar nuestras aplicaciones ASP.NET Core.

Microsoft ya tiene un guía muy completa de cómo hacerlo que recomiendo leer (puedes acceder pinchando aquí), pero aún así, para continuar con el hilo lo explicaré aquí también de forma resumida.

Paso 1 – Preparación de nuestra aplicación web

Lo primero, como es lógico, es disponer de nuestra aplicación ASP.NET Core publicada. Una vez tenemos todos los ficheros, abriremos el archivo appsettings.json para añadir la configuración que necesitamos.

En él buscaremos una etiqueta llamada Kestrel. En caso de no existir, la añadiremos a mano y estableceremos el puerto de Kestrel.

{
   "AllowedHosts": "*",
   "ConnectionStrings": {
     "DefaultConnection": "connection string ..."
   },
   "Kestrel": {
     "Endpoints": {
       "Http": {
         "Url": "http://localhost:5002"
       }
     }
   },
   "Logging": {
     "LogLevel": {
       "Default": "Warning"
     }
   }
 }

El resto de configuraciones pueden ser diferentes en tu aplicación, las he añadido a modo de ejemplo.

En nuestro caso utilizaremos el puerto 5002. Si vamos a tener varias aplicaciones corriendo en el servidor NGINX estableceremos un puerto diferente para cada una de ellas.

Paso 2 – Desplegar la aplicación en el servidor

El siguiente paso será subir nuestra aplicación al servidor. Lo pondremos en la ruta del dominio que hayamos creado cuando instalamos NGINX.

En mi caso la ruta será /var/www/ejemplo.com/html.

No lo pruebes todavía porque aún no va a funcionar! Ahora modificaremos la configuración del bloque de servidor que teníamos del artículo anterior.

Paso 3 – Modificar el bloque de servidor

En el artículo anterior, habíamos creado un bloque de servidor llamado ejemplo.com.conf. Ahora tendremos que abrirlo y modificarlo para configurar NGINX como un proxy inverso que reenvíe las solicitudes HTTP a nuestra aplicación ASP.NET Core.

Para ello editaremos el siguiente fichero:

sudo nano /etc/nginx/sites-available/ejemplo.com.conf

Borramos todo lo que tiene y añadimos el siguiente código:

server {
     listen        80;
     server_name   ejemplo.com www.ejemplo.com;
     location / {
         proxy_pass         http://localhost:5002;
         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;
     }
 }

En este paso es importante modificar el server_name con nuestro dominio, igual que ya habíamos hecho en el artículo anterior y sobre todo, indicar el mismo puerto que utilizamos en el appsettings.json. En nuestro caso es el puerto 5002.

Una vez hechos todos los cambios comprobaremos que la sintaxis es correcta:

sudo nginx -t

Y forzaremos a NGINX a recopilar los cambios:

sudo nginx -s reload

Paso 4 – Creación del archivo de servicio

Una vez finalizada la nueva configuración de NGINX, crearemos un archivo de servicio para iniciar y supervisar la aplicación web.

Para ello utilizaremos el siguiente comando:

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

Dentro del editor de texto, pegaremos el siguiente código de ejemplo:

[Unit]
 Description=Example .NET Web API App running on Ubuntu
 [Service]
 WorkingDirectory=/var/www/ejemplo.com
 ExecStart=/usr/bin/dotnet /var/www/ejemplo.com/myapp.dll
 Restart=always
 Restart service after 10 seconds if the dotnet service crashes:
 RestartSec=10
 KillSignal=SIGINT
 SyslogIdentifier=dotnet-example
 User=www-data
 Environment=ASPNETCORE_ENVIRONMENT=Production
 Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
 [Install]
 WantedBy=multi-user.target

Es importante establecer las rutas correctamente. También modificaremos myapp.dll por el nombre de la .dll de nuestra aplicación.

Una vez acabado guardamos y cerramos el fichero.

Por último habilitaremos el servicio:

sudo systemctl enable myapp.service

Y comprobaremos que se está ejecutando sin errores:

sudo systemctl start myapp.service 
sudo systemctl status myapp.service

◝ myapp.service - Example .NET Web API App running on Ubuntu
     Loaded: loaded (/etc/systemd/system/myapp.service; enabled)
     Active: active (running) since Thu 2021-04-03 04:09:35 NZDT; 35s ago
 Main PID: 9021 (dotnet)
     CGroup: /system.slice/myapp.service
             └─9021 /usr/local/bin/dotnet /var/www/ejemplo.com/myapp.dll

Si todo es correcto, ya deberíamos poder acceder a nuestra aplicación web desde el navegador.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.