Phase 1 Implementation Summary (v4.0)
기획서 prego-saas-control-platform-v4-implementation-plan.md §3 Phase 1 기준으로 생성된 코드·설정 요약.
생성된 산출물
| 기획서 항목 | 경로 | 비고 |
|---|---|---|
| D1 마이그레이션 0001~0005 | migrations/0001_init.sql … 0005_usage_metering.sql | 순서대로 적용. 0006은 Phase 3. |
| GitHub Actions | .github/workflows/pulumi-preview.yml, pulumi-up.yml, pulumi-destroy.yml | PR preview, main/workflow_dispatch up, workflow_dispatch destroy |
| Pulumi region | prego-pulumi/config/region.py, REGION_CONFIG, resolve_region() | Pulumi.sg.yaml 추가. __main__.py에서 location=REGION_CONFIG[stack] 사용 |
| Control Plane | workers/control-plane/ | Stripe Webhook 검증, D1 멱등(provider_events), tenants_master/provision_jobs, workflow_dispatch 트리거 |
| Ansible | prego-ansible 레포: playbook.yml, roles/docker, roles/mariadb_server, roles/frappe_bench, roles/frappe_site, inventory/, requirements.yml | DB 서버: Docker+MariaDB. App 서버: Docker+Frappe bench(컨테이너)+bench new-site·API Key. Ref: ansible-implementation-plan.md, ansible-implementation-sequence.md. |
| Zuplo Sync | infra/zuplo_sync.ts | Zuplo Developer API로 tenant API Key 등록 |
| Secrets 문서 | docs/runbook/github-secrets.md | P1-6 참조 |
배포·설정 순서
- D1:
wrangler d1 create prego-control→workers/control-plane/wrangler.toml에database_id설정 → migrations 0001~0005 실행. - Control Plane Worker: Secrets
STRIPE_WEBHOOK_SECRET,GITHUB_PAT, (선택)GITHUB_REPO,GITHUB_WORKFLOW_ID설정 후 배포. - GitHub: Environments
production-sg,production-destroy생성 및 Required Reviewers 설정. Secrets 등록 (§3.6 P1-6). - Stripe: Webhook 엔드포인트
https://<control-plane-worker>.<zone>/webhooks/stripe등록. - Pulumi:
prego-pulumi에서pulumi stack select sg(또는--create) 후pulumi up. - Ansible: 인벤토리 설정 후 프로비저닝된 서버에 playbook 실행.
- 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 bucket —
prego-pulumi에prego-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 보완 가이드).