Merge pull request #202 from DDD-Community/develop #84
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: Deploy Next.js App to EC2 | |
| on: | |
| push: | |
| branches: | |
| - main | |
| env: | |
| DOCKER_IMAGE: wonchang0314/growit-fe | |
| CONTAINER_NAME: growit-next | |
| jobs: | |
| build-and-deploy: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v3 | |
| - name: Log in to Docker Hub | |
| uses: docker/login-action@v3 | |
| with: | |
| username: ${{ secrets.DOCKER_HUB_USERNAME }} | |
| password: ${{ secrets.DOCKER_HUB_PASSWORD }} | |
| ### 고유한 태그 생성 (GitHub SHA 사용) | |
| - name: Generate image tag | |
| id: tag | |
| run: | | |
| echo "IMAGE_TAG=${{ env.DOCKER_IMAGE }}:${{ github.sha }}" >> $GITHUB_OUTPUT | |
| echo "LATEST_TAG=${{ env.DOCKER_IMAGE }}:latest" >> $GITHUB_OUTPUT | |
| ### Docker 이미지 빌드 & 푸시 (고유 태그 + latest) | |
| - name: Build and push Docker image | |
| run: | | |
| echo "API URL : ${{ vars.NEXT_PUBLIC_API_URL }}" | |
| echo "REDIRECT URL : ${{ vars.NEXT_PUBLIC_REDIRECT_URL }}" | |
| docker build \ | |
| --build-arg NEXT_PUBLIC_API_URL="${{ vars.NEXT_PUBLIC_API_URL }}" \ | |
| --build-arg NEXT_PUBLIC_REDIRECT_URL="${{ vars.NEXT_PUBLIC_REDIRECT_URL }}" \ | |
| -t ${{ steps.tag.outputs.IMAGE_TAG }} \ | |
| -t ${{ steps.tag.outputs.LATEST_TAG }} . | |
| docker push ${{ steps.tag.outputs.IMAGE_TAG }} | |
| docker push ${{ steps.tag.outputs.LATEST_TAG }} | |
| ### EC2에 SSH 접속하여 Docker pull 및 재시작 | |
| - name: SSH to EC2 and deploy | |
| uses: appleboy/[email protected] | |
| with: | |
| host: ${{ secrets.EC2_HOST }} | |
| username: ${{ secrets.EC2_USER }} | |
| key: ${{ secrets.EC2_SSH_KEY }} | |
| script: | | |
| # 기존 컨테이너 정리 | |
| sudo docker stop ${{ env.CONTAINER_NAME }} || true | |
| sudo docker rm ${{ env.CONTAINER_NAME }} || true | |
| # 최신 이미지 강제 pull (캐시 무시) | |
| sudo docker pull ${{ steps.tag.outputs.LATEST_TAG }} | |
| # 사용하지 않는 이미지 정리 | |
| sudo docker image prune -f | |
| # 새 컨테이너 실행 | |
| sudo docker run -d \ | |
| --name ${{ env.CONTAINER_NAME }} \ | |
| -p 3000:3000 \ | |
| --restart unless-stopped \ | |
| ${{ steps.tag.outputs.LATEST_TAG }} |