codex-memory 0.1.39

An advanced hierarchical memory system for AI agents with MCP integration
Documentation
version: '3.8'

services:
  postgres-primary:
    image: pgvector/pgvector:pg16
    container_name: codex_postgres_primary
    environment:
      POSTGRES_DB: codex_memory
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
      POSTGRES_REPLICATION_MODE: master
      POSTGRES_REPLICATION_USER: replicator
      POSTGRES_REPLICATION_PASSWORD: replicator_password
    ports:
      - "5432:5432"
    volumes:
      - postgres_primary_data:/var/lib/postgresql/data
      - ./scripts/init-primary.sql:/docker-entrypoint-initdb.d/init.sql
    networks:
      - codex_network
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 10s
      timeout: 5s
      retries: 5
    command: |
      postgres 
      -c wal_level=replica 
      -c hot_standby=on 
      -c max_wal_senders=10 
      -c max_replication_slots=10 
      -c hot_standby_feedback=on
      -c shared_preload_libraries='pg_stat_statements'
      -c pg_stat_statements.track=all
      -c shared_buffers=256MB
      -c effective_cache_size=1GB
      -c maintenance_work_mem=128MB
      -c work_mem=16MB

  postgres-replica:
    image: pgvector/pgvector:pg16
    container_name: codex_postgres_replica
    environment:
      POSTGRES_REPLICATION_MODE: slave
      POSTGRES_MASTER_HOST: postgres-primary
      POSTGRES_MASTER_PORT: 5432
      POSTGRES_REPLICATION_USER: replicator
      POSTGRES_REPLICATION_PASSWORD: replicator_password
    ports:
      - "5433:5432"
    volumes:
      - postgres_replica_data:/var/lib/postgresql/data
    networks:
      - codex_network
    depends_on:
      postgres-primary:
        condition: service_healthy

  pgbouncer:
    image: edoburu/pgbouncer:latest
    container_name: codex_pgbouncer
    environment:
      DATABASES_HOST: postgres-primary
      DATABASES_PORT: 5432
      DATABASES_DBNAME: codex_memory
      DATABASES_USER: postgres
      DATABASES_PASSWORD: postgres
      POOL_MODE: transaction
      MAX_CLIENT_CONN: 1000
      DEFAULT_POOL_SIZE: 25
      MIN_POOL_SIZE: 10
      RESERVE_POOL_SIZE: 5
      RESERVE_POOL_TIMEOUT: 3
      SERVER_LIFETIME: 1800
      SERVER_IDLE_TIMEOUT: 600
    ports:
      - "6432:6432"
    networks:
      - codex_network
    depends_on:
      postgres-primary:
        condition: service_healthy

  prometheus:
    image: prom/prometheus:latest
    container_name: codex_prometheus
    volumes:
      - ./config/prometheus.yml:/etc/prometheus/prometheus.yml
      - prometheus_data:/prometheus
    ports:
      - "9090:9090"
    networks:
      - codex_network
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.path=/prometheus'

  grafana:
    image: grafana/grafana:latest
    container_name: codex_grafana
    environment:
      GF_SECURITY_ADMIN_USER: admin
      GF_SECURITY_ADMIN_PASSWORD: admin
    volumes:
      - grafana_data:/var/lib/grafana
      - ./config/grafana/dashboards:/etc/grafana/provisioning/dashboards
      - ./config/grafana/datasources:/etc/grafana/provisioning/datasources
    ports:
      - "3000:3000"
    networks:
      - codex_network
    depends_on:
      - prometheus

volumes:
  postgres_primary_data:
  postgres_replica_data:
  prometheus_data:
  grafana_data:

networks:
  codex_network:
    driver: bridge