GitHub CI/CD
GitHub CI/CD(継続的インテグレーション/継続的デリバリー、または継続的デプロイメント)により、コミットが指定のブランチにプッシュされるたびに、Kinstaサイトにコード変更を自動的にデプロイすることができます。この設定により、SSHとGitHub Actionsを介してローカル環境からシームレスなコードのデプロイメント、ひいてはサイトへの継続的な更新が可能になります。
以下の手順には、弊社でホスティングする既存のサイトとGitHubアカウントが必要です。
1. サイトのバックアップをダウンロードする
サイトのバックアップをダウンロードし、GitHubリポジトリをセットアップして、ローカルで作業を行うことができます。DevKinstaを使用して弊社サーバーからサイトを取り込むことも可能です。
MyKinstaで「WordPressサイト」>(サイト名)>「バックアップ」に移動し、「ダウンロード」タブを選択して、「ファイルを生成する」をクリックします。
バックアップファイルの準備ができたら、「ダウンロード」をクリックしてローカルコンピュータに保存し、フォルダに解凍します。
2. GitHubリポジトリを設定する
任意のコードエディターでサイトのファイルを含むフォルダを開きます。不要なWordPressコアファイルやメディア、機密情報などのアップロードを防ぐため、プロジェクトのルートディレクトリに.gitignoreファイルを追加します。WordPress標準の.gitignoreテンプレートを使用し、その内容をコピーして保存することで、必要なファイルだけが追跡されるようになります。
GitHubリポジトリを作成し、サイトのファイルをGitHubにプッシュします。
3. Kinsta用のGitHubのシークレットを設定する
GitHubから弊社へのデプロイを自動化するには、ユーザー名、パスワード、ポート、IPアドレスなどのSSHの認証情報が必要になります。これらは機密情報であるため、GitHubのシークレットとして安全に保存してください。
GitHub内でリポジトリに移動し、「Settings」>「Secrets and variables」>「Actions」>「New repository secret」をクリックします。
MyKinstaのWordPressサイト「情報」画面の「SFTP/SSH」セクションの情報でシークレットを作成します。
シークレット名 | Secret |
KINSTA_SERVER_IP | ホスト(例:12.34.56.78) |
KINSTA_USERNAME | ユーザー名(例:kinstahelp) |
PASSWORD | パスワード |
PORT | ポート番号(例:12345) |
4. KinstaにGitベアリポジトリを作成する
Gitベアリポジトリは、GitHubがコードをプッシュするリモートリポジトリの役割を果たすものです。このリポジトリには作業ディレクトリがなく、中央リポジトリとしてコードを管理・保存する場所になります。
ターミナルを開いて、MyKinstaのWordPressサイト「情報」画面の「SSHターミナルのコマンド」を使用してSSHで弊社サーバーに接続します。
同画面の「環境情報」セクションで「パス」をコピーします。
public
をprivate
に、your-site
をサイトのパスにある実際のフォルダ名に置き換えて、サーバー上のprivateフォルダに移動します。
cd /www/your-site/private
privateフォルダが存在しない場合は、以下のコマンドを実行して作成します。
mkdir -p /www/your-site/private
your-repo.git
をGitHubリポジトリ名に置き換えて、以下のコマンドでGitベアリポジトリを作成します。
git init --bare your-repo.git
5. コード受信後のフックを設定する
post-receive
フックは、GitHubのmain
ブランチに変更がプッシュされた際に自動的にコードを本番サイトにデプロイします。
Gitベアリポジトリのhooksディレクトリに移動して、your-site
をサイトのフォルダ名に、your-repo
をGitHubリポジトリ名に置き換えます。
cd /www/your-site/private/your-repo.git/hooks
post-receive
フックを作成して編集します。
nano post-receive
post-receive
ファイルに以下のスクリプトを貼り付けます。これで本番サイトのpublic
ディレクトリに最新のコードが反映されます。
#!/bin/bash
TARGET="/www/your-site/public"
GIT_DIR="/www/your-site/private/your-repo.git"
while read oldrev newrev ref
do
BRANCH=$(git rev-parse --symbolic --abbrev-ref $ref)
if [[ $BRANCH == "main" ]];
then
echo "Ref $ref を受信しました。 ${BRANCH} ブランチを本番環境にデプロイ中..."
git --work-tree=$TARGET --git-dir=$GIT_DIR checkout -f
else
echo "Ref $ref を受信しました。何もしません。このサーバーではmainブランチのみがデプロイ可能です。"
fi
done
上のスクリプトは、main
ブランチのコードのみをデプロイします。TARGET
変数は、本番サイトのファイルがあるディレクトリを、GIT_DIR
変数はベアリポジトリを指します。
Ctrl + X、次にY、最後にEnterを押してファイルを保存して終了します。
最後にスクリプトを実行可能にして、各プッシュ後に自動的に実行できるようにします。
chmod +x post-receive
6. 個人用アクセストークン(PAT)を生成・追加する
SSH経由でGitHubにコードをプッシュする際は、個人用アクセストークン(PAT)を使用して認証する必要があります。
個人用アクセストークンの作成手順は、以下のとおりです。
- GitHubアカウントにアクセスし、プロフィール画像をクリックして「Settings」を選択します。
- 「Developer settings」>「Personal access tokens」>「Tokens (classic)」をクリックします。
- 「Generate new token」>「Generate new token (classic)」をクリックし、「Note」で名前を付けます(「Kinsta Deployment Token」など)。
- 「Select scopes」で「repo」を選択します(プライベートリポジトリを完全に制御するため)。
- 「Generate token」をクリックしてトークンをコピーします。以降トークンは表示されることがないため、必ずコピーしてください。
以下のコマンドを実行して、GitHubリポジトリをリモートとして追加します。your-username
はGitHubのユーザー名、YOUR_PERSONAL_ACCESS_TOKEN
は先ほど生成した個人用アクセストークン、your-repo
はGitHubリポジトリ名に置き換えてください。
git remote add origin https://your-username:[email protected]/your-username/your-repo.git
7. GitHub Actionsのワークフローを作成する
以下のワークフローは、main
ブランチにプッシュするたびに変更を自動的に弊社にデプロイするものです。デプロイを自動化するには、YAMLファイルを使用してデプロイ方法を定義します。
自分のGitHubリポジトリで、このディレクトリ内に.github/workflows
というディレクトリとdeploy.yml
というファイルを作成します。your-site
はKinstaサイト上のパスにあるフォルダ名に、your-repo
はGitHubリポジトリ名に置き換えて次の内容を貼り付けます。
name: Deploy to Kinsta
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Deploy to Kinsta via SSH
uses: appleboy/[email protected]
with:
host: ${{ secrets.KINSTA_SERVER_IP }}
username: ${{ secrets.KINSTA_USERNAME }}
password: ${{ secrets.PASSWORD }}
port: ${{ secrets.PORT }}
script: |
cd /www/your-site/private/your-repo.git # KinstaのGitベアリポジトリに移動
git --work-tree=/www/your-site/public --git-dir=/www/your-site/private/your-repo.git fetch origin main # GitHubから最新の変更点を取得
git --work-tree=/www/your-site/public --git-dir=/www/your-site/private/your-repo.git reset --hard origin/main # 変更を本番サイトにデプロイ
ワークフローの詳細は以下のとおりです。
- トリガー:GitHubリポジトリの
main
ブランチにコードがプッシュされるたびに起動します。 - ジョブ:
deploy
というjob
がひとつ含まれ、Ubuntuの仮想マシン(ubuntu-latest
)上で実行されます。 - コードの確認:
actions/checkout@v2
アクションを使って、GitHubリポジトリから最新のコードを取り出します。 - SSH経由でデプロイ:
appleboy/ssh-action
は、設定したシークレット(サーバーIP、ユーザー名、パスワード、ポート)を使用して、SSH経由でKinstaサーバーに安全に接続するために使用されます。このステップでは、次のコマンドが実行されます。cd /www/your-site/private/your-repo.git
─Kinstaサーバー上のGitベアリポジトリに移動git fetch origin main
─GitHubリポジトリのmain
ブランチから最新の変更を取得git reset --hard origin/main
─WordPressがホスティングされているpublic
ディレクトリの本番サイトを更新して変更を適用
8.ワークフローをテストする
ワークフローを設定したら、GitHubリポジトリのmain
ブランチに小さな変更をプッシュしてテストしてみてください。変更をプッシュするたびに、GitHub Actionsが自動的にデプロイをトリガーし、コードの最新バージョンをプルして、Kinsta上の本番サイトにデプロイするようになれば成功です。
デプロイのステータスは、GitHubリポジトリの「Actions」タブで監視可能です。ワークフローでエラーが発生した場合は、トラブルシューティングや問題の修正に役立つログが詳細に表示されます。