플랫폼 공용 도메인
multi-saas-kit은 제품 사이트 도메인과 설치된 플랫폼 도메인을 분리해서 운영할 수 있습니다. 또한 플랫폼 Dev Tools는 1차 서브도메인 = 공개 랜딩 / .devtools. prefix = 운영자 어드민의 2-서브도메인 패턴을 따릅니다.
왜 도메인 체계가 중요한가
| 이유 | 설명 |
|---|---|
| 보안 분리 | 어드민 도구는 일반 사용자에게 노출되면 안 됨 — 별도 prefix로 접근 경로 분리 |
| 랜딩 홍보성 | 1차 서브도메인은 마케팅 랜딩으로 SEO/공개 목적에 사용 |
| 일관성 | 새 Dev Tool 추가 시 규칙이 명확해 혼란 없음 |
| 자체 호스팅 가능 | 고객사가 ${ROOT_DOMAIN}만 바꾸면 동일 체계 재현 가능 |
도메인 계층 구조
codebase.how (1) 제품 포털 — 판매/홍보
├── docs.codebase.how (2) 플랫폼 문서 (이 사이트)
├── store.codebase.how (3) 플러그인 스토어
│
├── devtools.codebase.how (4) Dev Tools 허브 (진입점)
│
│ ─── Dev Tools 2-서브도메인 패턴 ───
│
├── ai-core.codebase.how 랜딩(공개) │
│ └── ai-core.devtools.codebase.how 어드민(운영자) │ AI Core Dashboard
├── db.codebase.how 랜딩(공개) │
│ └── db.devtools.codebase.how 어드민(운영자) │ pgAdmin
├── redis.codebase.how 랜딩(공개) │
│ └── redis.devtools.codebase.how 어드민(운영자) │ RedisInsight
├── monitor.codebase.how 랜딩(공개) │
│ └── monitor.devtools.codebase.how 어드민(운영자) │ Grafana LGTM
│
│ ─── 플랫폼 AI 서비스 ───
│
├── llm.codebase.how LLM Gateway (LiteLLM)
├── speech.codebase.how Speech API (TTS/STT)
└── chorus.codebase.how Chorus orchestration
도메인 분류
| 구분 | 예시 | 공개 여부 | 설명 |
|---|---|---|---|
| 제품 포털 | codebase.how | 🌐 공개 | 판매/홍보/문의 |
| 포털 스토어 | store.codebase.how | 🌐 공개 | 플러그인 스토어 |
| 플랫폼 문서 | docs.codebase.how | 🌐 공개 | 설치된 플랫폼 공용 문서 |
| Dev Tools 허브 | devtools.codebase.how | 🌐 공개 | 모든 도구의 단일 진입점 (카드형 랜딩) |
| Dev Tools 랜딩 | ai-core/db/redis/monitor.codebase.how | 🌐 공개 | 각 도구 소개 랜딩 (hub Nginx vhost) |
| Dev Tools 어드민 | *.devtools.codebase.how | 🔒 제한 | 실제 운영자 콘솔 (Tailscale/IP 제한 필수) |
| 플랫폼 AI 서비스 | llm/speech/chorus.codebase.how | 🔐 API 키 | API 엔드포인트 |
| 프로젝트 도메인 | quant.how, apis.how 등 | 🌐 공개 | 각 workspace 프로젝트 서비스 |
2-서브도메인 패턴 상세
원칙: {tool}.codebase.how은 공개 랜딩, {tool}.devtools.codebase.how는 운영자 어드민.
| 도구 | 랜딩 (공개) | 어드민 (.devtools. prefix) | 어드민 포트 |
|---|---|---|---|
| AI Core | ai-core.codebase.how | ai-core.devtools.codebase.how | 7000 |
| pgAdmin | db.codebase.how | db.devtools.codebase.how | 7050 |
| RedisInsight | redis.codebase.how | redis.devtools.codebase.how | 7051 |
| Monitoring | monitor.codebase.how | monitor.devtools.codebase.how | 7060 |
| Hub | devtools.codebase.how | — (자체가 진입점) | 7001 |
구현 구조
- 랜딩 4종: 모두
msk-hub컨테이너(7001)가 단일 Nginx로 Host 헤더 기반 vhost 분기 - 어드민 5종: NPM Proxy Host가 각 서비스 포트로 직접 포워드
NPM Proxy Host
├── ai-core.codebase.how → host:7001 (hub Nginx → landings/ai-core)
├── db.codebase.how → host:7001 (hub Nginx → landings/db)
├── redis.codebase.how → host:7001 (hub Nginx → landings/redis)
├── monitor.codebase.how → host:7001 (hub Nginx → landings/monitor)
├── devtools.codebase.how → host:7001 (hub Nginx default)
│
├── ai-core.devtools.codebase.how → host:7000 (Laravel Filament /platform)
├── db.devtools.codebase.how → host:7050 (pgAdmin)
├── redis.devtools.codebase.how → host:7051 (RedisInsight)
└── monitor.devtools.codebase.how → host:7060 (Grafana)
설정 (.env)
플랫폼 공용 도메인은 루트 .env 에서 중앙 관리합니다.
# 루트 도메인
ROOT_DOMAIN=codebase.how
# 제품 포털
PORTAL_WEB_URL=https://codebase.how
PORTAL_STORE_URL=https://store.codebase.how
PRODUCT_SUPPORT_EMAIL=support@codebase.how
# 플랫폼 공용
PLATFORM_BASE_DOMAIN=codebase.how
PLATFORM_DOCS_URL=https://docs.codebase.how
# Dev Tools 허브
PLATFORM_DEVTOOLS_URL=https://devtools.codebase.how
# Dev Tools 랜딩 (1차 서브도메인, 공개)
PLATFORM_AI_CORE_URL=https://ai-core.codebase.how
PLATFORM_DB_URL=https://db.codebase.how
PLATFORM_REDIS_URL=https://redis.codebase.how
PLATFORM_MONITOR_URL=https://monitor.codebase.how
# Dev Tools 어드민 (.devtools. prefix, 운영자 전용)
PLATFORM_AI_CORE_ADMIN_URL=https://ai-core.devtools.codebase.how
PLATFORM_DB_ADMIN_URL=https://db.devtools.codebase.how
PLATFORM_REDIS_ADMIN_URL=https://redis.devtools.codebase.how
PLATFORM_MONITOR_ADMIN_URL=https://monitor.devtools.codebase.how
# 플랫폼 AI 서비스
LLM_DOMAIN=llm.codebase.how
SPEECH_DOMAIN=speech.codebase.how
CHORUS_DOMAIN=chorus.codebase.how
# 포트 (7000번대 대역)
DEVTOOLS_AI_CORE_PORT=7000
DEVTOOLS_HUB_PORT=7001
PLATFORM_DOCS_PORT=7002
DEVTOOLS_PGADMIN_PORT=7050
DEVTOOLS_REDIS_INSIGHT_PORT=7051
DEVTOOLS_MONITORING_GRAFANA_PORT=7060
DEVTOOLS_MONITORING_PROMETHEUS_PORT=7061
PLATFORM_DASHBOARD_URL은 PLATFORM_AI_CORE_ADMIN_URL로 대체되었습니다. 과도기에는 두 변수를 모두 설정해 두세요.
고객사 설치 예시 (infra.acme.com)
ROOT_DOMAIN만 바꾸면 동일 체계를 그대로 재현할 수 있습니다.
ROOT_DOMAIN=infra.acme.com
PLATFORM_BASE_DOMAIN=infra.acme.com
PLATFORM_DOCS_URL=https://docs.infra.acme.com
# Dev Tools 허브
PLATFORM_DEVTOOLS_URL=https://devtools.infra.acme.com
# Dev Tools 랜딩
PLATFORM_AI_CORE_URL=https://ai-core.infra.acme.com
PLATFORM_DB_URL=https://db.infra.acme.com
PLATFORM_REDIS_URL=https://redis.infra.acme.com
PLATFORM_MONITOR_URL=https://monitor.infra.acme.com
# Dev Tools 어드민
PLATFORM_AI_CORE_ADMIN_URL=https://ai-core.devtools.infra.acme.com
PLATFORM_DB_ADMIN_URL=https://db.devtools.infra.acme.com
PLATFORM_REDIS_ADMIN_URL=https://redis.devtools.infra.acme.com
PLATFORM_MONITOR_ADMIN_URL=https://monitor.devtools.infra.acme.com
# 플랫폼 AI 서비스
LLM_DOMAIN=llm.infra.acme.com
SPEECH_DOMAIN=speech.infra.acme.com
CHORUS_DOMAIN=chorus.infra.acme.com
이름 규칙
| 규칙 | 설명 |
|---|---|
| 폴더/식별자와 일치 | workspace/_devtools/{name} ↔ {name}.codebase.how |
| 짧고 기능 드러내기 | db, redis, monitor (3~8자 권장) |
| Generic 이름 회피 | dashboardadmin |
보안
| 대상 | 접근 제한 | 수단 |
|---|---|---|
1차 랜딩 (*.codebase.how) | 🌐 공개 | — (SEO/마케팅 목적) |
어드민 (*.devtools.codebase.how) | 🔒 제한 필수 | Cloudflare Access 또는 NPM Access List (Tailscale 100.64.0.0/10) |
AI API (llm/speech/chorus) | 🔐 API 키 | Bearer Token + Rate Limit |
.devtools. 서브도메인은 반드시 IP/네트워크 제한을 걸어야 합니다. 브루트포스/자동 스캐너에 노출되면 계정 탈취 위험이 높습니다.
Managed vs Self-Hosted
multi-saas-kit는 AI 서비스에 대해 두 가지 운영 모드를 제공합니다.
1. Managed Mode
Codebase 팀이 운영하는 엔드포인트를 그대로 사용:
llm.codebase.howspeech.codebase.howchorus.codebase.how
장점: 즉시 사용, 운영 부담 없음, 자동 업데이트
2. Self-Hosted Mode
고객사 도메인으로 직접 운영:
llm.${ROOT_DOMAIN}speech.${ROOT_DOMAIN}chorus.${ROOT_DOMAIN}
장점: 완전한 제어, 데이터 주권, 내부망 격리 가능
llm.${ROOT_DOMAIN} 인가?llm.api.${ROOT_DOMAIN}보다 짧고 직관적입니다. speech, chorus도 동일 원칙. 조직 정책에 따라 LLM_DOMAIN, SPEECH_DOMAIN, CHORUS_DOMAIN을 override 할 수 있습니다.
운영 규칙
docs,devtools, 4개 Dev Tool 서브도메인은 플랫폼 공용이므로 workspace 프로젝트별로 흩어놓지 않습니다llm,speech,chorus도 플랫폼 공용 AI 서비스로 운영 권장- workspace 하위 프로젝트 도메인(예:
quant.how,apis.how)은 각 프로젝트.env에서 별도 관리 - 플랫폼 공용 서비스 포트는 7000번대 전용 대역 사용
이관 가이드 (구 체계에서 전환)
구 체계를 운영 중이라면 다음 순서로 전환하세요:
- Cloudflare DNS:
ai-core,db,redis,monitorA 레코드 4개 추가 (IP = NPM 서버) - NPM Proxy Host: 4개 1차 랜딩 + 4개
.devtools.어드민 = 8개 생성 - (선택) 301 Redirect:
dashboard.codebase.how→ai-core.codebase.how(과도기) - Access List:
.devtools.*어드민 도메인에 Tailscale IP 제한 적용 .env업데이트: 위PLATFORM_*_URL변수 설정
관련 문서
- Dev Tools 개요 — Dev Tools 5종 생태계 인트로
- Devtools Hub — 허브 Nginx vhost 구조
- AI Core Dashboard — Claude 세션 시각화
- pgAdmin — PostgreSQL 통합 관리
- RedisInsight — Redis 관리
- Monitoring — Grafana LGTM
- API Access Key Core
- SSL/HTTPS 설정