PHP: GitHub Actionsでデプロイする
GitHub Actionsを使ってPHPコードをデプロイする方法
👋 Stackheroのドキュメントへようこそ!
Stackheroは、数多くの利点を提供する使いやすいPHPクラウドソリューションを提供しています。
- 簡単な
git pushでアプリケーションを数秒でデプロイ。- 独自のドメイン名を使用し、HTTPS証明書の自動設定による強化されたセキュリティを享受。
- 自動バックアップ、ワンクリックアップデート、そしてシンプルで透明性のある予測可能な価格設定で安心を提供。
- プライベートで専用のVMによる最適なパフォーマンスと強固なセキュリティを実現。
時間を節約し、生活を簡素化:StackheroのPHPクラウドホスティングソリューションを試すのに5分しかかかりません!
GitHub Actionsは、ワークフローの自動化を可能にする強力なツールであり、PHPコードを本番サーバーへ直接デプロイすることもできます。このガイドでは、GitHub Actionsを利用して、PHPアプリケーションをステージング環境および本番環境へ安全にデプロイする手順を解説します。
推奨される方法は、リポジトリ内にstagingとproductionの2つのブランチを維持することです。これらのブランチにコードをプッシュするたびに、対応するStackheroインスタンスへ自動的にデプロイされます。
ステージングインスタンスの用意は必須ではありません。ただし、ステージングと本番の両方のインスタンスを利用することは、スムーズなデプロイと本番環境への信頼性向上のために強く推奨されます。この運用は業界標準に沿っており、潜在的な問題の予防にも役立ちます。
まずは、GitHubアカウントと、PHPコードが格納されたリポジトリが必要です。
PHPサービスの作成
最初に、Stackheroダッシュボードにログインし、ステージング用と本番用の2つのPHPサービスを作成します。分かりやすくするために、これらのサービス名を「Production」と「Staging」に変更しておくと良いでしょう。
Stackheroアカウントをお持ちでない場合は、2分ほどで無料作成でき、数クリックでPHPクラウドサービスをセットアップできます。
本番・ステージングサービスの例
SSHキーの設定
SSHキーは、GitHub Actionsがデプロイ時にPHPサービスへ安全に接続するための推奨認証方法です。本ガイドでは、この用途専用のSSHキーペアを新規作成します。
SSHキーの生成
新しいSSHキーを生成するには、以下のコマンドをお使いのPCで実行してください:
ssh-keygen -C "" -f /tmp/ssh_key -N ""
公開鍵の設定
次に、公開鍵を取得するには以下を実行します:
cat /tmp/ssh_key.pub
Stackheroダッシュボードで「Production」PHPサービスを選択し、「Configure」をクリックして、以下の手順に従ってください:
SSH public keysの下で「Add a public key」をクリックします。Descriptionに「GitHub Action」と入力します。- 先ほど取得した公開鍵を
Key欄に貼り付けます。
サービス設定の取得
秘密鍵の設定
次に、デプロイ時に利用できるよう、秘密鍵をGitHubプロジェクトに追加します:
-
Settingsに移動し、Environmentsを選択してNew environmentをクリックします。
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環境設定画面で:
-
NameにSTACKHERO_SSH_PRIVATE_KEYと入力し、Value欄に秘密鍵を貼り付けます。
SSH秘密鍵シークレットの設定 -
Environment variablesセクションでAdd variableをクリックします。
変数の設定 -
NameにSTACKHERO_ENDPOINTと入力し、Value欄にPHPサービスのエンドポイントを貼り付けます。エンドポイントはStackheroダッシュボードで確認できます。
エンドポイント変数の設定
サービスのドメイン名をカスタマイズしている場合は、<XXXXXX>.stackhero-network.comの代わりにカスタマイズしたドメインを使用してください。
生成した鍵の削除
セキュリティ上の理由から、セットアップ後はPC上のSSH鍵を削除しておくことを推奨します:
rm /tmp/ssh_key /tmp/ssh_key.pub
GitHub Actionsワークフローの設定
次に、デプロイを自動化するための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を使った本番環境への自動デプロイが設定できました。
ステージング環境の作成
ステージング環境も本番環境と同様の手順で設定できます。必要に応じてproductionをstagingに置き換えて、上記の手順を繰り返してください。
設定が完了したら、以下のようにしてステージングブランチを作成します:
git checkout -b staging
そしてGitHubへプッシュします:
git push --set-upstream origin staging
GitHub Actionsは、ステージングブランチのコードを自動的に設定済みのPHPサービス(ステージング用)へデプロイします。
さらに進んだ運用
アプリケーションの信頼性とセキュリティを高めるために、productionおよびstagingブランチへの直接プッシュを禁止することを推奨します。たとえば、変更は必ずプルリクエスト経由で行い、stagingブランチはデプロイ権限を持つメンバーのみがレビュー・マージできるように設定することができます。ステージングで変更が検証された後、認可されたユーザーがproductionブランチへマージする運用です。
この方法により、十分に確認されたコードのみが本番環境へ反映され、新機能も本番公開前にステージングでテストできるため、チーム全体の安心感が高まります。