Skip to content

Phase 1 Implementation Summary (v4.0)

기획서 prego-saas-control-platform-v4-implementation-plan.md §3 Phase 1 기준으로 생성된 코드·설정 요약.

생성된 산출물

기획서 항목경로비고
D1 마이그레이션 0001~0005migrations/0001_init.sql0005_usage_metering.sql순서대로 적용. 0006은 Phase 3.
GitHub Actions.github/workflows/pulumi-preview.yml, pulumi-up.yml, pulumi-destroy.ymlPR preview, main/workflow_dispatch up, workflow_dispatch destroy
Pulumi regionprego-pulumi/config/region.py, REGION_CONFIG, resolve_region()Pulumi.sg.yaml 추가. __main__.py에서 location=REGION_CONFIG[stack] 사용
Control Planeworkers/control-plane/Stripe Webhook 검증, D1 멱등(provider_events), tenants_master/provision_jobs, workflow_dispatch 트리거
Ansibleprego-ansible 레포: playbook.yml, roles/docker, roles/mariadb_server, roles/frappe_bench, roles/frappe_site, inventory/, requirements.ymlDB 서버: Docker+MariaDB. App 서버: Docker+Frappe bench(컨테이너)+bench new-site·API Key. Ref: ansible-implementation-plan.md, ansible-implementation-sequence.md.
Zuplo Syncinfra/zuplo_sync.tsZuplo Developer API로 tenant API Key 등록
Secrets 문서docs/runbook/github-secrets.mdP1-6 참조

배포·설정 순서

  1. D1: wrangler d1 create prego-controlworkers/control-plane/wrangler.tomldatabase_id 설정 → migrations 0001~0005 실행.
  2. Control Plane Worker: Secrets STRIPE_WEBHOOK_SECRET, GITHUB_PAT, (선택) GITHUB_REPO, GITHUB_WORKFLOW_ID 설정 후 배포.
  3. GitHub: Environments production-sg, production-destroy 생성 및 Required Reviewers 설정. Secrets 등록 (§3.6 P1-6).
  4. Stripe: Webhook 엔드포인트 https://<control-plane-worker>.<zone>/webhooks/stripe 등록.
  5. Pulumi: prego-pulumi에서 pulumi stack select sg (또는 --create) 후 pulumi up.
  6. Ansible: 인벤토리 설정 후 프로비저닝된 서버에 playbook 실행.
  7. Zuplo: Ansible에서 나온 API Key를 infra/zuplo_sync.ts로 등록 (또는 동등 절차).

미구현·수동 보완

  • Queue (CF Queue): 결정 ①에 따라 Control Plane은 GitHub Actions workflow_dispatch를 직접 호출하도록 구현됨. 별도 Queue Consumer가 필요하면 추가 구현.
  • Ansible Frappe: 이미지·bench 경로는 roles/frappe_bench/defaults/main.yml, roles/frappe_site/defaults/main.yml에서 조정. 프로비저닝 워크플로는 .github/workflows/provision-tenant.yml (Pulumi → Ansible → Zuplo → 콜백).
  • Zuplo API 요청 본문: Zuplo Developer API 스펙에 맞게 infra/zuplo_sync.ts의 body 형식 확인·수정 가능.

이 문서는 기획서 §3.5 완료 기준 체크 전까지의 Phase 1 구현 스냅샷입니다.


Phase 2·3 추가 (이어서 구현된 항목)

  • migrations/0006_multiregion.sql — nodes, node_metrics_rollups, scaling_events, placement_history, tenants_master preferred_region/failover_region (§5 P3-8, §6).
  • R2 usage bucketprego-pulumiprego-usage-raw 버킷 추가 (Phase 2 P2-2).
  • workers/usage-writer — POST /usage → R2 usage_raw (P2-3).
  • workers/usage-aggregator — Cron R2 → D1 usage_rollups (P2-4).
  • workers/cycle-close — Cron 월말, usage_cycle_totals·overage·Stripe (P2-5).
  • docs/planning/phase2-usage-r2-kv.md — R2 경로·KV 키 구조·파이프라인 요약.
  • Phase 3: Control Plane에 trace_events·audit_logs 기록; workers/purge-job (Cron 30일 Pending_Deletion → Hard Purge §5.8); docs/planning/phase3-governance-summary.md.
  • Phase 4: Pulumi.us.yaml; GitHub Actions 리전별 HCLOUD_TOKEN_SG / HCLOUD_TOKEN_US, pulumi-preview matrix [sg, us]; workers/autoscaler (Health Score, scaling_events, Scale Out/In); docs/planning/phase4-us-autoscaler-summary.md.
  • Phase 5: Pulumi.eu.yaml; pulumi-preview matrix [sg, us, eu], 리전별 HCLOUD_TOKEN_SG / HCLOUD_TOKEN_US / HCLOUD_TOKEN_EU; docs/planning/phase5-eu-gdpr-summary.md (EU·GDPR·대시보드·d1-prego-eu 보완 가이드).
Help