Docker: 生产平台

本文档属于Node.js指南的一部分。您可以在此处查看完整指南:如何使用 Docker 部署 Node.js 应用

👋 欢迎使用 Stackhero 文档!

Stackhero 提供即用型 Docker 云 CaaS(容器即服务) 解决方案,具有众多优势,包括:

  • 只需一个 docker-compose up,即可轻松将您的容器部署到生产环境
  • 使用 HTTPS 保护的可定制域名(例如,https://api.your-company.comhttps://www.your-company.comhttps://backoffice.your-company.com)。
  • 私有和专用 VM提供的最佳性能和强大安全性
  • 只需点击即可轻松更新

节省时间简化您的生活:只需 5 分钟即可尝试 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)。

以下是自定义域名的几个示例:

  • 要通过端口 5000 上的容器 my-app 提供 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
    
  • 要通过端口 5000 上的容器 my-app 提供 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