Docker: Piattaforma di produzione

Questa documentazione fa parte della guida Node.js. Consulta la guida completa qui: Come utilizzare e distribuire un'app Node.js con Docker.

👋 Benvenuti nella documentazione di Stackhero!

Stackhero offre una soluzione Docker cloud CaaS (Containers as a Service) pronta all'uso che fornisce numerosi vantaggi, tra cui:

  • Distribuisci facilmente i tuoi container in produzione con un semplice docker-compose up.
  • Nome di dominio personalizzabile protetto con HTTPS (ad esempio, https://api.tua-azienda.com, https://www.tua-azienda.com, https://backoffice.tua-azienda.com).
  • Prestazioni ottimali e sicurezza robusta grazie a una VM privata e dedicata.
  • Aggiornamenti senza sforzo con un solo clic.

Risparmia tempo e semplifica la tua vita: bastano 5 minuti per provare la soluzione di hosting cloud Docker CaaS di Stackhero e distribuire i tuoi container in produzione!

Se non hai ancora un servizio Stackhero for Docker, puoi crearne uno facilmente dal tuo dashboard Stackhero. Sarà attivato in circa 2 minuti.

Se sei nuovo su Stackhero, puoi provare l'hosting cloud di container Docker gratuitamente per un mese.

Prima di distribuire la tua app in produzione, devi preparare alcuni file di configurazione:

  1. Copia secrets/global.production.example in secrets/global.production.
  2. Modifica secrets/global.production e sostituisci <XXXXXX>.stackhero-network.com con il nome host del tuo servizio Docker dal tuo dashboard Stackhero.
  3. Copia secrets/my-app.production.example in secrets/my-app.production.
  4. Modifica secrets/my-app.production e inserisci le tue credenziali.
  5. Aggiorna docker/docker-compose.production.yml sostituendo <XXXXXX>.stackhero-network.com con il nome host del tuo servizio Docker.

Distribuire in produzione è semplice: esegui:

make production-deploy

Questo comando crea un container Docker, trasferisce i dati del tuo progetto e li invia al tuo servizio Docker in produzione. Apri il tuo browser e naviga verso il nome host del tuo servizio Docker (ad esempio, https://<XXXXXX>.stackhero-network.com). Dovresti vedere la tua API REST rispondere "Hello World".

Puoi anche usare make production, che distribuisce i tuoi container e mostra i log in tempo reale.

Per monitorare il tuo ambiente di produzione o risolvere problemi, puoi visualizzare i tuoi log usando questi comandi:

  • Per trasmettere i log in diretta, esegui: make production-logs-live
  • Per recuperare tutti i log memorizzati, esegui: make production-logs
  • Per recuperare i log di un giorno specifico (sostituisci YYYY-MM-DD con la data desiderata), esegui: make production-logs | grep "YYYY-MM-DD"

Se desideri utilizzare un nome di dominio diverso da https://<XXXXXX>.stackhero-network.com, Stackhero for Docker integra Traefik per semplificare la gestione dei domini. Traefik gestisce il routing HTTP e la crittografia TLS (HTTPS) per te.

Ecco alcuni esempi per personalizzare i tuoi nomi di dominio:

  • Per servire api.my-company.com tramite il tuo container my-app sulla porta 5000 con crittografia TLS, aggiorna il file docker/docker-compose.production.yml sostituendo la sezione labels con:

        labels:
          - "traefik.enable=true" # Abilita Traefik per instradare il traffico verso questo container
          - "traefik.http.routers.my-app.rule=Host(`api.my-company.com`)" # Definisci l'host
          - "traefik.http.routers.my-app.tls.certresolver=letsencrypt" # Usa letsencrypt per i certificati TLS
          - "traefik.http.services.my-app.loadbalancer.server.port=5000" # Specifica la porta 5000
    
  • Per servire my-company.com tramite il tuo container my-app sulla porta 5000 e reindirizzare tutte le richieste da www.my-company.com a my-company.com, aggiorna la sezione labels nello stesso file con:

        labels:
          - "traefik.enable=true"
          - "traefik.http.routers.my-app.rule=Host(`my-company.com`) || Host(`www.my-company.com`)" # Includi entrambi i domini
          - "traefik.http.routers.my-app.tls.certresolver=letsencrypt"
          - "traefik.http.services.my-app.loadbalancer.server.port=5000" # Specifica la porta 5000
    
          # Reindirizza 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"
    

Non dimenticare di configurare il DNS per my-company.com e www.my-company.com in modo che ciascuno punti come CNAME al tuo servizio Docker su https://<XXXXXX>.stackhero-network.com.