Deployment Compatibility Matrix
Deployment Compatibility Matrix
Section titled “Deployment Compatibility Matrix”OpenCodeHub supports multiple deployment configurations. This document maps features to deployment modes.
Supported Deployment Modes
Section titled “Supported Deployment Modes”| Mode | Description | Recommended For | Status |
|---|---|---|---|
| Single-Node (Docker) | Docker Compose on one VM | Small teams (<50 users), self-hosted | ✅ Production-ready |
| Single-Node (Bare Metal) | Direct Node.js on one server | Air-gapped, minimal cloud | ✅ Production-ready |
| Multi-Node (K8s) | Helm chart on Kubernetes | Teams of any size, HA | ✅ Production-ready |
Feature Compatibility by Mode
Section titled “Feature Compatibility by Mode”| Feature | Single-Node (Docker) | Multi-Node (K8s) | Air-Gapped |
|---|---|---|---|
| Git over SSH | ✅ | ✅ | ✅ |
| Git over HTTPS | ✅ | ✅ | ✅ |
| CI/CD Runners | ✅ | ✅ | ✅ |
| Merge Queues | ✅ | ✅ | ✅ |
| Real-time (SSE) | ✅ | ✅ | ✅ |
| Rate Limiting (Redis) | ✅ | ✅ | ⚠️ |
| AI Code Review | ✅ | ✅ | ⚠️ |
| Object Storage (S3) | ✅ | ✅ | ✅ |
| Email Notifications | ✅ | ✅ | ✅ |
| Slack Notifications | ✅ | ✅ | ✅ |
| Prometheus Metrics | ✅ | ✅ | ✅ |
| OTLP Logging | ✅ | ✅ | ⚠️ |
| Webhook Events | ✅ | ✅ | ✅ |
| LFS (Large Files) | ✅ | ✅ | ✅ |
| Database: PostgreSQL | ✅ | ✅ | ✅ |
| Database: MySQL | ✅ | ✅ | ✅ |
| Database: SQLite | ✅ | ❌ | ✅ |
| Database: Turso/LibSQL | ✅ | ✅ | ✅ |
| Backup & Restore | ✅ | ✅ | ✅ |
| Horizontal Scaling | ❌ | ✅ | ✅ |
Legend: ✅ Supported, ⚠️ Partial/Config needed, ❌ Not supported
Database Driver Support
Section titled “Database Driver Support”| Driver | Docker | Kubernetes | Bare Metal | Notes |
|---|---|---|---|---|
| PostgreSQL | ✅ | ✅ | ✅ | Recommended for production |
| MySQL / MariaDB | ✅ | ✅ | ✅ | Supported |
| SQLite | ✅ | ❌ | ✅ | Single-node only |
| Turso / LibSQL | ✅ | ✅ | ✅ | Edge-friendly |
| PlanetScale | ⚠️ | ⚠️ | ⚠️ | Serverless branching not supported |
| Supabase | ⚠️ | ⚠️ | ⚠️ | Use PostgreSQL driver |
| Neon | ⚠️ | ⚠️ | ⚠️ | Branching/PCS not supported |
Object Storage Support
Section titled “Object Storage Support”| Adapter | Docker | Kubernetes | Air-Gapped |
|---|---|---|---|
| Local disk | ✅ | ✅ | ✅ |
| S3-compatible | ✅ | ✅ | ✅ |
| Backblaze B2 | ✅ | ✅ | ⚠️ |
Network & Security
Section titled “Network & Security”| Requirement | Single-Node | Multi-Node | Notes |
|---|---|---|---|
| TLS/SSL termination | ✅ | ✅ | Proxy handles it |
| Internal TLS | ❌ | ⚠️ | Planned |
| mTLS for runners | ❌ | ⚠️ | Planned |
| Network policies (K8s) | N/A | ✅ | Helm optional template |
| Secret encryption at rest | ✅ | ✅ | AES-256-GCM |
| Audit log encryption | ✅ | ✅ | AES-256-GCM |
Horizontal Scaling Notes
Section titled “Horizontal Scaling Notes”What works in multi-instance mode
Section titled “What works in multi-instance mode”- Web/API requests (stateless, Redis-backed sessions)
- Merge queue (distributed locks via Redis)
- Rate limiting (Redis-based)
- CI job queue (BullMQ + Redis)
- Cache (Redis)
- Webhooks (stateless)
- Git operations (NFS/shared storage required)
What requires shared storage
Section titled “What requires shared storage”- Repository git data (must be on shared FS or S3)
- LFS objects (must be on shared FS or S3)
- CI artifacts (must be on shared FS or S3)
- Database (must be a networked DB, not SQLite)
What needs sticky sessions
Section titled “What needs sticky sessions”- None — fully stateless
Environment Variables by Mode
Section titled “Environment Variables by Mode”All Modes (Required)
Section titled “All Modes (Required)”DATABASE_URL=postgresql://user:pass@host:5432/dbJWT_SECRET=<32+ byte random>WORKFLOW_SECRET_ENCRYPTION_KEY=<32+ hex chars>SITE_URL=https://your-domain.comRedis (Required for Multi-Node)
Section titled “Redis (Required for Multi-Node)”REDIS_URL=redis://host:6379Object Storage (Required for S3)
Section titled “Object Storage (Required for S3)”STORAGE_TYPE=s3STORAGE_ACCESS_KEY_ID=...STORAGE_SECRET_ACCESS_KEY=...STORAGE_REGION=us-east-1STORAGE_BUCKET=opencodehub-storageEmail (Optional)
Section titled “Email (Optional)”SMTP_HOST=smtp.example.comSMTP_PORT=587SMTP_USER=...SMTP_PASS=...EMAIL_FROM=noreply@your-domain.comAI Providers (Optional)
Section titled “AI Providers (Optional)”AI_PROVIDER=openaiOPENAI_API_KEY=sk-...# or for local:AI_PROVIDER=localLOCAL_BASE_URL=http://localhost:11434LOCAL_API_KEY=ollama-keyQuick Start by Mode
Section titled “Quick Start by Mode”Docker (Single-Node)
Section titled “Docker (Single-Node)”git clone https://github.com/swadhinbiswas/OpencodeHub.gitcd OpenCodeHubcp .env.example .env# Edit .env with your valuesdocker compose -f docker-compose.production.yml up -dKubernetes (Multi-Node)
Section titled “Kubernetes (Multi-Node)”helm repo add opencodehub https://charts.opencodehub.devhelm repo updatehelm install opencodehub opencodehub/opencodehub \ --values values.yaml \ --namespace opencodehub \ --create-namespaceAir-Gapped
Section titled “Air-Gapped”# Build image locally from Dockerfiledocker build -t opencodehub:local .# Use local storage adapterSTORAGE_ADAPTER=local# Use SQLiteDATABASE_URL=file:/data/opencodehub.dbDATABASE_DRIVER=sqlite