Overview
Chronoverse supports two deployment modes:- Development - All ports exposed for easy debugging and testing
- Production - Minimal port exposure with enhanced security
Prerequisites
Docker
Docker Engine 20.10+Download Docker
Docker Compose
Docker Compose v2.0+Install Compose
System Requirements
Development Environment
Development Environment
Minimum:
- CPU: 2 cores
- RAM: 4 GB
- Disk: 10 GB free space
- CPU: 4 cores
- RAM: 8 GB
- Disk: 20 GB free space
Production Environment
Production Environment
Minimum:
- CPU: 4 cores
- RAM: 8 GB
- Disk: 50 GB free space
- CPU: 8+ cores
- RAM: 16+ GB
- Disk: 100+ GB free space with SSD
Production includes resource limits and replica scaling for workers. Adjust
compose.prod.yaml based on your workload.Installation Steps
Choose Your Environment
Select the appropriate compose file for your use case:Features:
- Development
- Production
- All service ports exposed
- Database ports accessible (PostgreSQL:5432, ClickHouse:9440, Redis:6379)
- gRPC services directly accessible (ports 50051-50055)
- Dashboard on port 3001
- Suitable for local development and testing
Wait for Services to Initialize
Monitor the startup process:
First startup includes:
- TLS certificate generation (ED25519 keys + service certificates)
- Database schema migrations (PostgreSQL + ClickHouse)
- Search index creation (Meilisearch)
- Kafka topic initialization
Architecture Components
Chronoverse deploys the following services:Infrastructure Services
PostgreSQL (Primary Database)
PostgreSQL (Primary Database)
Image: Volumes:
postgres:18.0-alpine3.22Configuration:postgres:/var/lib/postgresql- Data persistence./certs:/certs:ro- TLS certificates./certs/postgres/config:/etc/postgresql- PostgreSQL config
- TLS 1.2/1.3 with client certificate verification (mTLS)
- SCRAM-SHA-256 password encryption
- Custom
postgresql.confandpg_hba.conf
ClickHouse (Analytics Database)
ClickHouse (Analytics Database)
Image: Use Case:
clickhouse:25.8.7.3Configuration:- Job execution logs (high-volume inserts)
- Analytics aggregations
- Time-series data
Redis (Cache & Pub/Sub)
Redis (Cache & Pub/Sub)
Image: Use Case:
redis:8.2.1-alpineConfiguration:- Session caching
- Real-time pub/sub for notifications
- Job state caching
Apache Kafka (Message Broker)
Apache Kafka (Message Broker)
Image: Topics:
confluentinc/cp-kafka:7.6.7Configuration:- Job scheduling events
- Workflow build requests
- Job execution logs
- Analytics events
Meilisearch (Search Engine)
Meilisearch (Search Engine)
Image: Use Case:
getmeili/meilisearch:v1.15.0Configuration:- Full-text search for job logs
- Workflow search and filtering
Grafana LGTM (Observability)
Grafana LGTM (Observability)
Image:
grafana/otel-lgtm:0.11.10Components:- Loki (logs)
- Grafana (dashboards)
- Tempo (traces)
- Mimir (metrics)
Application Services
Server (API Gateway)
Server (API Gateway)
Port: 8080 (dev), internal (prod)Environment:Features:
- REST API endpoints
- JWT authentication middleware
- CSRF protection
- Request/response logging
- OpenTelemetry instrumentation
Users Service (gRPC)
Users Service (gRPC)
Port: 50051Responsibilities:
- User registration and authentication
- JWT token generation and validation
- User preferences and notification settings
Workflows Service (gRPC)
Workflows Service (gRPC)
Port: 50052Responsibilities:
- Workflow CRUD operations
- Workflow configuration validation
- Build status management
- Schedule configuration
Jobs Service (gRPC)
Jobs Service (gRPC)
Port: 50053Responsibilities:
- Job lifecycle management
- Job log retrieval from ClickHouse
- Job search via Meilisearch
- SSE event streaming
Notifications Service (gRPC)
Notifications Service (gRPC)
Port: 50054Responsibilities:
- Real-time notification delivery
- Notification preferences
- Dashboard alerts
Analytics Service (gRPC)
Analytics Service (gRPC)
Port: 50055Responsibilities:
- Workflow statistics
- Job execution metrics
- Performance insights
- Trend analysis
Worker Components
Scheduling Worker
Scheduling Worker
Replicas: 2 (production)Resources (Production):Functionality:
- Polls database for due jobs
- Publishes job execution events to Kafka
- Handles scheduling intervals
Workflow Worker
Workflow Worker
Replicas: 2 (production)Resources (Production):Functionality:
- Consumes workflow build events from Kafka
- Builds Docker image configurations
- Validates container specifications
- Updates workflow build status
docker-proxyExecution Worker
Execution Worker
Replicas: 2 (production)Resources (Production):Functionality:
- Consumes job execution events from Kafka
- Executes jobs in isolated Docker containers
- Streams logs to Redis and Kafka
- Updates job status
- Handles timeouts and failures
JobLogs Processor
JobLogs Processor
Replicas: 2 (production)Functionality:
- Consumes log events from Kafka
- Batch inserts to ClickHouse (optimized)
- Indexes logs in Meilisearch for search
Analytics Processor
Analytics Processor
Replicas: 2 (production)Functionality:
- Consumes job and workflow events from Kafka
- Generates analytics aggregations
- Stores results in PostgreSQL
- Updates real-time metrics
Security & TLS Configuration
Chronoverse uses comprehensive TLS encryption:Automatic Certificate Generation
Theinit-certs service automatically generates:
Service Certificates
Individual certificates for each service:
- postgres, redis, clickhouse, kafka, meilisearch
- users-service, workflows-service, jobs-service
- notifications-service, analytics-service
TLS Configuration
All services use TLS 1.2/1.3:Production Deployment
Port Configuration
Development:- All service ports exposed
- Dashboard: 3001
- API: 8080
- Databases accessible externally
- Only port 80 (Nginx) and 3000 (Grafana) exposed
- All internal services on private Docker network
- Dashboard and API proxied through Nginx
Nginx Reverse Proxy
Production includes Nginx for:- Dashboard serving on port 80
- API proxying at
/api/* - SSE support for real-time logs
- Proper timeout configuration
Resource Limits
Production compose includes resource constraints:- Databases
- Services
- Low Resource Workers
- High Resource Workers
Adjust these limits based on your workload. Monitor resource usage via Grafana dashboards.
Configuration
Custom Configuration
Create a.env file to override defaults:
.env
Scaling Workers
Scale individual workers:compose.prod.yaml:
Maintenance
Backup
- PostgreSQL
- ClickHouse
- Volumes
Restore
Logs
View service logs:Updates
Update to latest version:Monitoring
Access observability dashboards:- Grafana: http://localhost:3000
- Traces: Tempo (via Grafana)
- Logs: Loki (via Grafana)
- Metrics: Mimir (via Grafana)
Health Checks
All services include health checks:Troubleshooting
Certificate errors
Certificate errors
Remove and regenerate certificates:
Database migration failed
Database migration failed
Check migration logs:Manually run migrations:
Worker not processing jobs
Worker not processing jobs
Verify Kafka connectivity:Check worker logs:
High resource usage
High resource usage
Monitor resource consumption:Adjust resource limits in compose file or scale down replicas.
Port conflicts
Port conflicts
Check if ports are already in use:Modify port mappings in compose file.
Next Steps
Configuration
Learn about advanced configuration options
API Reference
Explore the REST API
Architecture
Deep dive into system architecture
Security
Security best practices and hardening