Ctrlplane Cloud (Recommended)
The easiest way to get started is with Ctrlplane Cloud:- Go to app.ctrlplane.dev
- Sign up for a free account
- Create a workspace
- Start deploying!
- No infrastructure to manage
- Automatic updates
- Built-in high availability
- Free tier available
Self-Hosted Options
If you prefer to self-host Ctrlplane, you have several options:Docker Compose (Development & Testing)
Best for: Local development, testing, small teams Prerequisites:- Docker Engine 20.10+
- Docker Compose v2.0+
- 2GB RAM minimum
- Clone the repository:
- Copy environment files:
- Start services:
- Run database migrations:
- Access Ctrlplane:
- Web UI: http://localhost:3000
- API: http://localhost:4000
- Web UI (port 3000)
- API Server (port 4000)
- Workspace Engine (port 50051)
- PostgreSQL (port 5432)
- Redis (optional, for job queue)
.env:
Kubernetes (Production)
Best for: Production deployments, high availability Prerequisites:- Kubernetes cluster 1.24+
- kubectl configured
- Helm 3.8+
- PostgreSQL database (managed or in-cluster)
- Add the Ctrlplane Helm repository:
- Create a namespace:
- Create a values file
values.yaml:
- Create secrets:
- Install the chart:
- Run database migrations:
- Verify installation:
Manual Installation
For custom deployments, you can run each component separately. Components:-
PostgreSQL Database (required)
- Version: 14+
- Extensions: uuid-ossp, pgcrypto
-
API Server
-
Workspace Engine
-
Web UI
-
Run Migrations
Configuration
Environment Variables
API Server
Workspace Engine
Web UI
Database Setup
Create Database:Authentication Setup
GitHub OAuth
-
Create a GitHub OAuth App:
- Go to GitHub Settings → Developer settings → OAuth Apps
- New OAuth App
- Homepage URL:
https://ctrlplane.example.com - Callback URL:
https://ctrlplane.example.com/api/auth/callback/github
-
Configure environment variables:
API Keys
API keys are used for programmatic access (CI/CD integration). Generate salt for API keys:Resource Requirements
Minimum (Development/Testing)
- CPU: 2 cores
- RAM: 4GB
- Disk: 20GB
- Database: Shared PostgreSQL
Recommended (Small Production)
- CPU: 4-8 cores
- RAM: 8-16GB
- Disk: 50GB SSD
- Database: Managed PostgreSQL (2 vCPU, 8GB RAM)
Scaling (Large Production)
- API Server: 2-4 replicas (2 vCPU, 2GB RAM each)
- Workspace Engine: 2-4 replicas (2 vCPU, 4GB RAM each)
- Web UI: 2+ replicas (1 vCPU, 1GB RAM each)
- Database: Managed PostgreSQL (4+ vCPU, 16+ GB RAM)
- Redis: Managed Redis (optional, for job queue)
High Availability
For production deployments:- Multiple Replicas: Run 2+ replicas of each service
- Managed Database: Use managed PostgreSQL with automated backups
- Load Balancing: Use Kubernetes service or external load balancer
- Health Checks: Configure liveness and readiness probes
- Monitoring: Set up observability with metrics and logs
- Backups: Regular database backups
Upgrades
Before Upgrading
-
Backup Database: Always backup before upgrading
- Check Release Notes: Review breaking changes
- Test in Staging: Test upgrade in non-production environment
Upgrade Process
Docker Compose:Rollback
Docker Compose:Troubleshooting
Cannot connect to database
- Verify DATABASE_URL is correct
- Check database is running and accessible
- Verify credentials and database exists
Migrations fail
- Ensure database user has proper permissions
- Check for schema conflicts
- Review migration logs
Services won’t start
- Check logs:
docker compose logsorkubectl logs - Verify all environment variables are set
- Ensure ports are not already in use
Authentication not working
- Verify AUTH_SECRET is set and consistent across services
- Check OAuth configuration if using GitHub
- Review callback URLs match your domain
Next Steps
- Quickstart Guide - Set up your first deployment
- Core Concepts - Understand Ctrlplane fundamentals
- Operations - Set up monitoring and observability