🛺

DjangoをGitHub ActionsからVPSに自動デプロイする方法

2022/02/27に公開

Django を GitHub Actions を使用して、VPS(Vultr)に自動デプロイする方法を紹介します。

今回、VPS は Vultr を使用していますが、VPS であればどこでも可能です。

Vultr

今なら$100 無料です。

解説動画

https://youtu.be/oMuroQTEXf8

秘密鍵と公開鍵生成

秘密鍵と公開鍵を生成します。

  • クライアント側
ssh-keygen -t rsa -b 4096 -C "youremail@youremail.com"

~/.ssh/に秘密鍵と公開鍵が生成されます。

  • id_rsa:秘密鍵
  • id_rsa.pub:公開鍵

VPS 環境構築

VPS をデプロイします。

デプロイ時に 1 点注意点があります。

git clone をするときに、github のユーザー名とアクセストークンを含めて clone するようにしましょう。

git clone  https://githubユーザー名:githubのアクセストークン@github.com/githubユーザー名/ブランチ名.git

上記のように clone しないと、GitHub Actions で git pull したときに、ユーザー名、アクセストークンが毎回必要になってしまいます。

デプロイは下記を参考にして下さい。

https://zenn.dev/hathle/books/django-vultr-book

公開鍵設定

  • VPS(Vultr)側

.ssh フォルダを作成して、権限を 700 に変更します。

mkdir ~/.ssh
chmod 700 .ssh
  • クライアント側

クライアント側の公開鍵を VPS にコピーします。

scp ~/.ssh/id_rsa.pub username@VPSのIPアドレス:.ssh
  • VPS(Vultr)側

クライアントから VPS に公開鍵が渡されているかを確認します。

ファイル名を authorized_keys に変更して、権限を 600 にします。

cd ~/.ssh
mv id_rsa.pub authorized_keys
chmod 600 authorized_keys

ログイン設定変更

  • VPS(Vultr)側

ログインの設定を変更します。

sudo nano /etc/ssh/sshd_config
PermitRootLogin no
PubkeyAuthentication yes
PasswordAuthentication no
usePAM no

ssh を再起動します。

sudo /etc/init.d/ssh restart

sudo パスワード設定変更

  • VPS(Vultr)側

sudo でパスワードを省略するようにします。

sudo visudo
%sudo ALL=(ALL:ALL) NOPASSWD:ALL
  • クライアント側

VPS にログインするときにパスワードが要求されなかったら成功です。

ssh -i ~/.ssh/id_rsa username@VPSのIPアドレス

GitHub Actions 設定

GitHub Actions の設定をします。

GitHub の Actions をクリックします。

Simple workflow を検索して、Configure します。

Yaml ファイルを下記のように修正します。

vpsdeploy.yml

name: VPS Deploy CI
on:
  push:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: DjangoをVPSに自動デプロイ
        uses: appleboy/ssh-action@master
        with:
          key: ${{ secrets.SECRET_KEY }}
          host: ${{secrets.SSH_HOST}}
          username: ${{secrets.SSH_USERNAME}}
          port: ${{secrets.SSH_PORT}}
          script: |
            cd src/django-auto-deploy
            git pull origin main
            source myvenv/bin/activate
            pip3 install -r requirements.txt
            python3 manage.py migrate
            python3 manage.py collectstatic --noinput
            sudo systemctl restart django-auto-deploy

appleboy/ssh-action@masterを使用して VPS に ssh 接続します。

接続したら、手動で順番に実施していることを書いていきます。

コマンドは環境によって異なるので、各自変更して下さい。

GitHub に公開したくないキーを登録

Settings の Secrets の Actions を開きます。

New repository secret で公開したくないキーを登録します。

  • SECRET_KEY:秘密鍵

クライアント側で秘密鍵を確認します。

cat ~/.ssh/id_rsa

下記すべてをコピーして登録します。

-----BEGIN OPENSSH PRIVATE KEY-----
xxxxxxxxxxxxxxx
xxxxxxxxxxxxxxx
-----END OPENSSH PRIVATE KEY-----
  • SSH_HOST:VPS の IP アドレス
  • SSH_USERNAME:VPS のユーザー名
  • SSH_PORT:SSH 接続のポート番号、デフォルトは 22

以上で設定は終了です。

ファイルを変更して push したら、自動デプロイされているか確かめてみましょう。

Django中心Q&Aサイト

講座の不明点や個人開発の疑問点など、何でもご質問ください。

https://www.fullstackchannel.com/courses/18

よろしくお願いします。

Discussion