ひさふぃの日記

DjangoとPythonとLaravelが好き。大阪でフリーランスエンジニアやってます。

GitHubActionsでCD・自動デプロイ運用

役に立ちそうな人

Github ActionsでCD運用したい人
git pull用にサーバーに秘密鍵置くのが気持ち悪い人

考え方

GitHub・デプロイ先サーバーの情報はなるべく絞る
デプロイコマンドは楽に変更確認したい

以前GitHubActionsの記事を書いていたのですが

hisafi.hatenablog.com

それと比較すると下記の点について変更しています

  • GitHub
    • デプロイ専用アカウント&秘密鍵を作成
    • デプロイコマンドをGitHubシークレットに書かない
  • サーバー

あ、ちなみに今回はphpなんでパッケージ管理ツールまわりが違いますので、適宜読み替えてください

設定

下記手順で進めてもらえれば動くはず
動かなかったらコメントかメールください

GitHubアカウント&秘密鍵

今回のデプロイ専用にGitHubアカウントと秘密鍵を作成
1つの秘密鍵でサーバーへのsshGitHubからのgit pullで使い回します
2箇所にそれぞれに公開鍵を登録しておいてください

  • GitHub: SettingsからSSH and GPG keys
  • サーバー: .ssh/authorized_keys

GitHub Actionsのシークレット

ymlファイルの名前を見てもらえればなんとなくわかるかと思いますが、念のため

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点です。特に説明することもないのでコピペしてもらえれば

  • ssh-agentを使って秘密鍵を使い回している
  • デプロイ時のコマンドをdeploy.shにまとめている
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の細かい設定手順などは前回の記事を参照してください

hisafi.hatenablog.com

デプロイ時のコマンドが変更だったのと秘密鍵をサーバーに置いているのが気持ち悪かったのでその辺り解消されてるバージョンです
当面これで運用してますが、また改善あったらブログ記事にしようかと思っています!!
それでは読んでいただきありがとうございます!お役に立てたら幸いです!

Software Design (ソフトウェアデザイン) 2020年10月号 [雑誌]