feat: Dockerfile -> CMD && 기호를 사용하도록 변경 #56
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Django CI/CD Pipeline | |
on: | |
push: | |
branches: ["main"] | |
pull_request_target: | |
types: [labeled, closed] | |
jobs: | |
build: | |
runs-on: ubuntu-24.04 | |
if: github.event.pull_request.merged == true # PR이 머지된 경우에만 실행 | |
steps: | |
# 1. GitHub Actions Runner에서 코드를 체크아웃 | |
- name: Checkout code | |
uses: actions/checkout@v2 | |
# 2. Python 3.12 설정 | |
- name: Set up Python 3.12 | |
uses: actions/setup-python@v2 | |
with: | |
python-version: '3.12' | |
# 3. Docker 로그인 (토큰 사용) | |
- name: Log in to Docker Hub with token | |
run: echo "${{ secrets.DOCKER_TOKEN }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin | |
# 4. 도커 이미지 빌드 및 Docker Hub에 Push | |
- name: Build and push Docker image | |
run: | | |
docker build -t ${{ secrets.DOCKER_USERNAME }}/festival_backend_image:latest . | |
docker push ${{ secrets.DOCKER_USERNAME }}/festival_backend_image:latest | |
deploy: | |
runs-on: ubuntu-24.04 | |
needs: build | |
steps: | |
# 1. 서버에 SSH 접속 (pem 키 사용) | |
- name: Deploy to server | |
uses: appleboy/[email protected] | |
with: | |
host: ${{ secrets.SSH_HOST }} | |
username: ${{ secrets.SSH_USER }} | |
key: ${{ secrets.SSH_KEY }} # pem 키가 GitHub Secrets에 저장된 변수 | |
port: ${{ secrets.SSH_PORT }} | |
script: | | |
# data.json 삭제 | |
if [ -f "data.json" ]; then | |
sudo rm data.json | |
fi | |
# 기존 컨테이너 접속 | |
sudo docker exec -it festival_backend_server bash | |
# data.json 생성 | |
python manage.py dumpdata > data.json && exit | |
# data.json 을 컨테이너 외부로 복사 | |
sudo docker cp festival_backend_server:/app/data.json ./data.json && sudo docker rm festival_backend_server:/app/data.json | |
# Docker 로그인 (토큰 사용) | |
echo "${{ secrets.DOCKER_TOKEN }}" | sudo docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin | |
# 3. 도커 이미지 Pull | |
sudo docker pull ${{ secrets.DOCKER_USERNAME }}/festival_backend_image:latest | |
# 4. 기존 컨테이너 중지 및 삭제 | |
sudo docker stop festival_backend_server || true | |
sudo docker rm festival_backend_server || true | |
# 이전 버전 이미지 삭제 | |
sudo docker image prune -f | |
# 5. 새로운 컨테이너 시작 | |
sudo docker run --env-file 2024_fall_festival_back/.env -d -p 8000:8000 --name festival_backend_server ${{ secrets.DOCKER_USERNAME }}/festival_backend_image:latest | |
# data.json 파일을 복사 | |
sudo docker cp ./data.json festival_backend_server:/app/data.json | |
# 6. Django 프로젝트의 static 파일 collect | |
sudo docker exec festival_backend_server python manage.py collectstatic --noinput |