feat: add public Docker deployment stack
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
# Sammo Core2026 Docker deployment
|
||||
|
||||
이 저장소는 새 호스트에서 `.env` 하나로 Core2026 Gateway, PostgreSQL, Redis,
|
||||
Caddy와 Git/PM2 release-controller를 기동하기 위한 공개 배포 골격입니다. 게임
|
||||
profile은 관리자 화면에서 각각 다른 branch 또는 commit을 선택해 DB 유지 배포,
|
||||
DB 초기화 배포와 rollback을 수행합니다.
|
||||
|
||||
## 빠른 시작
|
||||
|
||||
Docker Engine과 Compose plugin이 설치된 Linux 호스트에서 다음을 실행합니다.
|
||||
|
||||
```sh
|
||||
cp .env.example .env
|
||||
# .env의 domain, Core2026 URL, Kakao key와 모든 비밀값을 교체합니다.
|
||||
docker compose up -d --build --wait
|
||||
docker compose ps
|
||||
```
|
||||
|
||||
DNS의 `DOMAIN` A/AAAA record가 호스트를 가리키고 80/443 TCP 및 443 UDP가
|
||||
열려 있으면 Caddy가 인증서를 자동 발급합니다. Kakao Developers에는
|
||||
`https://DOMAIN/gateway/oauth/callback`을 redirect URI로 등록합니다. 첫 기동은
|
||||
Core2026 clone, frozen-lockfile install, build와 Gateway migration 때문에 수 분이
|
||||
걸릴 수 있습니다.
|
||||
|
||||
`INITIAL_ADMIN_*`은 사용자 table이 비어 있을 때만 superuser를 한 번 생성합니다.
|
||||
그 뒤 `/gateway/admin/server-operations`에서 `che`, `kwe`, `pwe`, `twe`, `nya`,
|
||||
`pya`, `hwe`마다 source branch/commit을 독립 선택합니다. `DB 유지 배포`는 현
|
||||
시즌을 보존하고, `DB 초기화 배포`는 scenario를 다시 seed합니다. Gateway 자체의
|
||||
배포와 이전 commit rollback은 같은 화면의 별도 release 영역에서 처리됩니다.
|
||||
|
||||
## 데이터와 복구 경계
|
||||
|
||||
- PostgreSQL, Redis, Core clone/worktree, PM2 상태, Caddy 인증서와 user icon은
|
||||
named volume 또는 `data/image`에 보존됩니다.
|
||||
- `/image/*`는 앱 artifact가 아니며 `data/image/`의 별도 운영 자산을 제공합니다.
|
||||
- 일반 `docker compose down`은 volume을 보존합니다. `down --volumes`는 DB와
|
||||
release 상태를 삭제하는 파괴적 명령이므로 backup 없이 실행하지 않습니다.
|
||||
- 앱 rollback은 Prisma migration을 되돌리지 않습니다. 이전 앱과 새 schema의
|
||||
호환성을 배포 전에 확인합니다.
|
||||
- Core2026 저장소가 비공개라면 이 공개 저장소에 credential을 추가하지 말고,
|
||||
호스트의 read-only deploy key나 credential helper를 별도 override로 mount합니다.
|
||||
|
||||
상태 확인과 로그:
|
||||
|
||||
```sh
|
||||
docker compose ps
|
||||
docker compose logs --tail=200 runtime caddy
|
||||
docker compose exec runtime pnpm --filter @sammo-ts/release-controller status
|
||||
```
|
||||
|
||||
## 개발 bind 모드
|
||||
|
||||
로컬 Core2026 checkout을 container에 bind하고 DB/Redis/Caddy는 같은 구성으로
|
||||
사용할 수 있습니다. `.env`에 `CORE_DEV_PATH=/absolute/path/to/core2026`,
|
||||
host 사용자의 `DEV_UID`/`DEV_GID`, `PUBLIC_SCHEME=http`, `DOMAIN=localhost`를
|
||||
추가한 뒤 실행합니다. 기본 UID/GID는 `1000:1000`입니다.
|
||||
|
||||
```sh
|
||||
docker compose -f compose.yaml -f compose.dev.yaml up -d --build
|
||||
docker compose exec runtime pnpm --filter @sammo-ts/gateway-api dev
|
||||
docker compose exec runtime pnpm --filter @sammo-ts/gateway-frontend dev --host 0.0.0.0
|
||||
```
|
||||
|
||||
개발 override의 runtime은 의존성과 Prisma client를 준비한 뒤 대기합니다. 필요한
|
||||
watch process를 별도 shell에서 실행합니다. 운영 release-controller를 시험하려면
|
||||
override 없이 production mode를 사용해야 하며, bind checkout의 Git metadata에
|
||||
container worktree 경로를 등록하지 않도록 주의합니다.
|
||||
|
||||
## 설정 검증
|
||||
|
||||
`.env`를 채운 뒤 실제 값을 출력하지 않는 검사를 실행합니다.
|
||||
|
||||
```sh
|
||||
./scripts/check.sh
|
||||
```
|
||||
|
||||
검사는 production/development Compose model과 Caddyfile 구문을 확인합니다.
|
||||
`docker compose config` 전체 출력에는 펼쳐진 비밀값이 포함될 수 있으므로 CI
|
||||
artifact나 이슈에 그대로 첨부하지 않습니다.
|
||||
Reference in New Issue
Block a user