Despliegue de aplicaciones .NET 8 en sistemas operativos UOS

  1. Preparación del entorno

Antes de proceder, verifique que los requisitos previos estén satisfechos en su sistema UOS.

1.1 Verificación de dependencias

# Confirmar instalación de Nginx
nginx -V

# Verificar la versión del SDK de .NET
dotnet --info

# Revisar detalles del sistema operativo
uname -a

1.2 Estructura de directorios

# Establecer directorio de la aplicación (ejemplo: miapp)
sudo mkdir -p /srv/web/miapp

# Ajustar permisos de propiedad
sudo chown -R $(whoami):$(whoami) /srv/web/miapp
sudo chmod -R 775 /srv/web/miapp
  1. Generación del paquete de aplicación .NET 8

2.1 Compilación y publicación

Compile la aplicación con dependencias de marco para garantizar la portabilidad. Utilice el comando de publicación con las opciones apropiadas para el entorno de producción.

# Ejemplo de comando de publicación (ejecutar en el directorio del proyecto)
dotnet publish -c Release -o /srv/web/miapp/publish --self-contained false

2.2 Configuración del servicio con systemd

Para gestionar la aplicación como un servicio del sistema, cree un archivo de unidad en /etc/systemd/system/.

sudo nano /etc/systemd/system/miapp-servicio.service

Contenido del archivo de servicio:

[Unit]
Description=Servicio de aplicación .NET 8 para MiApp
After=network.target

[Service]
WorkingDirectory=/srv/web/miapp/publish
ExecStart=/usr/bin/dotnet /srv/web/miapp/publish/MiAplicacion.dll
Restart=always
RestartSec=15
KillSignal=SIGTERM
SyslogIdentifier=miapp-dotnet
User=miapp-user
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
Environment=ASPNETCORE_URLS=http://localhost:8080

[Install]
WantedBy=multi-user.target

Guarde el archivo y active el servicio:

# Recargar configuraciones de systemd
sudo systemctl daemon-reload

# Iniciar el servicio
sudo systemctl start miapp-servicio.service

# Habilitar inicio automático
sudo systemctl enable miapp-servicio.service

# Verificar estado
sudo systemctl status miapp-servicio.service
  1. Configuración del servidor Nginx como proxy inverso

3.1 Archivo de configuración del sitio

# Crear archivo de configuración
sudo nano /etc/nginx/sites-available/miapp-sitio

3.2 Configuración básica para HTTP

server {
    listen 80;
    server_name mi-dominio.com;

    location / {
        proxy_pass http://localhost:8080;
        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;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

3.3 Configuración avanzada con HTTPS

Para entornos seguros, configure redirección y parámetros SSL.

server {
    listen 80;
    server_name mi-dominio.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    server_name mi-dominio.com;

    ssl_certificate /etc/letsencrypt/live/mi-dominio.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/mi-dominio.com/privkey.pem;
    
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512;

    location / {
        proxy_pass http://localhost:8080;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        
        # Configuración de tiempo de espera
        proxy_connect_timeout 90;
        proxy_read_timeout 90;
        proxy_send_timeout 90;
    }

    # Cache para recursos estáticos
    location ~* \.(css|js|png|jpg|jpeg|gif|ico|woff2)$ {
        root /srv/web/miapp/publish/wwwroot;
        expires 30d;
        add_header Cache-Control "public";
    }
}

3.4 Activar el sitio y aplicar cambios

# Enlazar configuración
sudo ln -s /etc/nginx/sites-available/miapp-sitio /etc/nginx/sites-enabled/

# Probar sintaxis
sudo nginx -t

# Recargar Nginx
sudo systemctl reload nginx
  1. Resoulción de problemas comunes

4.1 Diagnosticar fallos del servicio

Si el servicio no inicia correctamente, revise los registros del sistema.

# Ver estado del servicio
sudo systemctl status miapp-servicio.service

# Analizar registros detallados
sudo journalctl -u miapp-servicio.service --no-pager -n 50

4.2 Ajustes de permisos

Errores de acceso pueden requerir corecciones en permisos de archivos.

# Cambiar propietario del directorio
sudo chown -R miapp-user:miapp-user /srv/web/miapp

# Asignar permisos de escritura a directorios clave
sudo chmod -R 775 /srv/web/miapp/publish/wwwroot
sudo mkdir -p /srv/web/miapp/publish/logs
sudo chown -R miapp-user:miapp-user /srv/web/miapp/publish/logs

4.3 Problemas de codificación y dependencias

Errores durante la ejecución pueden indicar problemas de configuración. Asegúrese de publicar la aplicación como indepnediente si hay conflictos de marco.

Etiquetas: dotnet-8 uos systemd Nginx kestrel

Publicado el 6-4 23:08