rivet-cli 0.2.0-beta.2

CLI tool to export PostgreSQL and MySQL to Parquet/CSV (local, S3, GCS) with tuning, preflight checks, and SQLite-backed state.
Documentation
services:
  postgres:
    image: postgres:16
    environment:
      POSTGRES_USER: rivet
      POSTGRES_PASSWORD: rivet
      POSTGRES_DB: rivet
    ports:
      - "5432:5432"
    volumes:
      - ./dev/postgres/init.sql:/docker-entrypoint-initdb.d/init.sql
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U rivet"]
      interval: 5s
      timeout: 3s
      retries: 10

  mysql:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: rivet
      MYSQL_USER: rivet
      MYSQL_PASSWORD: rivet
      MYSQL_DATABASE: rivet
    ports:
      - "3306:3306"
    volumes:
      - ./dev/mysql/init.sql:/docker-entrypoint-initdb.d/init.sql
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-uroot", "-privet"]
      interval: 5s
      timeout: 3s
      retries: 10

  minio:
    image: minio/minio:latest
    command: server /data --console-address ":9001"
    environment:
      MINIO_ROOT_USER: minioadmin
      MINIO_ROOT_PASSWORD: minioadmin
    ports:
      - "9000:9000"
      - "9001:9001"

  # GCS JSON API emulator (OpenDAL uses /storage/v1/... under this base URL).
  fake-gcs:
    image: fsouza/fake-gcs-server:latest
    ports:
      - "4443:4443"
    command:
      - "-scheme"
      - "http"
      - "-host"
      - "0.0.0.0"
      - "-port"
      - "4443"

  # --- Monitoring stack (Postgres metrics under load) ---
  postgres-exporter:
    image: prometheuscommunity/postgres-exporter:latest
    environment:
      DATA_SOURCE_NAME: "postgresql://rivet:rivet@postgres:5432/rivet?sslmode=disable"
    ports:
      - "9187:9187"
    depends_on:
      - postgres

  prometheus:
    image: prom/prometheus:latest
    volumes:
      - ./dev/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro
    ports:
      - "9090:9090"
    depends_on:
      - postgres-exporter

  grafana:
    image: grafana/grafana:latest
    environment:
      GF_SECURITY_ADMIN_USER: admin
      GF_SECURITY_ADMIN_PASSWORD: admin
      GF_AUTH_ANONYMOUS_ENABLED: "true"
      GF_AUTH_ANONYMOUS_ORG_ROLE: Viewer
    volumes:
      - ./dev/grafana/provisioning:/etc/grafana/provisioning:ro
      - ./dev/grafana/dashboards:/var/lib/grafana/dashboards:ro
    ports:
      - "3000:3000"
    depends_on:
      - prometheus

  # Toxiproxy — network fault injection proxy for retry/resilience testing.
  # Postgres is proxied on port 15432; MySQL on port 13306.
  toxiproxy:
    image: ghcr.io/shopify/toxiproxy:latest
    ports:
      - "8474:8474"   # HTTP API
      - "15432:15432"  # proxied Postgres
      - "13306:13306"  # proxied MySQL
    depends_on:
      - postgres
      - mysql