Implementando un sitio .Net Core en un servidor Linux

Create Domain Directory
sudo mkdir -p /var/www/diarioweb.mirandamx.dev/html

Installing Nginx

$ sudo apt-get update
$ sudo apt-get install nginx
sudo ufw app listOutput
Available applications:
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSH
$ sudo ufw allow 'Nginx Full'
$ sudo ufw allow ssh
$ sudo ufw enable

Validando el estatus de nuestro server nginx

systemctl status nginx

Algunos comandos útiles que necesitaremos en algún momento:

$ sudo systemctl stop nginx
$ sudo systemctl start nginx
$ sudo systemctl restart nginx

Creando los directorios y estructuras de nuestros sitios que requiramos

sudo mkdir -p /var/www/diarioweb.mirandamx.dev/html
sudo mkdir -p /var/www/diarioapi.mirandamx.dev/html

Asignando permisos:

sudo chown -R $USER:$USER /var/www/diarioweb.mirandamx.dev/html
sudo chown -R $USER:$USER /var/www/diarioapi.mirandamx.dev/html

sudo chmod -R 755 /var/www

Server Block for Domain

sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/diarioweb.mirandamx.dev

sudo nano /etc/nginx/sites-available/diarioweb.mirandamx.dev

Con CTRL + K podemos borrar contenido de manera rápida en nano

server {
        listen 80;
        listen [::]:80;

        root /var/www/diarioweb.mirandamx.dev/html;
        index index.html index.htm index.nginx-debian.html;

        server_name diarioweb.mirandamx.dev www.diarioweb.mirandamx.dev;

        location / {
                try_files $uri $uri/ =404;
        }
}

En este punto, dependiendo su versión de ubuntu, algunas versiones anteriores de net core podrían no ser compatible, en mi servidor Ubuntu 23.04 pude instalar net core 6.0 de la siguiente manera

sudo apt-get update && \<br>sudo apt-get install -y aspnetcore-runtime-6.0

Sin embargo en mi servidor con Ubuntu 24.04.1 LTS no pude realizarlo, así que decidí instalar la versión 8

 sudo apt-get update && \
 sudo apt-get install -y dotnet-sdk-8.0

Si quisieran forzar la instalación de una versión no soportada, pueden poner lo siguiente:

sudo add-apt-repository ppa:dotnet/backports
sudo apt-get install aspnetcore-runtime-6.0

Para validar que este instalado net core procedemos a hacer lo siguiente:

dotnet --info

Instalando SSL

sudo snap install --classic certbot

Antes de ejecutar el siguiente comando, nuestro dominio ya debe estar apuntando a nuestro servidor.

sudo certbot –nginx -d diarioweb.mirandamx.dev -d diarioweb.mirandamx.dev

Y a nuestro archivo de configuración de nginx

sudo nano /etc/nginx/sites-available/diarioweb.mirandamx.dev

Le añadimos lo siguiente:

ssl_certificate /etc/letsencrypt/live/diarioweb.mirandamx.dev/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/diarioweb.mirandamx.dev/privkey.pem; # managed by Certbot

Y se vería algo así:

Ahora creamos nuestro archivo para levantar nuestra aplicación en el servidor kestrel mediante el siguiente comando:

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

Le añadimos lo siguiente:

Nota importante: Cuando configuremos múltiples sitios, tendremos que ir cambiando el puerto para que cada aplicación/sitio apunte de manera correspondiente.

Ejemplos: <::5001>, <::5002>, <::5003>,

[Unit]
Description=Example .NET Web API App running on Ubuntu
[Service]
WorkingDirectory=/var/www/diarioweb.mirandamx.dev/html
ExecStart=/usr/bin/dotnet /var/www/diarioweb.mirandamx.dev/html/DiarioFrontEndMVC.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=Release
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
Environment=ASPNETCORE_URLS=http://127.0.0.1::5001
[Install]
WantedBy=multi-user.target

Ahora en nuestro archivo de configuración cambiamos el location por un proxy_pass

sudo nano /etc/nginx/sites-available/diarioapi.mirandamx.dev
       location / {
          proxy_pass  http://localhost:5001;    
       }

server {
  listen 80;
  listen [::]:80;

  server_name api1.example.com *.example.com;

  root /var/www/api1.example.com;

  index index.html index.htm;
       location / {
          proxy_pass  http://localhost:5001;    
       }
}

Reiniciamos

sudo systemctl enable kestrel-diarioWeb.service
sudo systemctl start kestrel-diarioWeb.service
sudo systemctl restart kestrel-diarioWeb.service
sudo systemctl status kestrel-diarioWeb.service

En este caso yo ya tenía mi compilado de mi otro sitio y solo copie mi compilado.

Y si es exitoso, debería verse algo así: