WEBEER – Web制作の覚えがき –

【Mac】GithubにPushしたらエックスサーバーにデプロイする手順(GitHub Actions)

Git
Git 更新日:2020.09.05 公開日:2020.08.11

githubのmasterブランチにPushしたらエックスサーバーにデプロイする方法です。

前提

VSCodeでgithubにPushできる環境であることと、エックスサーバーにSSH接続できる環境であることです。

  • githubにアカウントを持っている
  • githubにpushできる
  • エックスサーバーにSSH接続できる

手順

  1. 自分のパソコンからエックスサーバーにSSH接続する
  2. githubにキーペアを登録する
  3. githubにworkflowsを登録する
  4. rcyncのコマンドを書く

1. 自分のパソコンからエックスサーバーにSSH接続する

自分のパソコンからエックスサーバーにSSH接続しておきます。接続の方法は記事を参考にしてください。

~/.ssh/known_hostsが作成されたことを確認してください。

2. githubにキーペアを登録する

githubにキーペアを登録します。登録するのは秘密鍵、公開鍵、KNOWN_HOSTSの3つです。

リポジトリの画面から Settings > Secrets と進み、「New Secrets」のボタンを押します。

SSH_KEY(秘密鍵)の登録

秘密鍵はエックスサーバーにSSH接続したときに作成した~/.ssh/id_xserver_rsaです。テキストファイルで開いて中身をコピーして「Secrets」に登録します。

名前は「SSH_KEY」で保存します。

SSH_KEY_PUBLIC(公開鍵)の登録

エックスサーバーのサーバーパネルの「SSH設定」の「公開鍵登録・更新」画面を開きます。

「登録済み公開鍵を表示」のリンクを押して表示された公開鍵をコピーします。

Githubの「Secrets」に「SSH_KEY_PUBLIC」という名前で保存します。

KNOWN_HOSTSの登録

エックスサーバーにSSH接続したときに作成された「known_hosts」のファイルをテキストエディタで開きます。

[sv0000.xserver.jp...]というサーバー名から始まる行をコピーして、「Secrets」に「KNOWN_HOSTS」という名前で保存します。

3. githubにworkflowsを登録する

GitHub Actionsを使って、Pushされたらrcynsを実行する…という処理を行います。

/.github/workflows/deploy.ymlを作成します。

deploy.ymlに下記のコードを書いて保存します。

on:
  push:
    branches:
      - master
name: Deploy
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@master
    - name: Install SSH key
      uses: shimataro/ssh-key-action@v1
      with:
        private-key: ${{ secrets.SSH_KEY }}
        public-key: ${{ secrets.SSH_KEY_PUBLIC }}
        name: id_xserver_rsa
        known-hosts: ${{ secrets.KNOWN_HOSTS }}
    - name: run deploy script
      run: bash deploy.sh

次の手順で作成するdeploy.shをフォルダに入れる場合は

run: bash ./script/deploy.sh 

のように書いてください。

shimataro/ssh-key-action@v2という新しいバージョンもあるんですがちょっとうまく使えてないので勉強中です)

4. rcyncのコマンドを書く

デプロイしたいファイルと同じ階層にdeploy.shを作成します。

私は./script/deploy.shに作成しています。その場合は手順3のworkflowsを修正してください。

deploy.shにrcyncのコマンドを書きます。

#テックブログ
rsync --delete -auvz -e "ssh -p 10022 -i ~/.ssh/id_xserver_rsa" --exclude-from=exclude.txt -rlpt ./ user@sv0000.xserver.jp:domain.com/public_html

最初にテストする時は--dry-runをつけるとテストできます。

exclude.txtに除外ファイルを書いています。

--exclude-from=exclude.txt

もしもフォルダに入れる場合は./script/exclude.txtというように書いてください。ルートからのパスになります。

rcyncのスラッシュの有無の違い

実は、rcyncのスラッシュの有無には大きな違いがあります。

rsync /dir/a /dir/b
rsync /dir/a /dir/b/

#結果
/dir/b/a/

コピー元にスラッシュをつけなかった場合は、ディレクトリ本体がディレクトリごとコピーされます。

rsync /dir/a/ /dir/b
rsync /dir/a/ /dir/b/

#結果
/dir/b/aの中身

コピー元にスラッシュがついていた場合は、ディレクトリの中身がコピーされますので、bの中にaディレクトリは作成されません。

これでGithubのmasterブランチにPushしたらエックスサーバーにデプロイされるようになりました。