Merge pull request #193 from Travlocks/refactor/#191-explore-pagination #105
This file contains hidden or 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: CI/CD Deploy to EC2 (Docker Hub) | |
| on: | |
| push: | |
| branches: ["develop"] | |
| permissions: | |
| contents: read | |
| # 전역 환경변수 | |
| env: | |
| # Docker Hub 이미지 이름 | |
| DOCKERHUB_IMAGE: docker.io/${{ secrets.DOCKERHUB_USERNAME }}/${{ secrets.DOCKERHUB_REPO }} | |
| # EC2에서 docker-compose.yml, .env 등이 있는 경로 | |
| APP_DIR: /home/ubuntu/travlocks | |
| jobs: | |
| # 1) 빌드 + Docker Hub 푸시 | |
| build-and-push: | |
| runs-on: ubuntu-latest | |
| steps: | |
| # 1. 레포 체크아웃 | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| # 2. Docker 빌드 기능(buildx) 준비 | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| # 3. Docker Hub 로그인 (private repo push를 위해 필요) | |
| - name: Login to Docker Hub | |
| uses: docker/login-action@v3 | |
| with: | |
| username: ${{ secrets.DOCKERHUB_USERNAME }} | |
| password: ${{ secrets.DOCKERHUB_TOKEN }} | |
| # 4. Docker 이미지 빌드 후 푸시 | |
| # - latest: 항상 최신 배포 이미지 | |
| # - github.sha: 특정 커밋 버전 추적/롤백용 | |
| - name: Build and Push Docker image | |
| uses: docker/build-push-action@v6 | |
| with: | |
| context: . | |
| file: Dockerfile | |
| push: true | |
| tags: | | |
| ${{ env.DOCKERHUB_IMAGE }}:latest | |
| ${{ env.DOCKERHUB_IMAGE }}:${{ github.sha }} | |
| # 2) EC2로 배포 (이미지 pull + compose 재기동) | |
| deploy: | |
| needs: build-and-push | |
| runs-on: ubuntu-latest | |
| steps: | |
| # 5. EC2에 SSH 접속해서 배포 수행 | |
| - name: Deploy to EC2 via SSH | |
| uses: appleboy/ssh-action@v1.0.3 | |
| with: | |
| host: ${{ secrets.SSH_HOST }} | |
| username: ${{ secrets.SSH_USER }} | |
| key: ${{ secrets.SSH_PRIVATE_KEY }} | |
| script: | | |
| set -e | |
| echo "====== EC2 Deploy Start ======" | |
| cd ${{ env.APP_DIR }} | |
| echo "${{ secrets.DOCKERHUB_TOKEN }}" | docker login -u "${{ secrets.DOCKERHUB_USERNAME }}" --password-stdin | |
| # 1) 태그를 SHA로 고정 (롤백 쉬움) | |
| sed -i 's/^IMAGE_TAG=.*/IMAGE_TAG=${{ github.sha }}/' .env | |
| # 2) pull + 재기동 | |
| docker-compose pull | |
| docker-compose down || true | |
| docker-compose up -d | |
| docker image prune -f | |
| echo "====== EC2 Deploy Done ======" |