version: '3'

services:
  op-db:
    image: postgres:14-alpine
    restart: always
    volumes:
      - ./docker/data/op-db-data:/var/lib/postgresql/data
    ports:
      - 5432:5432
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres

  op-kv:
    image: redis:7.2.5-alpine
    restart: always
    volumes:
      - ./docker/data/op-kv-data:/data
    command: [ 'redis-server', '--maxmemory-policy', 'noeviction' ]
    ports:
      - 6379:6379

  op-ch:
    image: clickhouse/clickhouse-server:24.12.2.29-alpine
    restart: always
    volumes:
      - ./docker/data/op-ch-data:/var/lib/clickhouse
      - ./docker/data/op-ch-logs:/var/log/clickhouse-server
      - ./self-hosting/clickhouse/clickhouse-config.xml:/etc/clickhouse-server/config.d/op-config.xml
      - ./self-hosting/clickhouse/clickhouse-user-config.xml:/etc/clickhouse-server/users.d/op-user-config.xml
      - ./self-hosting/clickhouse/init-db.sh:/docker-entrypoint-initdb.d/init-db.sh:ro
    ulimits:
      nofile:
        soft: 262144
        hard: 262144
    ports:
      - "8123:8123" # HTTP interface
      - "9000:9000" # Native/TCP interface
      - "9009:9009" # Inter-server communication
