La guía completa para alojar ASP.NET Core en Linux
Pasos y consejos importantes para una implementación segura y óptima de aplicaciones ASP.NET Core en Linux usando Kestrel y Nginx

La guía completa para alojar ASP.NET Core en Linux

Este artículo le enseñará a alojar aplicaciones ASP.NET Core en Linux. Aprenda a instalar el entorno de ejecución de .NET, configurar Kestrel y Nginx, y a considerar la seguridad, la optimización y la escalabilidad.
0 acciones
0
0
0
0

 

Hospedaje de ASP.NET Core en Linux: ¿por qué y cuándo?

ASP.NET Core funciona bien en Linux con *Kestrel*, y elegir esta plataforma para alojamiento puede proporcionar beneficios importantes, incluidos: Reducción de costos, compatibilidad con herramientas de código abierto y facilidad de contenedorización Esta opción es adecuada para sitios web, API, servicios en segundo plano y aplicaciones sensibles a la latencia, como juegos y comercio.

 

Requisitos previos y selección del servidor

 

Distribución de Linux y versión .NET

Las distribuciones sugeridas incluyen: Ubuntu LTS (20.04/22.04), Debian (11/12), y CentOS Stream o Rocky/Alma Son para producción. Para entornos con estricta seguridad de RHEL Utilice el entorno de ejecución y el SDK oficiales de Microsoft (por ejemplo, .NET 6/7/8).

 

Recursos de hardware y tipo de servicio

Para sitios web y API ligeras generalmente 1-2 vCPU, 1-4 GB de RAM y SSD NVMe Suficiente. Negocios y aplicaciones pesadas para 4+ vCPU y 8+ GB de RAM Y necesitan una red de alta velocidad.

Para comerciar y jugar con ping bajo Lo mejor es elegir un VPS localizado cerca de un centro de datos regional o de intercambio. Nuestra empresa cuenta con más de 85 ubicaciones en todo el mundo, lo que facilita la elección del centro de datos más cercano.

Utilice servidores gráficos (GPU) para IA/inferencia o renderizado; nuestra empresa ofrece servicio de GPU en la nube y servidor de cómputo con red de alta velocidad.

Para protegerse contra ataques, considere un servidor anti-DDoS y una red con BGP y CDN.

 

Instalación y configuración básicas (tiempo de ejecución .NET): ejemplo para Ubuntu

Para instalar el entorno de ejecución oficial de Microsoft, agregue el repositorio y luego instale el entorno de ejecución:

sudo apt update
wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
sudo apt update
sudo apt install -y dotnet-runtime-7.0

A continuación, cree un directorio de aplicaciones y usuarios de servicio seguro:

sudo useradd -r -s /usr/sbin/nologin aspnetuser
sudo mkdir -p /var/www/myapp
sudo chown aspnetuser:aspnetuser /var/www/myapp

 

Implementación sin contenedores: Kestrel + systemd + Nginx

 

Publicar la aplicación y configurar systemd

Construya y publique la aplicación en la ruta del directorio de la aplicación:

dotnet publish -c Release -o /var/www/myapp

Archivo de unidad de ejemplo para systemd en /etc/systemd/system/myapp.service Lugar:

[Unit]
Description=My ASP.NET Core App
After=network.target

[Service]
WorkingDirectory=/var/www/myapp
ExecStart=/usr/bin/dotnet /var/www/myapp/MyApp.dll
Restart=always
# Safe User/Group
User=aspnetuser
Group=aspnetuser
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false

[Install]
WantedBy=multi-user.target

Activación y ejecución del servicio:

sudo systemctl daemon-reload
sudo systemctl enable myapp
sudo systemctl start myapp
sudo journalctl -u myapp -f

 

Configuración de Nginx como proxy inverso (terminación SSL)

Instalar Nginx y Certbot:

sudo apt install -y nginx certbot python3-certbot-nginx

Ejemplo de configuración de Nginx en /etc/nginx/sitios-disponibles/myapp Lugar:

server {
    listen 80;
    server_name example.com www.example.com;

    location / {
        proxy_pass         http://127.0.0.1:5000;
        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;
    }
}

Obtenga un certificado SSL gratuito:

sudo certbot --nginx -d example.com -d www.example.com

 

Implementación con Docker y Docker Compose

Ejemplo de Dockerfile de varios pasos para producir una imagen pequeña y optimizada:

FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build
WORKDIR /src
COPY . .
RUN dotnet publish -c Release -o /app

FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS runtime
WORKDIR /app
COPY --from=build /app .
ENTRYPOINT ["dotnet", "MyApp.dll"]

Ejemplo docker-compose.yml (también puedes usar nginx-proxy o Traefik):

version: '3.8'
services:
  web:
    build: .
    ports:
      - "5000"
    environment:
      - ASPNETCORE_ENVIRONMENT=Production
  nginx:
    image: nginx:stable
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/conf.d:/etc/nginx/conf.d
      - ./certs:/etc/letsencrypt

Para CI/CD, use GitLab CI o GitHub Actions para compilar, probar e implementar imágenes en el registro y luego subirlas al servidor. Nuestra empresa ofrece alojamiento de GitLab para equipos privados.

 

Seguridad y mejores prácticas

 

Red y firewall

Abra solo los puertos esenciales (80/443) y limite el acceso SSH a las direcciones requeridas.

sudo ufw allow 80,443/tcp
sudo ufw allow from 203.0.113.0/24 to any port 22 proto tcp  # مثال
sudo ufw enable

 

TLS y endurecimiento

 

Ataques y protección

Utilice fail2ban para proteger SSH y la limitación de velocidad en Nginx. Utilice servidores anti-DDoS para aplicaciones sensibles; nuestra empresa ofrece paquetes anti-DDoS y CDN con BGP.

 

SELinux / AppArmor

En distribuciones con SELinux habilitado (RHEL/CentOS), asegúrese de que los contextos de archivos y puertos estén configurados correctamente. En otras distribuciones, use AppArmor para la generación de perfiles; no se recomienda el apagado permanente.

 

Optimización y monitorización del rendimiento

 

Configuración de conexión y sintonización de Kestrel

Utilice HTTP/2 y Keep-Alive en la capa de proxy inverso. Tenga en cuenta las limitaciones de Kestrel en ajustes de la aplicación.json Establecer (por ejemplo, Limits.MaxConcurrentConnections, MaxRequestBodySize).

Utilice la compresión de respuestas (Brotli/Gzip) para comprimir las respuestas:

servicios.AddResponseCompression(opciones => { opciones.EnableForHttps = true; });

 

Caché y reuniones

Utilice Redis para la caché distribuida y el estado de la sesión para permitir el escalamiento horizontal. Utilice CDN para contenido estático y así reducir la carga del servidor.

 

Monitoreo y registro

Combine el registro estructurado con Serilog o Microsoft.Extensions.Logging y envíelo a ELK/Graylog. Para las métricas, utilice dotnet-counters, el exportador de Prometheus (dotnet_exporter) y Grafana. Un APM como Application Insights es útil para el seguimiento.

 

Comparar ubicaciones y elegir la correcta según la aplicación

Para operar, es importante un ping bajo y la estabilidad: elige una ubicación cercana a plataformas de intercambio o redes privadas. Para jugar, se recomiendan servidores regionales y VPS para juegos con una red de alta velocidad.

Para IA y renderizado, utilice GPU Cloud y servidores de cómputo con NVMe y alto ancho de banda. Para sitios web y aplicaciones, se recomienda una ubicación cercana a los usuarios principales y una combinación de CDN y multiregión para una mejor disponibilidad. Nuestra empresa ofrece más de 85 ubicaciones globales y una red CDN y BGP.

 

Alta escalabilidad y disponibilidad

Utilice un balanceador de carga de capa 7 (Nginx/HAProxy/Cloud LB) o un balanceador de carga de centro de datos. Almacene las sesiones en Redis o en una base de datos compartida. Horizontalice los contenedores y las máquinas virtuales para el escalado automático; utilice HPA en Kubernetes. Utilice BGP anycast y CDN para la distribución global del tráfico.

 

Correcciones de errores comunes

Casos comunes y métodos de examen:

  • 502 Puerta de enlace incorrecta: verifique systemd con journalctl -u miaplicación, puerto local con ss-tlnp y permisos de archivos.
  • Problema con SSL: Comprobar renovación de certbot, acceder a la carpeta cert y referenciarla correctamente en Nginx.
  • Errores de archivo/permiso: Verifique el propietario/grupo correcto para el usuario del servicio.
  • Lentitud inesperada: utilice dotnet-counters y profiler para encontrar cuellos de botella en la CPU o en el GC.

 

Consejos prácticos para la producción (DevOps)

  • Utilice compilaciones Docker de varias etapas para reducir el tamaño de la imagen.
  • Almacene secretos en un administrador de secretos (Vault, secretos de GitLab CI).
  • Escriba puntos finales de salud y configure la actividad/preparación para el orquestador.
  • Realice automatización de compilación/prueba/implementación con GitLab CI o GitHub Actions.

 

Resumen y ofertas de servicios

Alojar ASP.NET Core en Linux es una opción **escalable, segura y extensible** para aplicaciones web y API. Para un alto rendimiento y disponibilidad, se recomienda implementar la aplicación con Kestrel + Nginx o en un contenedor con orquestador, priorizar TLS y el endurecimiento, usar Redis/DB para el estado y una CDN para el contenido estático.

Con más de 85 ubicaciones globales, GPU Cloud, servidores dedicados y de cómputo, VPS comerciales y de juegos, infraestructura anti-DDoS, alojamiento GitLab, CDN y red BGP, nuestra empresa ofrece soluciones de alojamiento y soporte para aplicaciones ASP.NET Core con diferentes planes.

También te puede gustar