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 solución Docker cloud CaaS (Containers as a Service) lista para usar que proporciona una serie de beneficios, incluyendo:

  • Despliega fácilmente tus contenedores en producción con solo un docker-compose up.
  • Nombre de dominio personalizable asegurado con HTTPS (por ejemplo, https://api.tu-empresa.com, https://www.tu-empresa.com, https://backoffice.tu-empresa.com).
  • Rendimiento óptimo y seguridad robusta gracias a una VM privada y dedicada.
  • Actualizaciones sin esfuerzo con solo un clic.

Ahorra tiempo y simplifica tu vida: ¡solo toma 5 minutos probar la solución de alojamiento en la nube Docker CaaS de Stackhero y desplegar tus contenedores en producción!

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.