[Django] Github Actions로 간단하게 재배포 자동화하기
위 글에서 nohup 커맨드로 백그라운드에서 실행했을 때 에러 발생이 잦았지만 이미 서비스로 gunicorn을 등록했다면 데몬 restart만으로 재구동이 가능하여 더욱 간단해진다.
name: Django EC2 Deploy
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
ci:
name: "Django CI"
runs-on: ubuntu-latest
strategy:
max-parallel: 4
matrix:
python-version: ["3.10", 3.11, 3.12]
steps:
- uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v3
with:
python-version: ${{ matrix.python-version }}
- name: Install Dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Create JSON
id: create-json
uses: jsdaniell/create-json@v1.2.3
with:
name: "secrets.json"
json: ${{ secrets.SECERT_JSON }}
- name: Run Tests
run: |
python manage.py test
cd:
name: "Django CD"
needs: ci
runs-on: ubuntu-latest
steps:
- name: EC2 ssh connection test
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.SSH_HOST }}
username: ${{ secrets.SSH_USERNAME }}
key: ${{ secrets.SSH_PEM }}
command_timeout: 3m
script: |
sudo apt-get update
sudo apt-get -y upgrade
cd ~/kiwi-server
source venv/bin/activate
git pull origin main
pip install -r requirements.txt
python manage.py makemigrations
python manage.py migrate
sudo systemctl restart gunicorn
exit 0
다른 동작의 세부 설명은 위 링크의 글에서 설명하고 있고
sudo systemctl restart gunicorn
이 명령어로 데몬을 재시작해주면 끝 !!
이 글의 코드를 사용하면 secrets.json을
수동 작업을 하지 않기 위해서 workflow를 작성했는데 다시 수동 업데이트를 해주어야하는 상황이 발생한다. 이를 해결하는 방법으로 이건 secrets.json 관련 글에 조언해주셨던 방법을 소개해보려고 한다.
using-secrets-in-github-actions#storing-large-secrets
이 글에서는 48KB가 넘는 secret의 경우에
암호화한 파일 업로드 + passphrase(secret key) 깃헙 등록 + 복호화하는 쉘스크립트 작성 및 업로드
→ Github Actions에서 쉘스크립트 실행으로 복호화 + .json 변환 수행
Gihub Actions 뿐만 아니라 EC2 등의 외부 서버에도 이 방법을 적용할 수 있을 것 같다.