mrapids 0.1.7

Your OpenAPI, but executable
Documentation
version: '3.8'

services:
  # Main application
  mrapids:
    build:
      context: .
      dockerfile: Dockerfile
      args:
        VERSION: ${VERSION:-dev}
        COMMIT: ${COMMIT:-local}
    image: mrapids:${VERSION:-latest}
    container_name: mrapids-api
    ports:
      - "8080:8080"
    environment:
      - RUST_LOG=${RUST_LOG:-info}
      - RUST_BACKTRACE=1
      - DATABASE_URL=postgresql://postgres:postgres@postgres:5432/mrapids
      - REDIS_URL=redis://redis:6379
      - JWT_SECRET=${JWT_SECRET:-change-me-in-production}
    volumes:
      - ./data:/app/data
      - ./logs:/app/logs
      - ./config:/app/config
    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_healthy
    networks:
      - mrapids-network
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "/app/mrapids", "health"]
      interval: 30s
      timeout: 3s
      retries: 3

  # PostgreSQL database
  postgres:
    image: postgres:15-alpine
    container_name: mrapids-postgres
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
      - POSTGRES_DB=mrapids
    volumes:
      - postgres-data:/var/lib/postgresql/data
      - ./scripts/init-db.sql:/docker-entrypoint-initdb.d/init.sql:ro
    ports:
      - "5432:5432"
    networks:
      - mrapids-network
    restart: unless-stopped
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 10s
      timeout: 5s
      retries: 5

  # Redis cache
  redis:
    image: redis:7-alpine
    container_name: mrapids-redis
    command: redis-server --appendonly yes
    volumes:
      - redis-data:/data
    ports:
      - "6379:6379"
    networks:
      - mrapids-network
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 10s
      timeout: 5s
      retries: 5

  # Prometheus for metrics
  prometheus:
    image: prom/prometheus:latest
    container_name: mrapids-prometheus
    volumes:
      - ./config/prometheus.yml:/etc/prometheus/prometheus.yml:ro
      - prometheus-data:/prometheus
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.path=/prometheus'
      - '--web.console.libraries=/usr/share/prometheus/console_libraries'
      - '--web.console.templates=/usr/share/prometheus/consoles'
    ports:
      - "9090:9090"
    networks:
      - mrapids-network
    restart: unless-stopped

  # Grafana for visualization
  grafana:
    image: grafana/grafana:latest
    container_name: mrapids-grafana
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_PASSWORD:-admin}
      - GF_INSTALL_PLUGINS=redis-datasource
    volumes:
      - grafana-data:/var/lib/grafana
      - ./config/grafana/dashboards:/etc/grafana/provisioning/dashboards:ro
      - ./config/grafana/datasources:/etc/grafana/provisioning/datasources:ro
    ports:
      - "3000:3000"
    networks:
      - mrapids-network
    restart: unless-stopped
    depends_on:
      - prometheus

  # Jaeger for tracing
  jaeger:
    image: jaegertracing/all-in-one:latest
    container_name: mrapids-jaeger
    environment:
      - COLLECTOR_ZIPKIN_HOST_PORT=:9411
    ports:
      - "5775:5775/udp"
      - "6831:6831/udp"
      - "6832:6832/udp"
      - "5778:5778"
      - "16686:16686"
      - "14268:14268"
      - "14250:14250"
      - "9411:9411"
    networks:
      - mrapids-network
    restart: unless-stopped

  # Development tools container
  dev-tools:
    image: rust:1.75-alpine
    container_name: mrapids-dev
    working_dir: /workspace
    volumes:
      - .:/workspace
      - cargo-cache:/usr/local/cargo/registry
      - target-cache:/workspace/target
    environment:
      - CARGO_TARGET_DIR=/workspace/target
    command: tail -f /dev/null
    networks:
      - mrapids-network
    profiles:
      - dev

  # Documentation server
  docs:
    image: nginx:alpine
    container_name: mrapids-docs
    volumes:
      - ./target/doc:/usr/share/nginx/html:ro
      - ./docs:/usr/share/nginx/html/guides:ro
    ports:
      - "8081:80"
    networks:
      - mrapids-network
    profiles:
      - docs

networks:
  mrapids-network:
    driver: bridge

volumes:
  postgres-data:
  redis-data:
  prometheus-data:
  grafana-data:
  cargo-cache:
  target-cache: