概要
このハナシはこないだラフな乗りで書いたのだけど、
ノートとしてシンプルにまとまっているものを書こうと思ったんで書く。
公開鍵方式ログインの準備をする
GitHub Actions から対象サーバへアクセスするため、公開鍵方式ログインの準備をする。まずはローカルマシンで鍵ファイルを作る。
ssh-keygen
このコマンドでふたつのファイルができる。
- /Users/user/.ssh/id_rsa: 秘密鍵だ。これは下の手順で GitHub secret へ登録。
- /Users/user/.ssh/id_rsa.pub: 公開鍵だ。これも下の手順でサーバのホームディレクトリに置く。
秘密鍵を GitHub Actions へ登録
次の手順で登録。
- Repository settings へ go
- Secrets へ go
- New repository secret をクリック
SECRET_KEY
としてid_rsa
の中のテキストをコピペして登録
サーバで公開鍵認証の設定を行う
id_rsa.pub
をサーバのホームディレクトリに置く- サーバでこちら↓のコマンドを流し、公開鍵認証の設定を行う
# サーバ側で実行。
cd
mkdir .ssh
chmod 700 .ssh/
mv id_rsa.pub .ssh/authorized_keys
chmod 600 .ssh/authorized_keys
サーバへ公開鍵認証のアクセスができることを確認
# ローカルマシンで実行。
ssh -i /Users/user/.ssh/id_rsa root@host
確認ができたらパスワードログインを禁じる
サーバの /etc/ssh/sshd_config を編集。
PasswordAuthentication no
GitHub Actions 用の yaml を push
この↓ yaml をリポジトリの .github/workflows/deployment.yml
に置いて push。ファイル名は何でも OK。 GitHub Actions からサーバへ SSH 接続して pull とデプロイコマンドを流すというのが要旨。
name: Python application
on:
push:
branches: [ master ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
# (注)の行は削除する。
- name: Deployment
run: |
echo "$SECRET_KEY" > secret_key
chmod 600 secret_key
(注)SERVER_USER, SERVER_HOST も secrets へ登録する。
ssh -oStrictHostKeyChecking=no ${SERVER_USER}@${SERVER_HOST} -i secret_key "
(注)サーバ内で Django アプリケーションを置いているディレクトリへ cd
cd /vagrant/ &&
(注)ソースを pull
git fetch origin &&
git reset --hard origin/master &&
(注)以下、あなたの Django アプリケーションのデプロイコマンドを記述
sudo python manage.py migrate &&
sudo python manage.py collectstatic -c --noinput &&
sudo apachectl restart
"
env:
SECRET_KEY: ${{ secrets.SECRET_KEY }}
SERVER_USER: ${{ secrets.SERVER_USER }}
SERVER_HOST: ${{ secrets.SERVER_HOST }}
以上だ!