Docker: Plataforma de producción

Esta documentación forma parte de la guía Node.js. Consulte la guía completa aquí: Cómo usar y desplegar una aplicación Node.js con Docker.

Bienvenido a la documentación de Stackhero

Stackhero ofrece una plataforma Docker cloud CaaS (Containers as a Service) lista para usar, diseñada para despliegues de contenedores rápidos y fiables:

  • Despliegue en producción con un simple docker-compose up. No necesita configuración adicional: simplemente inicie sus contenedores.
  • Elija su propio nombre de dominio, asegurado automáticamente con HTTPS (por ejemplo: https://api.su-empresa.com, https://www.su-empresa.com o https://backoffice.su-empresa.com).
  • Disfrute de un alto rendimiento y una seguridad robusta sobre infraestructura privada y dedicada.
  • Aplique actualizaciones con un solo clic para un mantenimiento sencillo y sin complicaciones.

Puede tener sus contenedores en producción en unos cinco minutos. Stackhero gestiona la infraestructura, las actualizaciones y la seguridad por usted, para que pueda centrarse en el desarrollo de sus aplicaciones. Lea más sobre el alojamiento cloud Docker CaaS.

Si aún no tiene un servicio Stackhero for Docker, puede crear uno fácilmente desde su panel de Stackhero. Se activará en aproximadamente 2 minutos.

Si es nuevo en Stackhero, puede probar el alojamiento en la nube de contenedores Docker gratis durante un mes.

Antes de desplegar su aplicación en producción, necesita preparar algunos archivos de configuración:

  1. Copie secrets/global.production.example a secrets/global.production.
  2. Edite secrets/global.production y reemplace <XXXXXX>.stackhero-network.com con el nombre de host de su servicio Docker desde su panel de Stackhero.
  3. Copie secrets/my-app.production.example a secrets/my-app.production.
  4. Edite secrets/my-app.production e inserte sus credenciales.
  5. Actualice docker/docker-compose.production.yml reemplazando <XXXXXX>.stackhero-network.com con el nombre de host de su servicio Docker.

Desplegar en producción es sencillo: ejecute:

make production-deploy

Este comando crea un contenedor Docker, transfiere los datos de su proyecto y los envía a su servicio Docker en producción. Abra su navegador y navegue al nombre de host de su servicio Docker (por ejemplo, https://<XXXXXX>.stackhero-network.com). Debería ver su API REST responder "Hello World".

También puede usar make production, que despliega sus contenedores y muestra logs en tiempo real.

Para monitorear su entorno de producción o solucionar problemas, puede ver sus logs usando estos comandos:

  • Para transmitir logs en vivo, ejecute: make production-logs-live
  • Para recuperar todos los logs almacenados, ejecute: make production-logs
  • Para recuperar logs de un día específico (reemplace YYYY-MM-DD con la fecha deseada), ejecute: make production-logs | grep "YYYY-MM-DD"

Si desea usar un nombre de dominio diferente a https://<XXXXXX>.stackhero-network.com, Stackhero for Docker integra Traefik para simplificar la gestión de dominios. Traefik maneja el enrutamiento HTTP y el cifrado TLS (HTTPS) por usted.

Aquí hay un par de ejemplos para personalizar sus nombres de dominio:

  • Para servir api.my-company.com a través de su contenedor my-app en el puerto 5000 con cifrado TLS, actualice el archivo docker/docker-compose.production.yml reemplazando la sección labels con:

        labels:
          - "traefik.enable=true" # Habilitar Traefik para enrutar el tráfico a este contenedor
          - "traefik.http.routers.my-app.rule=Host(`api.my-company.com`)" # Definir el host
          - "traefik.http.routers.my-app.tls.certresolver=letsencrypt" # Usar letsencrypt para certificados TLS
          - "traefik.http.services.my-app.loadbalancer.server.port=5000" # Especificar el puerto 5000
    
  • Para servir my-company.com a través de su contenedor my-app en el puerto 5000 y redirigir todas las solicitudes de www.my-company.com a my-company.com, actualice la sección labels en el mismo archivo con:

        labels:
          - "traefik.enable=true"
          - "traefik.http.routers.my-app.rule=Host(`my-company.com`) || Host(`www.my-company.com`)" # Incluir ambos dominios
          - "traefik.http.routers.my-app.tls.certresolver=letsencrypt"
          - "traefik.http.services.my-app.loadbalancer.server.port=5000" # Especificar el puerto 5000
    
          # Redirigir www.my-company.com a my-company.com:
          - "traefik.http.routers.my-app.middlewares=redirect-www"
          - "traefik.http.middlewares.redirect-www.redirectregex.regex=^https://www.my-company.com/(.*)"
          - "traefik.http.middlewares.redirect-www.redirectregex.replacement=https://my-company.com/$${1}"
          - "traefik.http.middlewares.redirect-www.redirectregex.permanent=true"
    

No olvide configurar el DNS para my-company.com y www.my-company.com para que cada uno apunte como un CNAME a su servicio Docker en https://<XXXXXX>.stackhero-network.com.