본문으로 건너뛰기

플랫폼 공용 도메인

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 Coreai-core.codebase.howai-core.devtools.codebase.how7000
pgAdmindb.codebase.howdb.devtools.codebase.how7050
RedisInsightredis.codebase.howredis.devtools.codebase.how7051
Monitoringmonitor.codebase.howmonitor.devtools.codebase.how7060
Hubdevtools.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_URLPLATFORM_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 이름 회피dashboard, admin — "무엇의" 인지 불명확

보안

대상접근 제한수단
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.how
  • speech.codebase.how
  • chorus.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번대 전용 대역 사용

이관 가이드 (구 체계에서 전환)

구 체계를 운영 중이라면 다음 순서로 전환하세요:

  1. Cloudflare DNS: ai-core, db, redis, monitor A 레코드 4개 추가 (IP = NPM 서버)
  2. NPM Proxy Host: 4개 1차 랜딩 + 4개 .devtools. 어드민 = 8개 생성
  3. (선택) 301 Redirect: dashboard.codebase.howai-core.codebase.how (과도기)
  4. Access List: .devtools.* 어드민 도메인에 Tailscale IP 제한 적용
  5. .env 업데이트: 위 PLATFORM_*_URL 변수 설정

관련 문서