70 lines
2.4 KiB
Markdown
70 lines
2.4 KiB
Markdown
|
|
# dd0c/run — Dual-Mode Deployment Addendum
|
||
|
|
|
||
|
|
**Template:** Based on dd0c/route dual-mode pattern
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Cloud → Self-Hosted Service Mapping
|
||
|
|
|
||
|
|
| Cloud Service | Self-Hosted Replacement | Notes |
|
||
|
|
|--------------|----------------------|-------|
|
||
|
|
| RDS PostgreSQL | PostgreSQL container | Same schema, same RLS, same audit trail |
|
||
|
|
| Cognito | Local JWT (HS256) | AuthProvider pattern |
|
||
|
|
| S3 (compliance exports) | Local FS or MinIO | ObjectStore trait |
|
||
|
|
| SES | SMTP relay | Notifications |
|
||
|
|
| CloudWatch | Prometheus + Grafana | Bundled |
|
||
|
|
| KMS (audit encryption) | Local AES-256-GCM | Key file mounted as volume |
|
||
|
|
|
||
|
|
## Self-Hosted Compose Services
|
||
|
|
|
||
|
|
```yaml
|
||
|
|
services:
|
||
|
|
engine: # Parser + Classifier + Execution Engine (Rust)
|
||
|
|
image: ghcr.io/dd0c/run-engine:latest
|
||
|
|
api: # Dashboard API
|
||
|
|
image: ghcr.io/dd0c/run-api:latest
|
||
|
|
dashboard: # React SPA (parse preview, execution timeline)
|
||
|
|
image: ghcr.io/dd0c/run-dashboard:latest
|
||
|
|
postgres: # Config + audit trail (RLS, hash chain)
|
||
|
|
image: postgres:16-alpine
|
||
|
|
redis: # Panic mode, execution locks
|
||
|
|
image: redis:7-alpine
|
||
|
|
caddy:
|
||
|
|
image: caddy:2-alpine
|
||
|
|
```
|
||
|
|
|
||
|
|
## Key Advantage: dd0c/run is Already Self-Host Friendly
|
||
|
|
|
||
|
|
dd0c/run has the simplest self-hosted story of all 6 products:
|
||
|
|
- The Go agent already runs in customer VPCs
|
||
|
|
- The SaaS is already PostgreSQL-native (no DynamoDB)
|
||
|
|
- gRPC between agent and SaaS works the same locally
|
||
|
|
- No EventBridge/SQS/Step Functions dependencies
|
||
|
|
|
||
|
|
The main change is auth and the install script.
|
||
|
|
|
||
|
|
## Agent Connection
|
||
|
|
|
||
|
|
- Cloud: `grpcs://engine.run.dd0c.dev`
|
||
|
|
- Self-hosted: `grpc://localhost:50051` (or Caddy TLS)
|
||
|
|
|
||
|
|
Agent binary is the same — just different `--server` flag.
|
||
|
|
|
||
|
|
## Epic Impact
|
||
|
|
|
||
|
|
| Epic | Change | Effort |
|
||
|
|
|------|--------|--------|
|
||
|
|
| 1 (Parser) | No change — pure Rust | 0 |
|
||
|
|
| 2 (Classifier) | No change — pure Rust | 0 |
|
||
|
|
| 3 (Execution Engine) | No change — pure Rust | 0 |
|
||
|
|
| 4 (Agent) | Configurable gRPC endpoint | 1 pt |
|
||
|
|
| 5 (Audit Trail) | KMS → local AES-256-GCM | 2 pts |
|
||
|
|
| 6 (Dashboard API) | LocalAuthProvider | 2 pts |
|
||
|
|
| 7 (Dashboard UI) | Local login form | 2 pts |
|
||
|
|
| 8 (Infrastructure) | docker-compose.yml + install.sh | 5 pts |
|
||
|
|
| 9 (Onboarding) | Local signup, remove Stripe req | 3 pts |
|
||
|
|
| 10 (TF Tenets) | No change | 0 |
|
||
|
|
| **Total** | | **15 pts** |
|
||
|
|
|
||
|
|
*dd0c/run is the easiest product to self-host. Recommend it as the second self-hosted release after dd0c/route.*
|