diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml deleted file mode 100644 index d5664c6..0000000 --- a/.github/workflows/deploy.yml +++ /dev/null @@ -1,95 +0,0 @@ -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!" diff --git a/Dockerfile b/Dockerfile index 3504ccf..563d61f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,28 +1,26 @@ -# 1단계: λͺ¨λ“  μ˜μ‘΄μ„± μ„€μΉ˜ (μΊμ‹œμš©) -FROM node:18-alpine AS deps +FROM node:18-alpine AS base + +FROM base AS deps WORKDIR /app COPY package*.json ./ RUN npm ci -# 2단계: λΉŒλ“œ (standalone λͺ¨λ“œ) -FROM node:18-alpine AS builder +FROM base AS builder WORKDIR /app COPY --from=deps /app/node_modules ./node_modules COPY . . - -# Next.js standalone λΉŒλ“œ 생성 RUN npm run build -# 3단계: ν”„λ‘œλ•μ…˜ μ‹€ν–‰ ν™˜κ²½ -FROM node:18-alpine AS runner +FROM base AS runner WORKDIR /app -ENV NODE_ENV production +ENV NODE_ENV=production COPY --from=builder /app/.next/standalone ./ COPY --from=builder /app/.next/static ./.next/static COPY --from=builder /app/public ./public EXPOSE 3000 -ENV PORT 3000 +ENV PORT=3000 +ENV HOSTNAME="0.0.0.0" CMD ["node", "server.js"] \ No newline at end of file