PHP: GitHub Actionsでデプロイする

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

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

Stackheroは、数多くの利点を提供する使いやすいPHPクラウドソリューションを提供しています。

  • 簡単なgit pushでアプリケーションを数秒でデプロイ
  • 独自のドメイン名を使用し、HTTPS証明書の自動設定による強化されたセキュリティを享受。
  • 自動バックアップワンクリックアップデート、そしてシンプルで透明性のある予測可能な価格設定で安心を提供。
  • プライベートで専用のVMによる最適なパフォーマンスと強固なセキュリティを実現。

時間を節約し、生活を簡素化:StackheroのPHPクラウドホスティングソリューションを試すのに5分しかかかりません

GitHub Actionsは、ワークフローの自動化を可能にする強力なツールであり、PHPコードを本番サーバーへ直接デプロイすることもできます。このガイドでは、GitHub Actionsを利用して、PHPアプリケーションをステージング環境および本番環境へ安全にデプロイする手順を解説します。

推奨される方法は、リポジトリ内にstagingproductionの2つのブランチを維持することです。これらのブランチにコードをプッシュするたびに、対応するStackheroインスタンスへ自動的にデプロイされます。

ステージングインスタンスの用意は必須ではありません。ただし、ステージングと本番の両方のインスタンスを利用することは、スムーズなデプロイと本番環境への信頼性向上のために強く推奨されます。この運用は業界標準に沿っており、潜在的な問題の予防にも役立ちます。

まずは、GitHubアカウントと、PHPコードが格納されたリポジトリが必要です。

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

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

本番・ステージングサービスの例本番・ステージングサービスの例

SSHキーは、GitHub Actionsがデプロイ時にPHPサービスへ安全に接続するための推奨認証方法です。本ガイドでは、この用途専用のSSHキーペアを新規作成します。

新しいSSHキーを生成するには、以下のコマンドをお使いのPCで実行してください:

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

次に、公開鍵を取得するには以下を実行します:

cat /tmp/ssh_key.pub

Stackheroダッシュボードで「Production」PHPサービスを選択し、「Configure」をクリックして、以下の手順に従ってください:

  1. SSH public keysの下で「Add 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 secretsセクションでAdd secretをクリックします。

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

先ほど生成した秘密鍵を取得するには、以下を実行します:

cat /tmp/ssh_key

GitHub環境設定画面で:

  • NameSTACKHERO_SSH_PRIVATE_KEYと入力し、Value欄に秘密鍵を貼り付けます。

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

  • Environment variablesセクションでAdd variableをクリックします。

    変数の設定変数の設定

  • NameSTACKHERO_ENDPOINTと入力し、Value欄にPHPサービスのエンドポイントを貼り付けます。エンドポイントはStackheroダッシュボードで確認できます。

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

サービスのドメイン名をカスタマイズしている場合は、<XXXXXX>.stackhero-network.comの代わりにカスタマイズしたドメインを使用してください。

セキュリティ上の理由から、セットアップ後はPC上のSSH鍵を削除しておくことを推奨します:

rm /tmp/ssh_key /tmp/ssh_key.pub

次に、デプロイを自動化するためのGitHub Actionsワークフローファイルを作成します。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:
    # git 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環境("Settings" -> "Environments")で定義してください
        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

これで、コードがGitHub上の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は、ステージングブランチのコードを自動的に設定済みのPHPサービス(ステージング用)へデプロイします。

アプリケーションの信頼性とセキュリティを高めるために、productionおよびstagingブランチへの直接プッシュを禁止することを推奨します。たとえば、変更は必ずプルリクエスト経由で行い、stagingブランチはデプロイ権限を持つメンバーのみがレビュー・マージできるように設定することができます。ステージングで変更が検証された後、認可されたユーザーがproductionブランチへマージする運用です。

この方法により、十分に確認されたコードのみが本番環境へ反映され、新機能も本番公開前にステージングでテストできるため、チーム全体の安心感が高まります。