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=trueEnvironment File
Create a .env file:
bash
# .env
DB_PASSWORD=your-secure-database-password
JWT_SECRET=your-64-character-jwt-secret-key-for-signing-tokens-securelyQuick 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