概要
- GitHubのmainが更新されたら自動デプロイをしてほしい
- GitHub Actionsで自動デプロイをやりたい
- 公開鍵を使いまわそうとすると怒られるので、それぞれのレポジトリごとに個別の公開鍵を設定して使いたい
内容
サーバ上で以下のコマンドを打つ。(パスフレーズは入力せずにEnterでOK)
ssh-keygen -t rsa -b 4096 -C [メールアドレス:なんでもOK] -f ~/.ssh/[ファイル名:レポジトリの略称とかだと分かりやすい]
GitHubのレポジトリSettings > Deploy key > Add deploy keyから公開鍵~/.ssh/[ファイル名].pub
の中身を登録する。(タイトルは適当でOK)
サーバ上の~/.ssh/config
に以下のように追加する。
Host [ホスト名:github-レポジトリの略称など]
User git
Port 22
HostName github.com
IdentityFile ~/.ssh/[ファイル名]
TCPKeepAlive yes
IdentitiesOnly yes
~/.ssh/config
ファイルが無ければ、
touch ~/.ssh/config
chmod 600 ~/.ssh/config
で作成して、追加する。
サーバ上の公開ディレクトリを作りたい場所で以下のコマンドを実行。
git clone git@[ホスト名:github-レポジトリの略称など]:[ユーザ名]//[リポジトリ名].git [公開用ディレクトリ名]
GitHubのレポジトリSettings > Secrets > Actions > New repository secretから以下を登録する。
名前(適当でOK) | 書くこと |
---|---|
SERVER_USERNAME | 接続するサーバのユーザ名:XXXX |
SERVER_HOST | サーバーのホスト名:hogehoge.comとか |
SSH_PORT | sshのポート番号:デフォルトだと22とか |
SSH_PRIVATE_KEY | サーバ側にssh接続する際の秘密鍵の中身:ローカルマシンの~/.ssh/id_rsa とかの中身を張り付ける |
SERVER_DEPLOY_DIR | git pullを実行したいディレクトリ |
SSH_PASS | 公開鍵に設定したパスフレーズ:設定しなかった場合はこの項目は登録しなくて良い |
GitHubのレポジトリActions > Set up this workflowから、以下を作成する。
name: CI #Workflow の名前何でもOK
on: #実行されるタイミングを設定
push: #pushでマージされた時も動く(pull_request:とすればプルリクのマージのみになる)
branches: #対象となるブランチを設定
- main
jobs: #以下が実行される内容
build:
runs-on: ubuntu-latest #実行環境を指定
steps:
- name: Deploy
uses: appleboy/ssh-action@master #使用するアクション(sshでサーバに接続)
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USERNAME }}
port: ${{ secrets.SSH_PORT }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
passphrase: ${{ secrets.SSH_PASS }}
script: | #サーバで実行されるコマンド(サーバ内で動かせるコマンドなら大体できるはず…なので色々やってみると吉?)
cd ${{ secrets.SERVER_DEPLOY_DIR }}
git pull origin main
ActionsでエラーがなればOK!
要するにsshでサーバに繋いで、ディレクトリに移動して、pullを走らせているだけ