Docker: 本番プラットフォーム

このドキュメントはNode.jsガイドの一部です。完全なガイドはこちらからご覧いただけます:Dockerを使用してNode.jsアプリを利用・デプロイする方法

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 など)。
  • プライベートかつ専用インフラ上で、高いパフォーマンスと堅牢なセキュリティを実現します。
  • ワンクリックでアップデートを適用でき、シンプルかつ手間のかからないメンテナンスが可能です。

約5分でコンテナを本番環境で稼働させることができます。Stackheroがインフラ、アップデート、セキュリティを管理するため、アプリケーション開発に集中できます。Docker CaaSクラウドホスティングの詳細もご覧ください。

まだStackhero for Dockerサービスをお持ちでない場合は、Stackheroダッシュボードから簡単に作成できます。約2分でアクティブになります。

Stackheroが初めての方は、Dockerコンテナクラウドホスティングを1か月間無料でお試しいただけます。

アプリを本番環境にデプロイする前に、いくつかの設定ファイルを準備する必要があります:

  1. secrets/global.production.examplesecrets/global.productionにコピーします。
  2. secrets/global.productionを編集し、Stackheroダッシュボードから取得したDockerサービスのホスト名で<XXXXXX>.stackhero-network.comを置き換えます。
  3. secrets/my-app.production.examplesecrets/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)を処理します。

ドメイン名をカスタマイズするためのいくつかの例を以下に示します:

  • api.my-company.comをポート5000でTLS暗号化を使用してコンテナmy-app経由で提供するには、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" # TLS証明書にletsencryptを使用する
          - "traefik.http.services.my-app.loadbalancer.server.port=5000" # ポート5000を指定する
    
  • my-company.comをポート5000でコンテナmy-app経由で提供し、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を設定し、それぞれがCNAMEとしてhttps://<XXXXXX>.stackhero-network.comのDockerサービスを指すようにすることを忘れないでください。