[docs] AGENTS,deploy: 재굽기 컨테이너는 solution-prerender 다 — solution-frontend 는 개발용

문서 5곳이 `docker compose restart solution-frontend` 라고 적고 있었다. 그 서비스는
profiles: ["dev"] 라 운영에서는 뜨지 않는다 — 사이트를 굽는 건 solution-prerender 다.

이름이 비슷한 데다 명령이 실패하지도 않아서, 재굽기를 했다고 믿고 넘어가게 된다.
실제로 운영 사이트 CSS 복구가 이 명령으로 한 번 헛돌았다(2026-09-07).

- AGENTS.md · docs/DEPLOY.md · docs/DEVLOG.md: 서비스명 교체
- AGENTS.md 함정 목록: 왜 조용히 틀리는지 ★로 박았다

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018xTWrJ6Mrr6HhEN6hZEER4
This commit is contained in:
Mina Choi 2026-09-07 13:30:11 +09:00
parent 292cf26fd9
commit 6f4e05517f
3 changed files with 9 additions and 5 deletions

View File

@ -40,11 +40,15 @@
없고**, 그때 디스크에 있던 기존 자산이 전부 "대장에 없음" 으로 분류돼 한꺼번에 삭제됐다.
옛 자산을 남기려고 만든 코드가 첫 실행에서 정확히 반대로 동작했다.
→ 자산을 지우는 코드를 손볼 때는 **"기록이 없다"와 "만료됐다"를 절대 같이 묶지 않는다.**
→ 이미 끊겼다면 복구는 `docker compose restart solution-frontend` (기동하며 전체 재굽기).
→ 이미 끊겼다면 복구는 `docker compose restart solution-prerender` (기동하며 전체 재굽기).
- **★ 사이트를 굽는 컨테이너는 `solution-prerender` 다.** `solution-frontend` 는 **개발용**이라
운영에서는 아예 뜨지 않는다(`docker-compose.yml` `profiles: ["dev"]`). 이름이 비슷해서
`restart solution-frontend` 를 치면 **아무 일도 안 일어나는데 명령은 성공한다** —
재굽기를 했다고 믿고 넘어가게 된다. 실제로 그렇게 복구가 한 번 헛돌았다(2026-09-07).
- **★ 프론트(`solution/site`)를 배포하면 반드시 전체 재굽기 + 전체 재업로드.**
`azure_static.publish(slug)` 는 공용 자산 + `s/<slug>` 만 올린다 —
**렌더러를 고쳐도 다른 사이트에는 반영되지 않는다.**
→ `docker compose restart solution-frontend` 후 `python scripts/republish_all.py`
→ `docker compose restart solution-prerender` 후 `python scripts/republish_all.py`
- **발행 호스트는 두 곳에 있고 같아야 한다.** 백엔드 `SITE_PUBLIC_HOST`(기본 `web4ai.o2osolution.ai`,
`site_payload.py`) ↔ 프론트 `VITE_PUBLISH_HOST`. canonical·og:url·sitemap·IndexNow 가 전부
이 값을 쓴다. 그리고 **`origin` 은 payload JSON 에 구워진다** — 호스트를 바꾸면 프리렌더

View File

@ -87,7 +87,7 @@ CSS 404 였다 — 하필 크롤러가 그 순간 렌더하면 스타일 없는
**규칙: `solution/site` 를 배포하면 반드시 전체 재굽기 + 전체 재업로드.**
```bash
docker compose restart solution-frontend # 기동하며 전체 재굽기
docker compose restart solution-prerender # 기동하며 전체 재굽기
docker compose logs -f solution-frontend # "[watch] 기동" 배치가 끝날 때까지 대기
docker compose exec solution-worker python scripts/republish_all.py
```
@ -225,5 +225,5 @@ docker compose exec solution-worker python scripts/republish_all.py
## 5. 되돌리기
`out/` 은 재생성물이라 백업이 필요 없다. 문제가 생기면
`docker compose restart solution-frontend` → 전체 재굽기 → `republish_all.py`.
`docker compose restart solution-prerender` → 전체 재굽기 → `republish_all.py`.
지켜야 할 건 **DB 와 `out/payloads/`** 뿐이다.

View File

@ -23,7 +23,7 @@
- 대장에 없는 파일은 지우지 않고 **"지금 처음 본 것" 으로 입양해** 보관 기간을 새로 준다
- 규칙으로 굳혀 둔다: **"기록이 없다" 와 "만료됐다" 를 같이 묶지 않는다**(AGENTS.md 함정 목록)
**복구** — `docker compose restart solution-frontend` (기동하며 전체 재굽기 → HTML 이 새 해시를
**복구** — `docker compose restart solution-prerender` (기동하며 전체 재굽기 → HTML 이 새 해시를
가리킨다). 자산을 되살리는 게 아니라 HTML 을 새로 굽는 쪽이 빠르다.
**검증** — 배포 직전 상태를 재현: `out/assets` 에 옛 해시 파일만 두고 대장 없이 첫 실행 →