GitHub CI/CD
GitHub CI/CD(継続的インテグレーション/継続的デリバリー、または継続的デプロイメント)により、コミットが指定のブランチにプッシュされるたびに、Kinstaサイトにコード変更を自動的にデプロイすることができます。この設定により、SSHとGitHub Actionsを介してローカル環境からシームレスなコードのデプロイメント、ひいてはサイトへの継続的な更新が可能になります。
以下の手順には、弊社でホスティングする既存のサイトとGitHubアカウントが必要です。
1. サイトのバックアップをダウンロードする
サイトのバックアップをダウンロードし、GitHubリポジトリをセットアップして、ローカルで作業を行うことができます。DevKinstaを使用して弊社サーバーからサイトを取り込むことも可能です。
MyKinstaで「WordPressサイト」>(サイト名)>「バックアップ」に移動し、「ダウンロード」タブを選択して、「ファイルを生成する」をクリックします。
![MyKinstaでダウンロード可能なバックアップを作成](/_next/image/?url=https%3A%2F%2Fkinsta.com%2Fjp%2Fwp-content%2Fuploads%2Fsites%2F6%2F2024%2F07%2Fbackup-download.png&w=3840&q=75)
バックアップファイルの準備ができたら、「ダウンロード」をクリックしてローカルコンピュータに保存し、フォルダに解凍します。
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) |
![GitHubのシークレットに追加するSSH情報](/_next/image/?url=https%3A%2F%2Fkinsta.com%2Fjp%2Fwp-content%2Fuploads%2Fsites%2F6%2F2024%2F09%2Fmykinsta-sftp-ssh-1.png&w=3840&q=75)
4. KinstaサーバーでSSHキーを生成する
ターミナルを開いて、MyKinstaのWordPressサイト「情報」画面の「SSHターミナルのコマンド」を使用してSSHで弊社サーバーに接続します。
![サイトのSSHターミナルコマンド](/_next/image/?url=https%3A%2F%2Fkinsta.com%2Fjp%2Fwp-content%2Fuploads%2Fsites%2F6%2F2024%2F09%2Fssh-terminal-command.png&w=3840&q=75)
サイトのパスワードを入力し、以下のコマンドを使って新たなSSHキーを生成します。 [email protected]
は実際のメールアドレスに置き換えます。
ssh-keygen -t rsa -b 4096 -C "[email protected]"
Enterキーを押してキーをデフォルトの場所に保存し、プロンプトが表示されたらパスフレーズを空白のままにしてください。
![SSHキーを生成](/_next/image/?url=https%3A%2F%2Fkinsta.com%2Fjp%2Fwp-content%2Fuploads%2Fsites%2F6%2F2024%2F09%2Fwordpress-generate-ssh-key-768x450-1.png&w=1920&q=75)
5. SSHキーをGitHubに追加する
以下のコマンドで、公開鍵ファイル(~/.ssh/id_rsa.pub
など)の内容にアクセスします。
cat ~/.ssh/id_rsa.pub
GitHubの「Settings」>「SSH and GPG keys」>「New SSH key」に進み、「Title」を入力して(「Kinsta Server Key」など)、「Key type」が「Authentication Key」であることを確認したら、「Key」フィールドに公開鍵を貼り付けます。最後に、「Add SSH key」を入力して完了です。
![GitHubにSSHキーを追加](/_next/image/?url=https%3A%2F%2Fkinsta.com%2Fjp%2Fwp-content%2Fuploads%2Fsites%2F6%2F2024%2F09%2Fgithub-ssh-key-768x392-1.png&w=1920&q=75)
6. KinstaサーバーでSSHを使うようにGitを設定する
MyKinstaのサイトの「情報」画面で、「環境情報」セクションの「パス」をコピーします。
![環境情報の「パス」をコピー](/_next/image/?url=https%3A%2F%2Fkinsta.com%2Fjp%2Fwp-content%2Fuploads%2Fsites%2F6%2F2024%2F09%2Fenvironment-details-path.png&w=3840&q=75)
ターミナルで、/www/your-site/public
をMyKinstaからコピーしたパスに置き換えて、以下のコマンドでサイトの本番ディレクトリに移動します。
cd /www/your-site/public
ディレクトリをGitリポジトリとして初期化し、リモートURLにSSHを使用するようにします。以下のコマンドのyour-username
とyour-repo
をGitの認証情報とリポジトリに置き換えます。
git init git remote add origin [email protected]:your-username/your-repo.git
以下のコマンドを実行して、SSHのセットアップが機能していることを確認します。
ssh -T [email protected]
すると、「Hi your-username! You’ve successfully authenticated, but GitHub does not provide shell access(認証は完了しましたが、GitHubはSSHアクセスを提供していません)」というメッセージが表示されます。これで、KinstaサーバーがGitHub Actionsを通してGitHubから直接変更内容を受け取り、デプロイするようになります。
7. GitHub Actionsのワークフローを作成する
以下のワークフローは、main
ブランチにプッシュするたびに変更を自動的に弊社にデプロイするものです。デプロイを自動化するには、YAMLファイルを使用してデプロイ方法を定義します。
自分のGitHubリポジトリで、このディレクトリ内に.github/workflows
というディレクトリとdeploy.yml
というファイルを作成します。your-site
はKinstaサイト上のパスにあるフォルダ名に置き換えて、以下の内容を貼り付けます。
name: Deploy to Kinsta
on:
push:
branches:
- main # 変更がメインブランチにプッシュされたときのみ、ワークフローをトリガー jobs:
deploy:
runs-on: ubuntu-latest
steps: # Node.jsをセットアップ(ビルドタスクに必要な場合のみ) - name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20.x' # GitHubリポジトリから最新のコードを確認 - name: Checkout code
uses: actions/[email protected] # SSH経由でKinstaにデプロイ - name: Deploy via SSH
uses: appleboy/[email protected]
with:
host: ${{ secrets.KINSTA_SERVER_IP } } username: ${{ secrets.KINSTA_USERNAME } } password: ${{ secrets.PASSWORD } } port: ${{ secrets.PORT } } # 任意、デフォルトは22 script: | # 本番サイトのディレクトリに移動 cd /www/your-site/public # GitHubリポジトリから最新の変更を取り込む git fetch origin main git reset --hard origin/main # 本番サイトが最新のメインブランチと一致していることを確認
ワークフローの詳細は以下のとおりです。
- トリガー:GitHubリポジトリの
main
ブランチにコードがプッシュされるたびに起動します。 - ジョブ:
deploy
というjob
がひとつ含まれ、Ubuntuの仮想マシン(ubuntu-latest
)上で実行されます。 - コードの確認:
actions/[email protected]
アクションを使って、GitHubリポジトリから最新のコードを取り出します。 - SSH経由でKinstaにデプロイ
appleboy/ssh-action
は、設定したシークレット(サーバーIP、ユーザー名、パスワード、ポート)を使用して、SSH経由でKinstaサーバーに安全に接続するために使用されます。このステップでは、次のコマンドが実行されます。- デプロイメントコマンド
cd /www/your-site/private
:WordPressがホストされている本番ディレクトリに移動git fetch origin main
:GitHubリポジトリのmain
ブランチから最新の変更を取得git reset --hard origin/main
:ブランチの最新コードで本番サイトを更新
8.ワークフローをテストする
ワークフローを設定したら、GitHubリポジトリのmain
ブランチに小さな変更をプッシュしてテストしてみてください。変更をプッシュするたびに、GitHub Actionsが自動的にデプロイをトリガーし、コードの最新バージョンをプルして、Kinsta上の本番サイトにデプロイするようになれば成功です。
デプロイのステータスは、GitHubリポジトリの「Actions」タブで監視可能です。ワークフローでエラーが発生した場合は、トラブルシューティングや問題の修正に役立つログが詳細に表示されます。