Repository navigation
[fix] #1 api 요청 로직 수정 #8
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 to EC2 with Docker Hub | |
| on: | |
| push: | |
| branches: | |
| - main | |
| - cicd | |
| workflow_dispatch: | |
| env: | |
| # Docker Hub 리포지토리 이름 (형식: username/repo) | |
| DOCKER_IMAGE_NAME: sunghun12/ktb-16-frontend | |
| jobs: | |
| build-and-push: | |
| name: Build and Push Docker Image | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Log in to Docker Hub | |
| uses: docker/login-action@v3 | |
| with: | |
| username: ${{ secrets.DOCKER_USERNAME }} # Docker Hub ID | |
| password: ${{ secrets.DOCKER_PASSWORD }} # Docker Hub Access Token (or PW) | |
| - name: Build and push | |
| uses: docker/build-push-action@v5 | |
| with: | |
| context: . | |
| push: true | |
| # 태그: Commit SHA(고유값)와 latest(편의용) 두 개를 동시에 푸시 | |
| tags: | | |
| ${{ env.DOCKER_IMAGE_NAME }}:${{ github.sha }} | |
| ${{ env.DOCKER_IMAGE_NAME }}:latest | |
| platforms: linux/amd64 | |
| cache-from: type=gha | |
| cache-to: type=gha,mode=max | |
| deploy: | |
| name: Deploy to EC2 Instances | |
| needs: build-and-push | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Setup SSH key | |
| run: | | |
| mkdir -p ~/.ssh | |
| echo "${{ secrets.EC2_SSH_PRIVATE_KEY }}" > ~/.ssh/deploy_key | |
| chmod 600 ~/.ssh/deploy_key | |
| - name: Deploy to ec2 | |
| env: | |
| EC2_USER: ${{ secrets.EC2_USER }} | |
| INSTANCE_IP: ${{ secrets.INSTANCE_IP }} | |
| DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} | |
| DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} | |
| DOCKER_IMAGE: ${{ env.DOCKER_IMAGE_NAME }} | |
| IMAGE_TAG: ${{ github.sha }} | |
| WAS_DOMAIN: ${{ secrets.WAS_DOMAIN }} | |
| run: | | |
| # SSH 접속 후 원격 스크립트 실행 | |
| ssh -i ~/.ssh/deploy_key -o StrictHostKeyChecking=no $EC2_USER@$INSTANCE_IP << EOF | |
| # 1. Docker Hub 로그인 (Private Repo일 경우 필수) | |
| echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin | |
| # 2. 배포할 이미지 및 컨테이너 이름 설정 | |
| # (주의: EOF 내부 변수는 \$를 붙여야 원격지 변수로 인식됨, 안 붙이면 로컬 변수로 치환됨) | |
| FULL_IMAGE="$DOCKER_IMAGE:$IMAGE_TAG" | |
| CONTAINER_NAME="frontend-app" | |
| echo "--- Pulling \$FULL_IMAGE ---" | |
| docker pull \$FULL_IMAGE | |
| echo "--- Stopping existing container ---" | |
| # 실행 중인 컨테이너가 있으면 중지하고 삭제 (|| true로 에러 방지) | |
| docker stop \$CONTAINER_NAME || true | |
| docker rm \$CONTAINER_NAME || true | |
| echo "--- Starting new container ---" | |
| # 프론트엔드 컨테이너 실행 | |
| docker run -d \\ | |
| --name \$CONTAINER_NAME \\ | |
| -p 3000:3000 \\ | |
| -e API_SERVER="$WAS_DOMAIN" \\ | |
| \$FULL_IMAGE | |
| # (선택) 불필요한 구버전 이미지 정리하여 디스크 확보 | |
| docker image prune -f | |
| echo "Deployment finished successfully." | |
| EOF |