Skip to content

[fix] #1 api 요청 로직 수정 #8

[fix] #1 api 요청 로직 수정

[fix] #1 api 요청 로직 수정 #8

Workflow file for this run

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