Docker: Produktionsplattform

Diese Dokumentation ist Teil des Node.js-Leitfadens. Den vollständigen Leitfaden finden Sie hier: Wie man eine Node.js-App mit Docker nutzt und bereitstellt.

👋 Willkommen in der Stackhero-Dokumentation!

Stackhero bietet eine einsatzbereite Docker Cloud CaaS (Containers as a Service) Lösung, die zahlreiche Vorteile bietet, darunter:

  • Einfache Bereitstellung Ihrer Container in der Produktion mit nur einem docker-compose up.
  • Anpassbarer Domainname gesichert mit HTTPS (zum Beispiel, https://api.ihre-firma.com, https://www.ihre-firma.com, https://backoffice.ihre-firma.com).
  • Optimale Leistung und robuste Sicherheit durch eine private und dedizierte VM.
  • Mühelose Updates mit nur einem Klick.

Sparen Sie Zeit und vereinfachen Sie Ihr Leben: Es dauert nur 5 Minuten, um die Docker CaaS Cloud Hosting Lösung von Stackhero auszuprobieren und Ihre Container in der Produktion bereitzustellen!

Wenn Sie noch keinen Stackhero for Docker-Dienst haben, können Sie einen einfach über Ihr Stackhero-Dashboard erstellen. Er wird innerhalb von etwa 2 Minuten aktiviert.

Wenn Sie neu bei Stackhero sind, können Sie das Docker-Container-Cloud-Hosting einen Monat lang kostenlos ausprobieren.

Bevor Sie Ihre App in der Produktion bereitstellen, müssen Sie einige Konfigurationsdateien vorbereiten:

  1. Kopieren Sie secrets/global.production.example nach secrets/global.production.
  2. Bearbeiten Sie secrets/global.production und ersetzen Sie <XXXXXX>.stackhero-network.com durch den Hostnamen Ihres Docker-Dienstes aus Ihrem Stackhero-Dashboard.
  3. Kopieren Sie secrets/my-app.production.example nach secrets/my-app.production.
  4. Bearbeiten Sie secrets/my-app.production und fügen Sie Ihre Anmeldeinformationen ein.
  5. Aktualisieren Sie docker/docker-compose.production.yml, indem Sie <XXXXXX>.stackhero-network.com durch den Hostnamen Ihres Docker-Dienstes ersetzen.

Die Bereitstellung in der Produktion ist einfach: führen Sie aus:

make production-deploy

Dieser Befehl erstellt einen Docker-Container, überträgt Ihre Projektdaten und sendet sie an Ihren Docker-Dienst in der Produktion. Öffnen Sie Ihren Browser und navigieren Sie zu Ihrem Docker-Dienst-Hostname (z. B. https://<XXXXXX>.stackhero-network.com). Sie sollten sehen, dass Ihre REST-API "Hello World" antwortet.

Sie können auch make production verwenden, das Ihre Container bereitstellt und Echtzeitprotokolle anzeigt.

Um Ihre Produktionsumgebung zu überwachen oder Probleme zu beheben, können Sie Ihre Protokolle mit diesen Befehlen anzeigen:

  • Um Live-Protokolle zu streamen, führen Sie aus: make production-logs-live
  • Um alle gespeicherten Protokolle abzurufen, führen Sie aus: make production-logs
  • Um Protokolle für einen bestimmten Tag abzurufen (ersetzen Sie YYYY-MM-DD durch das gewünschte Datum), führen Sie aus: make production-logs | grep "YYYY-MM-DD"

Wenn Sie einen anderen Domainnamen als https://<XXXXXX>.stackhero-network.com verwenden möchten, integriert Stackhero for Docker Traefik, um die Domainverwaltung zu vereinfachen. Traefik übernimmt das HTTP-Routing und die TLS-Verschlüsselung (HTTPS) für Sie.

Hier sind einige Beispiele, um Ihre Domainnamen anzupassen:

  • Um api.my-company.com über Ihren Container my-app auf Port 5000 mit TLS-Verschlüsselung bereitzustellen, aktualisieren Sie die Datei docker/docker-compose.production.yml, indem Sie den Abschnitt labels ersetzen mit:

        labels:
          - "traefik.enable=true" # Traefik aktivieren, um den Verkehr zu diesem Container zu leiten
          - "traefik.http.routers.my-app.rule=Host(`api.my-company.com`)" # Host definieren
          - "traefik.http.routers.my-app.tls.certresolver=letsencrypt" # Letsencrypt für TLS-Zertifikate verwenden
          - "traefik.http.services.my-app.loadbalancer.server.port=5000" # Port 5000 angeben
    
  • Um my-company.com über Ihren Container my-app auf Port 5000 bereitzustellen und alle Anfragen von www.my-company.com zu my-company.com umzuleiten, aktualisieren Sie den Abschnitt labels in derselben Datei mit:

        labels:
          - "traefik.enable=true"
          - "traefik.http.routers.my-app.rule=Host(`my-company.com`) || Host(`www.my-company.com`)" # Beide Domains einschließen
          - "traefik.http.routers.my-app.tls.certresolver=letsencrypt"
          - "traefik.http.services.my-app.loadbalancer.server.port=5000" # Port 5000 angeben
    
          # www.my-company.com zu my-company.com umleiten:
          - "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"
    

Vergessen Sie nicht, das DNS für my-company.com und www.my-company.com so zu konfigurieren, dass jeder als CNAME auf Ihren Docker-Dienst unter https://<XXXXXX>.stackhero-network.com zeigt.