파일
project/README.md
T
kjs그리고Claude Fable 5 f695b583e4 프로젝트 기본 구성: Next.js + PostgreSQL + Gitea Actions 배포
- Next.js 15 (App Router, TypeScript, Tailwind), pg 커넥션 풀
- /api/health DB 헬스체크, standalone Dockerfile
- Gitea Actions: 빌드 → 컨테이너 교체 → Traefik(jskim.vexplor.com) 라우팅
- 로컬 개발용 SSH DB 터널 스크립트 (scripts/db-tunnel.sh)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-12 17:01:55 +09:00

1.4 KiB

jskim.vexplor.com

Next.js(App Router, TypeScript) + PostgreSQL 개인 프로젝트.

스택

  • 프론트/백엔드: Next.js 15 (React 19, API Routes로 Node.js 백엔드 겸용)
  • DB: PostgreSQL 17 — THREEDEV 서버(211.115.91.140) pg-jskim 컨테이너, DB/계정 jskim
  • 배포: Gitea Actions → Harbor(harbor.wace.me/dev-pilots/jskim) → Docker + Traefik(HTTPS, jskim.vexplor.com)

로컬 개발

DB가 방화벽 뒤에 있어 SSH 터널이 필요하다.

# 터미널 1: DB 터널 (localhost:5436 -> pg-jskim)
./scripts/db-tunnel.sh

# 터미널 2: 개발 서버
npm run dev

배포

main 브랜치에 push하면 Gitea Actions(.gitea/workflows/build-and-deploy.yml)가 자동으로:

  1. 서버(THREEDEV)에서 Docker 이미지 빌드 (레지스트리 불필요)
  2. 컨테이너 교체 (web + pgnet 네트워크, Traefik 라벨)
  3. /api/health 헬스체크

운영 DATABASE_URL은 서버의 /home/three/jskim/.env(chmod 600)에서 읽는다.

구조

src/
  app/              # App Router 페이지
    api/health/     # DB 연결 헬스체크
  lib/db.ts         # pg Pool (DATABASE_URL 사용)
scripts/db-tunnel.sh
Dockerfile          # standalone 빌드, node:20-alpine
.gitea/workflows/   # CI/CD