DjangoをGitHub ActionsからVPSに自動デプロイする方法
Django を GitHub Actions を使用して、VPS(Vultr)に自動デプロイする方法を紹介します。
今回、VPS は Vultr を使用していますが、VPS であればどこでも可能です。
今なら$100 無料です。
解説動画
秘密鍵と公開鍵生成
秘密鍵と公開鍵を生成します。
- クライアント側
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 したときに、ユーザー名、アクセストークンが毎回必要になってしまいます。
デプロイは下記を参考にして下さい。
公開鍵設定
- 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サイト
講座の不明点や個人開発の疑問点など、何でもご質問ください。
よろしくお願いします。
Discussion