Docker: 生產平台

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

👋 歡迎來到 Stackhero 文件!

Stackhero 提供一個即用型的 Docker cloud CaaS (Containers as a Service) 解決方案,帶來多種優勢,包括:

  • 只需 docker-compose up 即可輕鬆將您的容器部署到生產環境
  • 使用 HTTPS 保護的可自訂域名(例如,https://api.your-company.comhttps://www.your-company.comhttps://backoffice.your-company.com)。
  • 專用私有 VM提供的最佳性能和強大的安全性
  • 只需點擊即可輕鬆更新

節省時間簡化您的生活:只需 5 分鐘即可嘗試 Stackhero 的 Docker CaaS cloud hosting 解決方案,並將您的容器部署到生產環境!

如果您尚未擁有 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