縦ぽん!!

WordPressテーマのリポジトリがGitHubにあるなら、GitHub Actionsを使ってホスティングサービスへ自動デプロイが可能です。
ここではGitHub ActionsでWordPressテーマを自動デプロイする手順について説明します。

この記事は初心者向けの内容ではないため、必要最低限の内容だけ記載しています。予めご了承ください。

自動デプロイの仕組み

自動デプロイの仕組みを説明します。

  • ローカルリポジトリをGitHubリモートリポジトリへPushする
  • Push発生でGitHub ActionsのWorkflowが起動する
  • WorkflowにてSSHで接続、rsyncコマンドでGitHubとホスティングサービスを同期する

リモートリポジトリへのPushをトリガーとして同期させる、というわけです。

自動デプロイの前提条件

自動デプロイするための前提条件です。

  • WordPressテーマをGitで管理しており、GitHubに公開できる
  • SSH接続、rsyncコマンドを使用できるホスティングサービスを利用している
  • ホスティングサービスにSSH接続できる環境がある

GitHubのプライベートリポジトリでも実行できるようですが、無料枠の範囲内で可能なようです(私は検証していません)。

GitHubとホスティングサービスの同期はrsyncコマンドで行います。SSH接続するため、ホスティングサービスはかなり限定されます。

Windows10の1803以降はOpenSSHクライアントが使用できるようですが、それ以前のバージョンやWindows8.1の場合はSSHソフトを使用することになります。

エックスサーバーにSSHソフトの設定(Tera Term)という情報があるので参考にしてください。

環境構築手順

ここではエックスサーバーに対して自動デプロイするために行った環境構築手順を説明します。

ローカルからSSH接続するための準備

GitHubからエックスサーバーへSSHで接続するため、公開鍵を作成する必要があります。その前準備のため、ローカルからSSH接続できるようにします。

エックスサーバーのSSH設定に情報があるので、この手順に従って作業を行います。

GitHubからSSH接続するための公開鍵の作成

  1. エックスサーバーにSSHで接続します。
  2. 次のコマンドを順に実行して、公開鍵を作成します。
    $ cd ~/.ssh
    $ ssh-keygen -t rsa -b 4096 -C "GitHubアカウントのメールアドレス"
    

    パスフレーズを要求されますが、パスフレーズは入力せずにそのままEnterキーを押して進めます。
    ファイル名もEnterキーを押して進めると規定のファイル名 id_rsa で鍵ファイルが作成されます。

  3. 作成した公開鍵をauthorized_keysに結合します。
    .sshディレクトリにauthorized_keysファイルがあれば
    $ cat id_rsa.pub >> authorized_keys
    

    で結合し、なければ以下のコマンドでリネームします。

    $ mv id_rsa.pub authorized_keys
    
  4. authorized_keys ファイルのパーミッションを600に変更します。
    $ chmod 600 authorized_keys
    
  5. id_rsaの中身を確認して内容をコピーします。
    $ vi id_rsa
    

    で内容が確認できるので、コピーを取ります。この内容はGitHubのSecretsにSSH_PRIVATE_KEYとして登録します。

  6. id_rsa, id_pubの削除
    残しておいてよいものではないので、これらのファイルは削除します(全ての作業完了で問題ありません)。

リモートリポジトリの準備

リモートリポジトリがない場合はリモートリポジトリを作成し、ローカルリポジトリをPushできるようにします。

そのうえでSecretsに以下の内容を登録します。

Name Value
SSH_PRIVATE_KEY ※コピーしたid_rsaの内容
SSH_USER [サーバーID]
SSH_HOST [サーバー番号].xserver.jp
DEPLOY_PATH home/[サーバーID]/[ドメイン名]/public_html/public_html/wp-content/themes/[テーマのフォルダ名]
SSH_PORT 10022

角カッコ[]のところはユーザー毎に異なるため、それぞれの「サーバーID」「サーバー番号」「ドメイン名」「テーマのフォルダ名」に置換します。

SSH_PORTはエックスサーバーの場合は10022ですが、他のレンタルサーバーはポート番号が異なりますので、環境に合わせて設定します。

Actionsに新しいWorkflowを登録

レンタルサーバーにSSHで接続し、rsyncコマンドで同期するworkflowを作成します。

  1. GitHubのリポジトリ上でActionsから【New workflow】ボタンをクリックします。
  2. 『 set up a workflow yourself 』をクリックします。
  3. 以下の内容でworkflowを作成します。ファイル名はわかりやすい名前(deploy.ymlなど)を入力してください。
name: deploy wordpress theme
 
on:
  push:
    branches:
      - master
 
jobs:
  deploy:
 
    runs-on: ubuntu-latest
 
    steps:
      - uses: actions/checkout@v1

      - name: ssh key generate
        run: echo "$SSH_PRIVATE_KEY" > key && chmod 600 key
        env:
          SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}

      - name: rsync deploy
        run: rsync -auzrv --delete ./ $SSH_USER@$SSH_HOST:$DEPLOY_PATH --exclude ".git/" --exclude ".github/"  -e "ssh -i key -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p ${SSH_PORT}" 
        env:
          SSH_USER: ${{ secrets.SSH_USER }}
          SSH_HOST: ${{ secrets.SSH_HOST }}
          DEPLOY_PATH: ${{ secrets.DEPLOY_PATH }}
          SSH_PORT: ${{ secrets.SSH_PORT }}

22行目のrsyncコマンドで –exclude のところは環境によって調整する必要がありますが、それ以外は特に変更することはないと思います。

このコマンドでGitHubのリポジトリとホスティングサービスの内容を同期します。

まとめ

久しぶりにWordPressテーマ「Garyu」をメンテナンスすることにしたついでに、楽にテーマをデプロイする方法がないか調べてみたら、GitHub Actionsで実現できることがわかりました。

自動デプロイの仕組みができると、FTPソフトを使ってファイルアップロードする手間が省けるため、テーマファイルを気軽に更新できるようになります。

まだGitを含めて各方面に関する知識が十分でないため、手順等に誤りがあるかもしれません。何かお気づきな点があればご報告いただければ幸いです。

関連する記事