Skip to content

Merge pull request #202 from DDD-Community/develop #84

Merge pull request #202 from DDD-Community/develop

Merge pull request #202 from DDD-Community/develop #84

Workflow file for this run

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 }}