회기 무발화 0턴 분리, 자기예측 락 불변식 및 TDD 회귀 검증 완료
Some checks failed
API contract / OpenAPI type drift (push) Failing after 3m27s

This commit is contained in:
Yun Chan 2026-09-08 23:28:06 +09:00
parent a479db7a5a
commit a0311c5957
100 changed files with 4884 additions and 11210 deletions

View file

@ -1,7 +1,7 @@
# 배포 파이프라인 (Deployment Pipeline)
> 작성: 2026-08-31 · 문서 소유: docs/ops (SSOT 방향)
> 상태: **초기 이관 완료 / NAS 자동배포 구성 잔여**
> 작성: 2026-08-31 · 2026-09-07 현행화 · 문서 소유: docs/ops
> 상태: **2026-09-01 NAS 수동 실배포 완료 / NAS 자동배포 구성 잔여**. 당시 증거이지 현재 live 상태 확인은 아니다.
## 목표 아키텍처 (소유자 지시)
@ -14,7 +14,7 @@ Forgejo git.chanpaca.net ────── 소스 SSOT (이관 완료 2026-08
│ └─ 배포 ──▶ NAS Production (vignette-prod)
│ docker-compose.nas.yml (SSOT-host=nas, runtime-class=production)
Cloudflare = 서비스 공개 서빙용만 유지 (tunnel 제거 대상)
Cloudflare tunnel은 소유자 지시에 따라 제거 대상이다. 다만 현재 NAS ingress가 이를 경유하므로, 대체 ingress의 보안·가용성·OAuth 경계를 검증하기 전에는 제거하지 않는다.
```
- 나는 이 PC를 **개발 전용**으로만 사용한다. 배포 대상은 반드시 **NAS Production**이다.
@ -29,7 +29,7 @@ Cloudflare = 서비스 공개 서빙용만 유지 (tunnel 제거 대상)
| `forgejo` | ssh://git@git.chanpaca.net:2222/yunchan/vignette.git | **소스 SSOT·배포** | ✅ 이관 완료 |
- Forgejo 레포: `yunchan/vignette` (id 14, public, default master)
- 이관 기준 커밋: `be08c0b5` (master 최신, 로컬 HEAD와 일치)
- 2026-09-01 배포 당시 기준 커밋: `dce85620`. 현재 master/로컬 HEAD는 실행 전에 별도로 확인한다.
- Forgejo 접근: SSH 키(`~/.ssh/id_ed25519`, Host `git.chanpaca.net``192.168.0.38:2222`) · API 토큰(`infra/.env.deploy``FORGEJO_API_TOKEN`, gitignore)
## 2. 로컬 브랜치 규칙
@ -37,21 +37,21 @@ Cloudflare = 서비스 공개 서빙용만 유지 (tunnel 제거 대상)
- `master` = Forgejo `master`와 동기화 (배포 기준선)
- 기능/scoped 브랜치 = 개발용, 검증 후 master로 합침
## 3. NAS Production 배포 흐름 (구성 예정)
## 3. NAS Production 배포 흐름 (수동 절차 실증, 자동화 구성 예정)
```
[이 PC] git push forgejo master
[Forgejo] 승인된 master 후보 SHA
[Forgejo] master = be08c0b5 (SSOT)
[NAS] git 컨테이너로 해당 SHA clone·검증
[NAS 192.168.0.38] git pull origin master (vignette-prod 소스)
▼ docker compose -f docker-compose.nas.yml up -d --build
vignette-prod (api/web/engine/db/proxy) 재기동
[NAS] API/Web build → online migration → docker compose 재생성
[Cloudflare] 서빙 (api-vignette.chanpaca.net / vignette.chanpaca.net)
vignette-prod (api/web/engine/db/proxy) readiness·데이터 보존 검증
[Cloudflare] 현재 공개 서빙 경로 유지 (대체 ingress 검증 뒤 tunnel retirement)
```
NAS 배포는 Forgejo에서 직접 pull하는 방식으로 전환하고, cloudflare tunnel에 의존하지 않는다.
NAS 호스트에는 git이 없으므로 git 컨테이너로 Forgejo에서 clone한다. 2026-09-01 수동 실배포는 이 흐름으로 `dce85620`을 검증했다. 자동배포 hook과 tunnel retirement는 별도 열린 게이트다.
## 4. 검증 게이트 (배포 전)
@ -93,6 +93,6 @@ docker compose -f docker-compose.nas.yml --env-file private/env.nas up -d
- [ ] Forgejo master 기준 NAS 자동배포 후크(수동 절차는 §5로 실증 완료)
- [x] Forgejo가 SSOT임을 문서에 반영, github은 private 미러 유지
- [ ] cloudflare tunnel 제거 검토 — 현재 api-vignette 서빙이 NAS 호스트 상주 cloudflared 터널 경유라 제거 시 대체 ingress 필요(소유자 결정)
- [ ] cloudflare tunnel 제거 또는 유지 결정 — 현재 `api-vignette`는 NAS 호스트 상주 cloudflared 터널 경유다. 대체 ingress의 보안·가용성·OAuth 경계가 검증되기 전에는 제거하지 않는다.
- [ ] 배포 시 NAS 접근 자격(SSH 키/배포 계정)을 `.env.deploy`/시크릿으로 관리
```