Skip to Content

Docker Deployment

TL;DR

Deploy CMDOP Control Plane with Docker using docker-compose. The stack includes the CMDOP server, PostgreSQL 15, and Redis 7. Configure environment variables in a .env file, optionally add Traefik for automatic TLS, and use health checks and resource limits for production readiness.

Run CMDOP Control Plane using Docker containers.

How do I get started with Docker?

# Clone the CMDOP repository containing docker-compose.yaml git clone https://github.com/cmdop/cmdop cd cmdop # Start all services (CMDOP server, PostgreSQL, Redis) in detached mode docker-compose up -d

What does the docker-compose.yaml look like?

version: '3.8' services: cmdop: image: cmdop/server:latest ports: - "443:443" - "50051:50051" - "50052:50052" environment: - DB_HOST=postgres - DB_PORT=5432 - DB_NAME=cmdop - DB_USER=cmdop - DB_PASSWORD=${DB_PASSWORD} - REDIS_HOST=redis - REDIS_PORT=6379 - JWT_SECRET=${JWT_SECRET} - DOMAIN=${DOMAIN} volumes: - ./config.yaml:/app/config.yaml - ./certs:/app/certs depends_on: - postgres - redis restart: unless-stopped postgres: image: postgres:15 environment: - POSTGRES_DB=cmdop - POSTGRES_USER=cmdop - POSTGRES_PASSWORD=${DB_PASSWORD} volumes: - postgres_data:/var/lib/postgresql/data restart: unless-stopped redis: image: redis:7 command: redis-server --requirepass ${REDIS_PASSWORD} volumes: - redis_data:/data restart: unless-stopped volumes: postgres_data: redis_data:

What environment variables are needed?

Create .env file:

# Database DB_PASSWORD=your-secure-password # Redis REDIS_PASSWORD=your-redis-password # Auth JWT_SECRET=your-jwt-secret # Domain DOMAIN=cmdop.yourcompany.com

How do I configure the server?

What goes in config.yaml?

server: http_port: 443 grpc_port: 50051 tls: enabled: true cert_file: /app/certs/cert.pem key_file: /app/certs/key.pem database: host: ${DB_HOST} port: ${DB_PORT} name: ${DB_NAME} user: ${DB_USER} password: ${DB_PASSWORD} redis: host: ${REDIS_HOST} port: ${REDIS_PORT} password: ${REDIS_PASSWORD}

How do I set up TLS with Traefik?

Using Traefik as reverse proxy with automatic TLS:

version: '3.8' services: traefik: image: traefik:v2.10 command: - "--providers.docker=true" - "--entrypoints.web.address=:80" - "--entrypoints.websecure.address=:443" - "--certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web" - "--certificatesresolvers.letsencrypt.acme.email=admin@yourcompany.com" - "--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json" ports: - "80:80" - "443:443" volumes: - /var/run/docker.sock:/var/run/docker.sock - letsencrypt:/letsencrypt cmdop: image: cmdop/server:latest labels: - "traefik.enable=true" - "traefik.http.routers.cmdop.rule=Host(`cmdop.yourcompany.com`)" - "traefik.http.routers.cmdop.entrypoints=websecure" - "traefik.http.routers.cmdop.tls.certresolver=letsencrypt" environment: # ... same as above depends_on: - postgres - redis volumes: letsencrypt:

How do I build a custom Docker image?

# Dockerfile FROM cmdop/server:latest # Add custom config COPY config.yaml /app/config.yaml # Add custom plugins COPY plugins/ /app/plugins/

Build and run:

docker build -t my-cmdop . docker run -d --name cmdop my-cmdop

How do I add health checks?

services: cmdop: # ... healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8080/health"] interval: 30s timeout: 10s retries: 3

How do I view and configure logs?

View logs:

# All services docker-compose logs -f # Specific service docker-compose logs -f cmdop

Configure log rotation:

services: cmdop: # ... logging: driver: json-file options: max-size: "10m" max-file: "3"

How do I back up the database?

# Database backup docker-compose exec postgres pg_dump -U cmdop cmdop > backup.sql # Restore cat backup.sql | docker-compose exec -T postgres psql -U cmdop cmdop

How do I upgrade CMDOP?

# Pull latest images docker-compose pull # Restart services docker-compose up -d # Run migrations docker-compose exec cmdop ./cmdop-server migrate

How do I set resource limits?

services: cmdop: # ... deploy: resources: limits: cpus: '2' memory: 4G reservations: cpus: '1' memory: 2G

How do I set up monitoring?

Add Prometheus metrics:

services: prometheus: image: prom/prometheus volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml ports: - "9090:9090" grafana: image: grafana/grafana ports: - "3000:3000" volumes: - grafana_data:/var/lib/grafana

How do I troubleshoot Docker issues?

What if the container won’t start?

# Check logs docker-compose logs cmdop # Check config docker-compose config # Interactive shell docker-compose exec cmdop sh

How do I debug database connection issues?

# Test PostgreSQL connectivity from the CMDOP container docker-compose exec cmdop pg_isready -h postgres -U cmdop

How do I diagnose network issues?

# List all Docker networks to verify cmdop_default exists docker network ls # Inspect the network for IP assignments and connected containers docker network inspect cmdop_default
Last updated on