Skip to content

πŸ› fix: Next.js 14 ν‘œμ€€ standalone 배포 방식 적용 #6

πŸ› fix: Next.js 14 ν‘œμ€€ standalone 배포 방식 적용

πŸ› fix: Next.js 14 ν‘œμ€€ standalone 배포 방식 적용 #6

Workflow file for this run

name: Deploy to EC2
on:
pull_request:
types: [closed]
branches: [main, develop]
jobs:
deploy:
if: github.event.pull_request.merged == true
runs-on: self-hosted
timeout-minutes: 10
steps:
- uses: actions/checkout@v3
- name: Deploy to EC2
run: |
set -e
# 배포 λ‘œκΉ…
echo "πŸš€ Starting deployment..."
echo "πŸ“ PR: #${{ github.event.pull_request.number }}"
echo "πŸ”„ Commit: ${{ github.sha }}"
# λ©”λͺ¨λ¦¬ 정리
echo "🧹 Cleaning up Docker resources..."
docker system prune -f
# λΈŒλžœμΉ˜λ³„ ν™˜κ²½ μ„€μ •
if [ "${{ github.event.pull_request.base.ref }}" = "main" ]; then
CONTAINER_NAME="app-prod"
ENV_FILE="app-prod.env"
OTHER_CONTAINER="app-dev"
echo "πŸš€ Deploying to PRODUCTION"
elif [ "${{ github.event.pull_request.base.ref }}" = "develop" ]; then
CONTAINER_NAME="app-dev"
ENV_FILE="app-dev.env"
OTHER_CONTAINER="app-prod"
echo "πŸ§ͺ Deploying to DEVELOPMENT"
fi
# 배포 디렉토리 μ„€μ •
DEPLOY_DIR="/home/ubuntu/coplan/app"
# λ©”λͺ¨λ¦¬ 확보λ₯Ό μœ„ν•΄ λ‹€λ₯Έ μ»¨ν…Œμ΄λ„ˆ 쀑지
echo "⏸️ Stopping other container to free memory..."
docker compose stop ${OTHER_CONTAINER} || true
# rsync둜 파일 동기화
echo "πŸ“‚ Synchronizing files..."
rsync -av \
--exclude='.git' \
--exclude='node_modules' \
--exclude='.next' \
--exclude='.env*' \
--exclude='*.log' \
--delete \
./ ${DEPLOY_DIR}/
# μž‘μ—… 디렉토리 이동
cd /home/ubuntu/coplan
# ν™˜κ²½λ³€μˆ˜ 파일 볡사 (μžˆλŠ” 경우만)
if [ -f "/home/ubuntu/env/${ENV_FILE}" ]; then
echo "πŸ“‹ Copying environment variables..."
cp "/home/ubuntu/env/${ENV_FILE}" "${DEPLOY_DIR}/.env.production"
fi
# Docker 이미지 λΉŒλ“œ
echo "πŸ”¨ Building Docker image..."
DOCKER_BUILDKIT=1 docker compose build ${CONTAINER_NAME}
# μ»¨ν…Œμ΄λ„ˆ ꡐ체 (무쀑단 배포)
echo "πŸ”„ Updating container..."
docker compose up -d --no-deps ${CONTAINER_NAME}
# λ‹€λ₯Έ μ»¨ν…Œμ΄λ„ˆ μž¬μ‹œμž‘
echo "πŸ”„ Restarting other container..."
docker compose up -d ${OTHER_CONTAINER}
# ν—¬μŠ€μ²΄ν¬
echo "πŸ₯ Health check..."
sleep 10
if docker ps | grep -q ${CONTAINER_NAME}; then
echo "βœ… Container is running"
docker logs --tail 20 ${CONTAINER_NAME}
else
echo "❌ Container failed to start"
docker logs ${CONTAINER_NAME}
exit 1
fi
echo "βœ… Deployment completed successfully!"