[Django] GitHub Actions로 gunicorn 데몬 재시작하기

우노·2024년 6월 29일
0
post-custom-banner

[Django] Github Actions로 간단하게 재배포 자동화하기
위 글에서 nohup 커맨드로 백그라운드에서 실행했을 때 에러 발생이 잦았지만 이미 서비스로 gunicorn을 등록했다면 데몬 restart만으로 재구동이 가능하여 더욱 간단해진다.

환경

  • nginx로 Web Server를 세팅
  • gunicorn 서비스를 생성/시작하여 데몬으로 WAS를 관리

workflow

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

이 글의 코드를 사용하면 secrets.json을

  • Github Actions - 오픈소스 활용
  • 서버 - 직접 업데이트 = 업데이트하기 위한 수동 작업 필요

수동 작업을 하지 않기 위해서 workflow를 작성했는데 다시 수동 업데이트를 해주어야하는 상황이 발생한다. 이를 해결하는 방법으로 이건 secrets.json 관련 글에 조언해주셨던 방법을 소개해보려고 한다.

using-secrets-in-github-actions#storing-large-secrets
이 글에서는 48KB가 넘는 secret의 경우에

암호화한 파일 업로드 + passphrase(secret key) 깃헙 등록 + 복호화하는 쉘스크립트 작성 및 업로드
→ Github Actions에서 쉘스크립트 실행으로 복호화 + .json 변환 수행

Gihub Actions 뿐만 아니라 EC2 등의 외부 서버에도 이 방법을 적용할 수 있을 것 같다.

profile
기록하는 감자
post-custom-banner

0개의 댓글