- 공식 워크플로우(.gitea/workflows/deploy.yml) 그대로 사용 (repo secrets 주입) - deploy/docker-compose.yml: Next.js 포트 3000으로 Traefik 라벨 변경 - 커스텀 배포 방식 제거 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
49 라인
1.6 KiB
Markdown
49 라인
1.6 KiB
Markdown
# 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 터널이 필요하다.
|
|
|
|
```bash
|
|
# 터미널 1: DB 터널 (localhost:5436 -> pg-jskim)
|
|
./scripts/db-tunnel.sh
|
|
|
|
# 터미널 2: 개발 서버
|
|
npm run dev
|
|
```
|
|
|
|
- 환경변수: `.env.local` (gitignore 대상, `.env.example` 참고)
|
|
- DB 연결 확인: http://localhost:3000/api/health
|
|
|
|
## 배포
|
|
|
|
dev-pilots 교육 파이프라인을 그대로 사용한다. `main` 브랜치에 push하면
|
|
Gitea Actions(`.gitea/workflows/deploy.yml`)가 자동으로:
|
|
|
|
1. Docker 이미지 빌드 → Harbor push (`harbor.wace.me/dev-pilots/jskim`)
|
|
2. `deploy/docker-compose.yml`로 컨테이너 교체 (`web` + `pgnet` 네트워크, Traefik 라벨, 포트 3000)
|
|
3. Traefik이 `jskim.vexplor.com` HTTPS 라우팅
|
|
|
|
운영 `DATABASE_URL`과 Harbor 인증(`HARBOR_USER`/`HARBOR_SECRET`)은 저장소 Secrets로 이미 등록되어 있다.
|
|
|
|
## 구조
|
|
|
|
```
|
|
src/
|
|
app/ # App Router 페이지
|
|
api/health/ # DB 연결 헬스체크
|
|
lib/db.ts # pg Pool (DATABASE_URL 사용)
|
|
scripts/db-tunnel.sh
|
|
Dockerfile # standalone 빌드, node:20-alpine
|
|
deploy/docker-compose.yml # 배포 정의 (Traefik 라벨, 앱 포트)
|
|
.gitea/workflows/deploy.yml # CI/CD (dev-pilots 표준)
|
|
```
|