概要

このハナシはこないだラフな乗りで書いたのだけど、

ノートとしてシンプルにまとまっているものを書こうと思ったんで書く。

 

公開鍵方式ログインの準備をする

GitHub Actions から対象サーバへアクセスするため、公開鍵方式ログインの準備をする。まずはローカルマシンで鍵ファイルを作る。

ssh-keygen

このコマンドでふたつのファイルができる。

  • /Users/user/.ssh/id_rsa: 秘密鍵だ。これは下の手順で GitHub secret へ登録。
  • /Users/user/.ssh/id_rsa.pub: 公開鍵だ。これも下の手順でサーバのホームディレクトリに置く。

 

秘密鍵を GitHub Actions へ登録

次の手順で登録。

  1. Repository settings へ go
  2. Secrets へ go
  3. New repository secret をクリック
  4. SECRET_KEY として id_rsa の中のテキストをコピペして登録

 

サーバで公開鍵認証の設定を行う

  1. id_rsa.pub をサーバのホームディレクトリに置く
  2. サーバでこちら↓のコマンドを流し、公開鍵認証の設定を行う
# サーバ側で実行。
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 }}

以上だ!