From d60da609814c2160a8b700a1840b594c5f471ab2 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Fri, 31 Jul 2026 03:08:34 +0000 Subject: [PATCH] feat(deploy): cut over msn.iykyka.com to Ykavu compose stack MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- docker-compose.yml | 10 ++++++++++ docs/deploy-checklist.md | 14 +++++++------- docs/deploy-portainer.md | 18 +++++++++--------- 3 files changed, 26 insertions(+), 16 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index d539724..c8dda89 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -78,6 +78,16 @@ services: timeout: 3s retries: 5 restart: unless-stopped + # Join Nginx Proxy Manager network so msn.iykyka.com can reach web by name. + networks: + - default + - npm volumes: ykavu_pgdata: + +networks: + default: + npm: + external: true + name: nginx-proxy_default diff --git a/docs/deploy-checklist.md b/docs/deploy-checklist.md index 6e836bb..43fc520 100644 --- a/docs/deploy-checklist.md +++ b/docs/deploy-checklist.md @@ -113,14 +113,14 @@ N2-A 전체 확정. 다음 구현 트랙은 **N1 스모크 → N2-B (Dockerfile/ | **N2-B5** | env 템플릿 | **done** | `.env.example`에 Postgres/`PUBLIC_API_BASE`/`WEB_HOST_PORT` 등 추가 | | **N2-B6** | 데이터 볼륨 | **done** | compose 볼륨 `ykavu_pgdata` | | **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-B9** | 리버스 프록시 | **blocked** | OpenResty → `web` 포트. 절차 [`deploy-portainer.md`](./deploy-portainer.md) | -| **N2-B10** | Portainer 스택 | **blocked** | 절차 문서화 완료. Up은 Master 또는 자격 제공 후 | -| **N2-B11** | 구 MSN 컷오버 | **blocked** | 현재 `msn` = Express/`{"ok":true}` (구스택). 컷오버 절차 문서화됨 | -| **N2-B12** | 배포 스모크 | **blocked** | 컷오버 후 [`deploy-portainer.md`](./deploy-portainer.md) §C | -| **N2-B13** | 운영 runbook | **done** (초안) | [`deploy-docker.md`](./deploy-docker.md) · [`deploy-portainer.md`](./deploy-portainer.md) | +| **N2-B8** | CORS + API base | **done** (2026-07-31) | `PUBLIC_API_BASE=https://msn.iykyka.com`. OPTIONS CORS + 가입 확인 | +| **N2-B9** | 리버스 프록시 | **done** (2026-07-31) | Nginx Proxy Manager host #7 → `ykavu-web-1:80` | +| **N2-B10** | Portainer 스택 | **done** (compose CLI) | 서버 `~/project/ykavu` 에서 `docker compose up -d --build` (Portainer UI 아님) | +| **N2-B11** | 구 MSN 컷오버 | **done** (2026-07-31) | `iykyk_msn-service` stop. NPM `msn.iykyka.com` → 와카뷰. 롤백: MSN start + NPM upstream 복구 | +| **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) | -관련: Portainer `https://portainer.iykyka.com/`, SSH `iykyka@iykyka.com:7788` (키 필요). 시크릿 git 금지. +관련: 라이브 `https://msn.iykyka.com` · 서버 path `~/project/ykavu` · web 포트 `8788`(+ NPM). 시크릿 git 금지. --- diff --git a/docs/deploy-portainer.md b/docs/deploy-portainer.md index c4a8f03..8dd420a 100644 --- a/docs/deploy-portainer.md +++ b/docs/deploy-portainer.md @@ -4,19 +4,19 @@ 스택 정의: 저장소 root [`docker-compose.yml`](../docker-compose.yml) 개요: [`deploy-docker.md`](./deploy-docker.md) -## 현재 프로브 (에이전트, 2026-07-31) +## 라이브 상태 (2026-07-31 컷오버 완료) | URL | 결과 | |-----|------| -| `https://msn.iykyka.com/` | Express `Cannot GET /` (404) — 구 Node MSN으로 추정 | -| `https://msn.iykyka.com/health` | `{"ok":true}` — 구 스택 | -| `https://portainer.iykyka.com/` | 200, API `Version 2.39.2` | -| 엣지 | `Server: openresty` | +| `https://msn.iykyka.com/health` | `{"status":"ok"}` — 와카뷰 | +| `https://msn.iykyka.com/demo` | `DEMO-YKAVU` | +| `https://msn.iykyka.com/` | Flutter web 200 | +| 서버 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·컷오버는 -Master가 Portainer 또는 SSH로 수행(또는 키/토큰을 에이전트에 제공). - -새 스택 헬스 응답은 `{"status":"ok"}` (구스택 `{"ok":true}` 과 구분). +`docker-compose.yml`의 `web` 서비스는 external network `nginx-proxy_default`에 연결됨. ---