Skip to content

Docker Compose Examples

Complete Docker Compose configurations for various setups.

Basic Setup

Minimal configuration to get started:

yaml
# docker-compose.yml
version: '3.8'

services:
  ops-atlas:
    image: opsatlas/ops-atlas:latest
    ports:
      - "3000:3000"
    environment:
      - DATABASE_URL=postgres://postgres:password@db:5432/opsatlas
      - REDIS_URL=redis://redis:6379
      - JWT_SECRET=your-secret-key-min-64-chars-for-security-please-change-this
    depends_on:
      - db
      - redis

  db:
    image: postgres:15-alpine
    environment:
      - POSTGRES_DB=opsatlas
      - POSTGRES_PASSWORD=password
    volumes:
      - postgres_data:/var/lib/postgresql/data

  redis:
    image: redis:7-alpine
    volumes:
      - redis_data:/data

volumes:
  postgres_data:
  redis_data:

Production Setup

With SSL, backups, and monitoring:

yaml
version: '3.8'

services:
  ops-atlas:
    image: opsatlas/ops-atlas:latest
    restart: unless-stopped
    environment:
      - DATABASE_URL=postgres://opsatlas:${DB_PASSWORD}@db:5432/opsatlas
      - REDIS_URL=redis://redis:6379
      - JWT_SECRET=${JWT_SECRET}
      - LOG_LEVEL=info
    depends_on:
      db:
        condition: service_healthy
      redis:
        condition: service_healthy
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
      interval: 30s
      timeout: 10s
      retries: 3
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.ops-atlas.rule=Host(`ops.example.com`)"
      - "traefik.http.routers.ops-atlas.tls.certresolver=letsencrypt"

  db:
    image: postgres:15-alpine
    restart: unless-stopped
    environment:
      - POSTGRES_DB=opsatlas
      - POSTGRES_USER=opsatlas
      - POSTGRES_PASSWORD=${DB_PASSWORD}
    volumes:
      - postgres_data:/var/lib/postgresql/data
      - ./backups:/backups
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U opsatlas"]
      interval: 10s
      timeout: 5s
      retries: 5

  redis:
    image: redis:7-alpine
    restart: unless-stopped
    command: redis-server --appendonly yes
    volumes:
      - redis_data:/data
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 10s
      timeout: 5s
      retries: 5

  traefik:
    image: traefik:v2.10
    restart: unless-stopped
    command:
      - "--api.insecure=true"
      - "--providers.docker=true"
      - "--entrypoints.web.address=:80"
      - "--entrypoints.websecure.address=:443"
      - "--certificatesresolvers.letsencrypt.acme.httpchallenge=true"
      - "--certificatesresolvers.letsencrypt.acme.email=admin@example.com"
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - traefik_certs:/letsencrypt

  backup:
    image: postgres:15-alpine
    depends_on:
      - db
    volumes:
      - ./backups:/backups
    entrypoint: /bin/sh -c "while true; do pg_dump -h db -U opsatlas opsatlas > /backups/backup_$$(date +%Y%m%d_%H%M%S).sql; sleep 86400; done"
    environment:
      - PGPASSWORD=${DB_PASSWORD}

volumes:
  postgres_data:
  redis_data:
  traefik_certs:

With Docker Socket Monitoring

Monitor your Docker containers:

yaml
services:
  ops-atlas:
    image: opsatlas/ops-atlas:latest
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
    environment:
      - DOCKER_ENABLED=true

Environment File

Create a .env file:

bash
# .env
DB_PASSWORD=your-secure-database-password
JWT_SECRET=your-64-character-jwt-secret-key-for-signing-tokens-securely

Quick Start

bash
# Clone and start
git clone https://github.com/ops-atlas/examples.git
cd examples/docker-compose/basic

# Start services
docker-compose up -d

# Check status
docker-compose ps

# View logs
docker-compose logs -f ops-atlas

Released under the MIT License.