GitHubActionsでCD・自動デプロイ運用
役に立ちそうな人
Github ActionsでCD運用したい人
git pull用にサーバーに秘密鍵置くのが気持ち悪い人
考え方
GitHub・デプロイ先サーバーの情報はなるべく絞る
デプロイコマンドは楽に変更確認したい
以前GitHubActionsの記事を書いていたのですが
それと比較すると下記の点について変更しています
あ、ちなみに今回はphpなんでパッケージ管理ツールまわりが違いますので、適宜読み替えてください
設定
下記手順で進めてもらえれば動くはず
動かなかったらコメントかメールください
GitHubアカウント&秘密鍵
今回のデプロイ専用にGitHubアカウントと秘密鍵を作成
1つの秘密鍵でサーバーへのsshとGitHubからのgit pullで使い回します
2箇所にそれぞれに公開鍵を登録しておいてください
GitHub Actionsのシークレット
ymlファイルの名前を見てもらえればなんとなくわかるかと思いますが、念のため
- SECRET_KEY: 秘密鍵(上記で登録したやつ)
- SSH_USER: SSHログインするユーザー名
- SSH_ADDR: SSHログイン先
- SSH_PORT: SSHログインするポート番号
- ROOT_DIRECTORY: rootディレクトリ/deploy.shの置き場所ディレクトリ
deploy.sh
docker-composeの設定ファイルと同じディレクトリに置いてます
GitHubのシークレットにコマンド登録するよりも変更が簡単なのと、変更するときにローカルで確認しやすいのでshファイルにしてます
デプロイ時に必要と思われるコマンドを記述してください
今回はdocker-compose&phpで運用しているので下記のようなコマンドが入ってます
git pll; docker-compose -f docker-compose.yml -f prod-compose.yml up -d; docker-compose exec -T php composer install;
.github/workflows/deploy.yml
前回と違うのは2点です。特に説明することもないのでコピペしてもらえれば
name: Deploy on: push: branches: [ master ] jobs: Deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: create secret_key env: SECRET_KEY: ${{ secrets.SECRET_KEY }} run: | mkdir -p -m 700 ~/.ssh echo "$SECRET_KEY" > ~/.ssh/id_rsa chmod 600 ~/.ssh/id_rsa - name: deploy env: SSH_USER: ${{ secrets.SSH_USER }} SSH_ADDR: ${{ secrets.SSH_ADDR }} SSH_PORT: ${{ secrets.SSH_PORT }} ROOT_DIRECTORY: ${{ secrets.ROOT_DIRECTORY }} run: | ssh-keyscan github.com >> ~/.ssh/known_hosts ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys eval "$(ssh-agent -s)" ssh-add ~/.ssh/id_rsa ssh -A -oStrictHostKeyChecking=no ${SSH_USER}@${SSH_ADDR} -p ${SSH_PORT} "cd $ROOT_DIRECTORY && bash deploy.sh"
まとめ
GitHub Actionsの細かい設定手順などは前回の記事を参照してください
デプロイ時のコマンドが変更だったのと秘密鍵をサーバーに置いているのが気持ち悪かったのでその辺り解消されてるバージョンです
当面これで運用してますが、また改善あったらブログ記事にしようかと思っています!!
それでは読んでいただきありがとうございます!お役に立てたら幸いです!