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