Skip to content

Prego 프로젝트 네이밍 규칙

목적: 서버·DB·테넌트·리소스·로그 등 프로젝트 전반에서 일관된 이름을 쓰기 위한 규칙 정리.
Ref: pulumi-ansible-step1-step2-plan.md, tenant-subdomain-dns-design.md, provision-tenant-workflow-design.md.


1. 공통 규칙

규칙설명
프로젝트 접두사인프라·리소스 이름은 prego 로 통일 (소문자).
구분자단어 구분은 하이픈(-). 서브도메인·호스트명·DNS는 소문자·하이픈만.
숫자 패딩노드·DB 등 순서 번호는 2자리: 01, 02, … (예: node-01, db-01).
ID 형식비즈니스 식별자(tenant_id, job_id)는 UUID 또는 UUID 앞 8자(short_id) 사용.

2. 인프라 (Pulumi / Hetzner / Cloudflare)

2.1 서버 (Hetzner)

용도패턴예시
App 서버prego-node-{NN}prego-node-01, prego-node-02
DB 서버prego-db-{NN}prego-db-01
라벨 node-id (App)01, 02, …서버 순번
라벨 node-id (DB)db01, db02, …DB 순번
라벨 projectprego고정
라벨 roleapp | db서버 역할

2.2 방화벽

용도이름비고
App 서버용prego-secure-fwSSH(22) 등
DB 서버용prego-db-fwSSH(22), 3306(App IP만)

2.3 DNS (Cloudflare, base domain: pregoi.com)

용도패턴예시
관리용 노드 FQDNnode-{NN}.pregoi.comnode-01.pregoi.com, node-02.pregoi.com
테넌트 canonical (내부)tenant-{short_id}.pregoi.comtenant-a1b2c3d4.pregoi.com (short_id = tenant_id UUID 앞 8자)
사용자 서브도메인{subdomain_slug}.pregoi.comacme.pregoi.com (CNAME → canonical)

2.4 스토리지·기타 리소스

리소스패턴예시
R2 버킷prego-{용도}prego-static-assets, prego-usage-raw
Placement groupprego-spreadSpread 배치용
Volume (Hetzner)prego-{role}-dataprego-app-data, prego-db-data
SSH 키 (Hetzner 등록명)prego-adminPulumi·Ansible 공통

2.5 Pulumi 스택·Config

항목
스택 이름sg, us, eu (리전) 또는 dev
Config 네임스페이스prego-pulumi (testMode, serverType, enableBackups 등)

3. 테넌트·사이트 (Frappe / Control Plane)

식별자형식용도
tenant_idUUIDD1, 워크플로, API에서 테넌트 식별. 로그·트레이스에 사용.
short_idtenant_id 앞 8자canonical hostname·site_name 생성용.
canonical_hostname (= site_name)tenant-{short_id}.pregoi.comFrappe site명, DNS A/CNAME, 라우팅·로그의 고정 식별자.
subdomain_slug사용자 입력 (소문자·하이픈·영숫자)acme, company-sgacme.pregoi.com (CNAME).
job_idUUID프로비저닝 작업 1건 식별. provision_jobs, 워크플로, 콜백.
node_idnode-{NN}D1 nodes 테이블·배치 결과. 기존 노드 재사용 시 해당 노드 ID.

4. Ansible

4.1 인벤토리 호스트·그룹

구분패턴예시
그룹 (App)prego_nodesFrappe·bench 대상
그룹 (DB)prego_db_serversMariaDB 설치 대상
호스트 (App)node_{NN}node_01
호스트 (DB)db_{NN}db_01

4.2 변수·역할

변수/역할규칙
ansible_hostIP 또는 FQDN (관리용은 node-NN.pregoi.com 가능).
컨테이너 이름 (Frappe bench)prego-frappe-bench (기본값).
API Key 이름 (Frappe)prego-gateway (동일 테넌트 내 구분용).
Artifact 파일artifacts/tenant_api_key.txt (경로 통일).

5. Docker·컨테이너

리소스이름비고
Frappe bench 컨테이너prego-frappe-benchdocker exec 대상.
MariaDB 컨테이너mariadb_server role 기본값 유지예: prego-mariadb 등 role에서 정의.

6. 이미지·스냅샷 (Hetzner)

용도패턴예시
App 서버 Golden 이미지prego-app-{YYYYMMDD} 또는 prego-frappe-bench-{v}prego-app-20260221, prego-frappe-bench-v15
DB 서버 이미지prego-db-{YYYYMMDD}선택.

7. 로그·트레이스·메트릭에서의 일관성

로그·에러 메시지·트레이스에 어디서 무엇이 일어났는지 드러나도록 아래 필드를 권장.

필드형식예시
프로젝트고정 또는 prefixprego
리전sg | us | eusg
node_idnode-{NN} | db{NN}node-01, db01
tenant_idUUID 또는 short_ida1b2c3d4-... 또는 a1b2c3d4
job_idUUID (프로비저닝 시)provision_jobs.job_id
site_namecanonical_hostnametenant-a1b2c3d4.pregoi.com

로그 포맷 예시 (구조화 로그)
[prego][region=sg][node_id=node-01][tenant_id=a1b2c3d4] message
또는 JSON:
{"project":"prego","region":"sg","node_id":"node-01","tenant_id":"a1b2c3d4","event":"..."}

에러·트레이스

  • provision_jobs 실패: job_id, tenant_id, stage(어느 단계에서 실패) 포함.
  • API 요청: tenant_id 또는 site_name(canonical) 포함 시 라우팅·과금 추적 용이.

8. 요약 표 (Quick reference)

영역패턴예시
서버 (App)prego-node-{NN}prego-node-01
서버 (DB)prego-db-{NN}prego-db-01
관리 DNSnode-{NN}.pregoi.comnode-01.pregoi.com
테넌트 canonicaltenant-{short_id}.pregoi.comtenant-a1b2c3d4.pregoi.com
사용자 URL{subdomain_slug}.pregoi.comacme.pregoi.com
R2 버킷prego-{용도}prego-static-assets
Ansible 그룹prego_nodes, prego_db_servers
Ansible 호스트node_01, db_01
Docker (bench)prego-frappe-bench
SSH 키 이름prego-admin
API Key 이름prego-gatewayFrappe 내부용
node_id (D1/워크플로)node-{NN}node-01
tenant_idUUID
job_idUUID

이 규칙을 기준으로 신규 리소스·변수·로그 필드를 정하면, 프로젝트 전반에서 이름이 일관되게 유지된다.

Help