diff --git a/.dockerignore b/.dockerignore index 8399d2f..ad980b9 100644 --- a/.dockerignore +++ b/.dockerignore @@ -7,12 +7,16 @@ coverage # 깃 관련 파일 .git .gitignore +.github # 환경 변수 .env .env.dev +.env.local +.env.*.local # 로그 파일 +*.log npm-debug.log yarn-error.log pnpm-debug.log @@ -27,4 +31,19 @@ docker-compose.yml .dockerignore # 빌드에 필요 없는 파일 -README.md \ No newline at end of file +README.md +*.md +docs + +# 테스트/임시 파일 +tests +__tests__ +*.test.ts +*.spec.ts + +# IDE 설정 +.vscode +.idea + +# Swagger 산출물 (컨테이너 빌드 시 재생성) +swagger.json diff --git a/.github/workflows/deploy-develop.yml b/.github/workflows/deploy-develop.yml index 382094e..d9cde5e 100644 --- a/.github/workflows/deploy-develop.yml +++ b/.github/workflows/deploy-develop.yml @@ -2,7 +2,7 @@ name: deploy-dev on: push: - branches: [ develop ] + branches: [ develop ] workflow_dispatch: jobs: @@ -48,27 +48,22 @@ jobs: ${{ secrets.ENV_DEV_CONTENT }} EOF' - - name: Install, Generate & Build on server - run: | - ssh prod 'cd /opt/app-dev && pnpm install --frozen-lockfile && pnpm exec prisma generate && rm -rf dist && pnpm build' - - # 테스트 DB 마이그레이션 + # 테스트 DB 마이그레이션 (npx로 prisma CLI 1회 호출 — EC2 build 단계 없이) - name: Run Prisma DB Push (Dev) run: | ssh prod << 'EOF' set -euo pipefail cd /opt/app-dev - # .env.dev 파일을 로드하여 실행 - export $(cat .env.dev | xargs) - pnpm exec prisma db push + export $(grep -v '^#' .env.dev | xargs) + npx --yes -p prisma@^6 prisma db push EOF - # 도커 빌드 전 디스크 용량 확보 - - name: Clean up unused Docker data on EC2 + # 도커 빌드 전 디스크 정리 (7일 이상 미사용 데이터만 — BuildKit 캐시 보존) + - name: Prune stale Docker data on EC2 run: | - ssh prod 'sudo docker system prune -af' + ssh prod 'sudo docker system prune -f --filter "until=168h" || true' - # app-dev 컨테이너만 재시작 (운영 컨테이너 app, caddy는 건드리지 않음) + # app-dev 컨테이너만 빌드/재시작 (install/generate/build는 Dockerfile 멀티스테이지로 통합) - name: Deploy Docker services (Dev) run: | - ssh prod 'cd /opt/app-dev && sudo docker compose -p promptplace -f docker-compose.yml up -d --build app-dev' \ No newline at end of file + ssh prod 'cd /opt/app-dev && sudo docker compose -p promptplace -f docker-compose.yml up -d --build app-dev' diff --git a/.github/workflows/deploy-main.yml b/.github/workflows/deploy-main.yml index 289722d..2217942 100644 --- a/.github/workflows/deploy-main.yml +++ b/.github/workflows/deploy-main.yml @@ -6,7 +6,7 @@ on: workflow_dispatch: jobs: - deploy: + deploy: runs-on: ubuntu-latest permissions: contents: read @@ -53,23 +53,22 @@ jobs: ${{ secrets.ENV_CONTENT }} EOF' - - name: Install, Generate & Build on server - run: | - ssh prod 'cd /opt/app-backup && pnpm install --frozen-lockfile && pnpm exec prisma generate && rm -rf dist && pnpm build' - + # Prisma 마이그레이션 (npx로 prisma CLI 1회 호출 — EC2 build 단계 없이) - name: Run Prisma migrations (deploy) if: steps.paths-filter.outputs.prisma == 'true' run: | ssh prod << 'EOF' set -euo pipefail cd /opt/app-backup - pnpm exec prisma migrate deploy + export $(grep -v '^#' .env | xargs) + npx --yes -p prisma@^6 prisma migrate deploy EOF - name: Stop and Remove old containers run: | ssh prod 'cd /opt/app-backup && sudo docker rm -f myapp || true && sudo docker rm -f caddy || true' + # Docker 빌드/배포 (install/generate/build는 Dockerfile 멀티스테이지로 통합) - name: Deploy Docker services - run: | - ssh prod 'cd /opt/app-backup && sudo docker compose -p promptplace -f docker-compose.yml up -d --build app caddy' \ No newline at end of file + run: | + ssh prod 'cd /opt/app-backup && sudo docker compose -p promptplace -f docker-compose.yml up -d --build app caddy'