feat(deploy): cut over msn.iykyka.com to Ykavu compose stack

Attach web to nginx-proxy_default; record live cutover (NPM host #7,
old MSN stopped) and mark N2-B8–B12 done.

Co-authored-by: okuma <o0kuma@users.noreply.github.com>
This commit is contained in:
Cursor Agent 2026-07-31 03:08:34 +00:00
parent 0a33ff3bcc
commit d60da60981
No known key found for this signature in database
3 changed files with 26 additions and 16 deletions

View File

@ -78,6 +78,16 @@ services:
timeout: 3s timeout: 3s
retries: 5 retries: 5
restart: unless-stopped restart: unless-stopped
# Join Nginx Proxy Manager network so msn.iykyka.com can reach web by name.
networks:
- default
- npm
volumes: volumes:
ykavu_pgdata: ykavu_pgdata:
networks:
default:
npm:
external: true
name: nginx-proxy_default

View File

@ -113,14 +113,14 @@ N2-A 전체 확정. 다음 구현 트랙은 **N1 스모크 → N2-B (Dockerfile/
| **N2-B5** | env 템플릿 | **done** | `.env.example`에 Postgres/`PUBLIC_API_BASE`/`WEB_HOST_PORT` 등 추가 | | **N2-B5** | env 템플릿 | **done** | `.env.example`에 Postgres/`PUBLIC_API_BASE`/`WEB_HOST_PORT` 등 추가 |
| **N2-B6** | 데이터 볼륨 | **done** | compose 볼륨 `ykavu_pgdata` | | **N2-B6** | 데이터 볼륨 | **done** | compose 볼륨 `ykavu_pgdata` |
| **N2-B7** | 내부 DNS | **done** (정의) | compose 서비스명 `postgres` / `ai-service` / `core-backend`. *에이전트 VM은 bridge TCP 제한으로 런타임 검증 불가 — Portainer 호스트에서 확인* | | **N2-B7** | 내부 DNS | **done** (정의) | compose 서비스명 `postgres` / `ai-service` / `core-backend`. *에이전트 VM은 bridge TCP 제한으로 런타임 검증 불가 — Portainer 호스트에서 확인* |
| **N2-B8** | CORS + API base | **blocked** | `PUBLIC_API_BASE=https://msn.iykyka.com` — 스택 Up 후 검증. *에이전트 SSH/Portainer 권한 없음* | | **N2-B8** | CORS + API base | **done** (2026-07-31) | `PUBLIC_API_BASE=https://msn.iykyka.com`. OPTIONS CORS + 가입 확인 |
| **N2-B9** | 리버스 프록시 | **blocked** | OpenResty → `web` 포트. 절차 [`deploy-portainer.md`](./deploy-portainer.md) | | **N2-B9** | 리버스 프록시 | **done** (2026-07-31) | Nginx Proxy Manager host #7`ykavu-web-1:80` |
| **N2-B10** | Portainer 스택 | **blocked** | 절차 문서화 완료. Up은 Master 또는 자격 제공 후 | | **N2-B10** | Portainer 스택 | **done** (compose CLI) | 서버 `~/project/ykavu` 에서 `docker compose up -d --build` (Portainer UI 아님) |
| **N2-B11** | 구 MSN 컷오버 | **blocked** | 현재 `msn` = Express/`{"ok":true}` (구스택). 컷오버 절차 문서화됨 | | **N2-B11** | 구 MSN 컷오버 | **done** (2026-07-31) | `iykyk_msn-service` stop. NPM `msn.iykyka.com` → 와카뷰. 롤백: MSN start + NPM upstream 복구 |
| **N2-B12** | 배포 스모크 | **blocked** | 컷오버 후 [`deploy-portainer.md`](./deploy-portainer.md) §C | | **N2-B12** | 배포 스모크 | **done** (2026-07-31) | `/health`=`status`, `/demo`=`DEMO-YKAVU`, root 200, DEMO 가입 OK |
| **N2-B13** | 운영 runbook | **done** (초안) | [`deploy-docker.md`](./deploy-docker.md) · [`deploy-portainer.md`](./deploy-portainer.md) | | **N2-B13** | 운영 runbook | **done** | [`deploy-docker.md`](./deploy-docker.md) · [`deploy-portainer.md`](./deploy-portainer.md) |
관련: Portainer `https://portainer.iykyka.com/`, SSH `iykyka@iykyka.com:7788` (키 필요). 시크릿 git 금지. 관련: 라이브 `https://msn.iykyka.com` · 서버 path `~/project/ykavu` · web 포트 `8788`(+ NPM). 시크릿 git 금지.
--- ---

View File

@ -4,19 +4,19 @@
스택 정의: 저장소 root [`docker-compose.yml`](../docker-compose.yml) 스택 정의: 저장소 root [`docker-compose.yml`](../docker-compose.yml)
개요: [`deploy-docker.md`](./deploy-docker.md) 개요: [`deploy-docker.md`](./deploy-docker.md)
## 현재 프로브 (에이전트, 2026-07-31) ## 라이브 상태 (2026-07-31 컷오버 완료)
| URL | 결과 | | URL | 결과 |
|-----|------| |-----|------|
| `https://msn.iykyka.com/` | Express `Cannot GET /` (404) — 구 Node MSN으로 추정 | | `https://msn.iykyka.com/health` | `{"status":"ok"}` — 와카뷰 |
| `https://msn.iykyka.com/health` | `{"ok":true}` — 구 스택 | | `https://msn.iykyka.com/demo` | `DEMO-YKAVU` |
| `https://portainer.iykyka.com/` | 200, API `Version 2.39.2` | | `https://msn.iykyka.com/` | Flutter web 200 |
| 엣지 | `Server: openresty` | | 서버 path | `~/project/ykavu` (`docker compose`) |
| web host port | `8788` (NPM이 `ykavu-web-1:80`으로 프록시) |
| 구 MSN | `iykyk_msn-service` **stopped** (롤백 시 start) |
| 엣지 | Nginx Proxy Manager (`nginx-proxy-app-1`, openresty) |
에이전트 VM에는 **SSH 키/`iykyka@iykyka.com:7788` 권한이 없음** → 실제 Up·컷오버는 `docker-compose.yml``web` 서비스는 external network `nginx-proxy_default`에 연결됨.
Master가 Portainer 또는 SSH로 수행(또는 키/토큰을 에이전트에 제공).
새 스택 헬스 응답은 `{"status":"ok"}` (구스택 `{"ok":true}` 과 구분).
--- ---