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.
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.