Docker: 生產平台

本文件是Node.js指南的一部分。請在此處查看完整指南:如何使用及部署 Node.js 應用程式與 Docker

歡迎來到 Stackhero 文件中心

Stackhero 提供一個即時可用的 Docker 雲端 CaaS(Containers as a Service) 平台,專為快速且可靠的容器部署而設計:

  • 只需一行 docker-compose up 指令即可部署到生產環境。無需額外設定:直接啟動您的容器即可。
  • 自行選擇您的網域名稱,系統會自動以 HTTPS 進行安全防護(例如:https://api.your-company.comhttps://www.your-company.comhttps://backoffice.your-company.com)。
  • 享有高效能與強大安全性的專屬私有基礎架構。
  • 一鍵套用更新,讓維護變得簡單且省時。

您的容器大約五分鐘內即可在生產環境上線。Stackhero 為您管理基礎架構、更新與安全性,讓您能專注於應用程式的交付。深入了解 Docker CaaS 雲端主機服務

如果您尚未擁有 Stackhero for Docker 服務,您可以從您的 Stackhero 儀表板輕鬆創建一個。它將在大約 2 分鐘內激活。

如果您是 Stackhero 的新用戶,您可以免費試用 Docker 容器雲託管 一個月。

在將應用程式部署到生產環境之前,您需要準備一些配置文件:

  1. secrets/global.production.example 複製到 secrets/global.production
  2. 編輯 secrets/global.production 並將 <XXXXXX>.stackhero-network.com 替換為來自 Stackhero 儀表板的 Docker 服務主機名。
  3. secrets/my-app.production.example 複製到 secrets/my-app.production
  4. 編輯 secrets/my-app.production 並插入您的憑證。
  5. 更新 docker/docker-compose.production.yml,將 <XXXXXX>.stackhero-network.com 替換為您的 Docker 服務主機名。

部署到生產環境很簡單:運行:

make production-deploy

此命令創建 Docker 容器,傳輸您的項目數據,並將其發送到生產環境中的 Docker 服務。打開瀏覽器並導航到您的 Docker 服務主機名(例如,https://<XXXXXX>.stackhero-network.com)。您應該看到您的 REST API 回應 "Hello World"。

您也可以使用 make production,它會部署您的容器並顯示實時日誌。

要監控您的生產環境或排除故障,您可以使用以下命令查看日誌:

  • 要流式傳輸實時日誌,運行:make production-logs-live
  • 要檢索所有存儲的日誌,運行:make production-logs
  • 要檢索特定日期的日誌(將 YYYY-MM-DD 替換為所需日期),運行:make production-logs | grep "YYYY-MM-DD"

如果您希望使用不同於 https://<XXXXXX>.stackhero-network.com 的域名,Stackhero for Docker 集成了 Traefik 以簡化域名管理。Traefik 為您處理 HTTP 路由和 TLS 加密(HTTPS)。

以下是自定義域名的幾個示例:

  • 要通過您的容器 my-app 在端口 5000 上提供 api.my-company.com 並使用 TLS 加密,請更新 docker/docker-compose.production.yml 文件,將 labels 部分替換為:

        labels:
          - "traefik.enable=true" # 啟用 Traefik 以路由流量到此容器
          - "traefik.http.routers.my-app.rule=Host(`api.my-company.com`)" # 定義主機
          - "traefik.http.routers.my-app.tls.certresolver=letsencrypt" # 使用 letsencrypt 獲取 TLS 證書
          - "traefik.http.services.my-app.loadbalancer.server.port=5000" # 指定端口 5000
    
  • 要通過您的容器 my-app 在端口 5000 上提供 my-company.com 並將所有來自 www.my-company.com 的請求重定向到 my-company.com,請在同一文件中更新 labels 部分:

        labels:
          - "traefik.enable=true"
          - "traefik.http.routers.my-app.rule=Host(`my-company.com`) || Host(`www.my-company.com`)" # 包含兩個域名
          - "traefik.http.routers.my-app.tls.certresolver=letsencrypt"
          - "traefik.http.services.my-app.loadbalancer.server.port=5000" # 指定端口 5000
    
          # 將 www.my-company.com 重定向到 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"
    

不要忘記為 my-company.comwww.my-company.com 配置 DNS,以便每個都指向您的 Docker 服務的 CNAME https://<XXXXXX>.stackhero-network.com