Node.js: GitHub Actions でデプロイする

GitHub Actions を使って Node.js コードをデプロイする方法

👋 Stackhero ドキュメントへようこそ!

Stackhero は、すぐに使える Node.js クラウド 環境を提供し、開発スピードを加速します:

  • シンプルな git push だけで、数秒で本番環境にデプロイ。追加ツールや手動設定は不要です。
  • 独自ドメインを利用でき、自動 HTTPS 証明書により追加設定なしでアプリケーションのセキュリティを確保します。
  • 自動バックアップワンクリックアップデート予測可能な料金体系で、機能開発に集中できるよう Stackhero がインフラ管理を担当します。
  • プライベートかつ専用インフラ上に構築されており、安定したパフォーマンスと高いセキュリティを実現します。

運用負荷を削減し、時間を節約:わずか数分で Stackhero の Node.js クラウドホスティング 上でアプリケーションを稼働させることができます。

GitHub Actions を利用すると、Node.js コードを本番サーバーへデプロイするなどのタスクを簡単に自動化できます。このガイドでは、GitHub Actions を使って Node.js アプリケーションをステージング環境と本番環境の両方に安全かつ確実にデプロイする手順を解説します。

stagingproduction の2つのブランチを運用することを推奨します。これらのブランチのいずれかにコードをプッシュすると、対応する Stackhero サービスへ自動的にデプロイされます。

ステージング環境の用意は必須ではありません。 本ガイドは本番環境のみでもご利用いただけますが、デプロイを円滑にし、本番公開前に十分な検証を行うためにも、ステージングと本番の両環境を運用することを強く推奨します。 この運用方法は業界でも広く採用されており、よくあるデプロイの問題を防ぐのに役立ちます。

始める前に、GitHub アカウントと Node.js コードをホストしているリポジトリがあることをご確認ください。

まず、Stackhero ダッシュボードにサインインし、ステージング用と本番用の2つの Stackhero サービスを作成します。分かりやすくするために、サービス名を「Staging」と「Production」としておくと良いでしょう。

まだ Stackhero アカウントをお持ちでない場合は、 無料で2分ほどで作成でき、Node.js クラウドサービスも数クリックでセットアップできます。

Node.js サービスの例Node.js サービスの例

SSH キーは、GitHub Actions がデプロイ時に Node.js サービスへ安全に接続するために必要です。このステップは Stackhero サービスのセキュリティ確保に不可欠です。

お使いのコンピュータで、以下のコマンドで新しい SSH キーを生成できます:

ssh-keygen -C "" -f /tmp/ssh_key -N ""

作成した公開鍵を確認するには、次のコマンドを実行します:

cat /tmp/ssh_key.pub

次に、Stackhero ダッシュボードで本番用 Node.js サービスを選択し、Configure ボタンをクリックします。

サービス設定の取得サービス設定の取得

以下の手順を続けてください:

  1. SSH public keysAdd a public key をクリックします。
  2. Description には GitHub Action と入力します。
  3. Key には先ほどコピーした公開鍵を貼り付けます。

サービス設定の取得サービス設定の取得

次に GitHub に移動し、プロジェクトリポジトリを開きます。Settings をクリックし、Environments を選択します。New environment を作成してください。

GitHub 環境の設定GitHub 環境の設定

Name に「production」と入力し、確定します。

環境の設定環境の設定

No restriction ボタンをクリックし、Selected branches and tags を選択します。

環境制限の設定環境制限の設定

Add deployment branch or tag rule をクリックし、Name pattern フィールドに「production」と入力して Add rule をクリックします。

環境ブランチの設定環境ブランチの設定

環境ブランチの設定環境ブランチの設定

Environment secretsAdd secret をクリックします。

シークレットの追加シークレットの追加

生成した秘密鍵を取得するには、次のコマンドを実行します:

cat /tmp/ssh_key

GitHub では NameSTACKHERO_SSH_PRIVATE_KEY を指定し、Value フィールドに秘密鍵を貼り付けてください。

SSH 秘密鍵シークレットの設定SSH 秘密鍵シークレットの設定

続いて Environment variablesAdd variable をクリックします。

変数の設定変数の設定

NameSTACKHERO_ENDPOINT を入力し、Value フィールドに Node.js サービスのエンドポイントを貼り付けます。エンドポイントは Stackhero ダッシュボードで確認できます。

エンドポイント変数の設定エンドポイント変数の設定

サービスにカスタムドメインを設定している場合は、<XXXXXX>.stackhero-network.com の代わりにご自身のカスタムドメインを使用してください。

セキュリティのため、Stackhero と GitHub への登録が完了したら、コンピュータ上の SSH キーを削除しておくことを推奨します:

rm /tmp/ssh_key /tmp/ssh_key.pub

Git リポジトリ内に .github/workflows ディレクトリがなければ作成し、deploy-to-stackhero.yml というファイルを追加します:

# File: .github/workflows/deploy-to-stackhero.yml

name: Deploy to Stackhero
run-name: Deploy branch "${{ github.ref_name }}" to Stackhero

on:
  push:
    # デプロイをトリガーするブランチをリストします。各ブランチに対応する GitHub 環境("Settings" > "Environments")を作成してください。
    # その環境に STACKHERO_SSH_PRIVATE_KEY シークレットと STACKHERO_ENDPOINT 変数を追加します。
    branches: [ "production", "staging" ]

jobs:
  Deploy:
    environment: ${{ github.ref_name }}
    runs-on: ubuntu-latest
    steps:
    - uses: stackhero-io/github-actions-deploy-to-stackhero@v1
      with:
        # STACKHERO_SSH_PRIVATE_KEY と STACKHERO_ENDPOINT は各 GitHub 環境で設定してください。
        ssh_private_key: ${{ secrets.STACKHERO_SSH_PRIVATE_KEY }}
        endpoint: ${{ vars.STACKHERO_ENDPOINT }}

ワークフローファイルを作成したら、次のようにコミットします:

git add -A .
git commit -m "Add GitHub Actions to deploy to Stackhero"

本番ブランチを作成するには:

git checkout -b production

その後、変更を GitHub にプッシュします:

git push --set-upstream origin production

このプッシュにより、コードが production ブランチに送信され、GitHub Actions が Stackhero サービスへのデプロイを自動的に実行します。デプロイ状況を確認するには、GitHub プロジェクトで Actions をクリックしてください。

本番環境へデプロイした GitHub Actions本番環境へデプロイした GitHub Actions

これで完了です。GitHub Actions を使った本番環境への自動デプロイが設定されました。

ステージング環境のセットアップも本番環境とほぼ同じです。必要に応じて productionstaging に置き換えて、上記の手順を繰り返してください。

まず、ステージングブランチを作成します:

git checkout -b staging

次に、ステージングブランチを GitHub にプッシュします:

git push --set-upstream origin staging

GitHub Actions により、staging ブランチが指定した Node.js サービスへ自動的にデプロイされます。

production および staging ブランチへの直接プッシュを防ぐため、これらのブランチを保護することを推奨します。開発ブランチからステージングブランチへのプルリクエストを作成し、ステージング環境で変更を検証した後、本番ブランチへマージする運用が理想的です。

このワークフローにより、認可されたコントリビューターのみがステージングや本番ブランチへプッシュできるようになり、新機能の本番公開前に追加のテスト工程を設けることができます。