108 lines
4 KiB
YAML
108 lines
4 KiB
YAML
name: hindsight
|
|
# Docker Compose file for Hindsight with Timescale extensions
|
|
# - pgvectorscale: DiskANN vector search (disk-based, scalable)
|
|
# - pg_textsearch: BM25 text search (high-performance keyword retrieval)
|
|
#
|
|
# Quick start:
|
|
# docker compose -f docker/docker-compose/timescale/docker-compose.yaml up -d --build
|
|
#
|
|
# Required environment variables:
|
|
# - HINDSIGHT_DB_PASSWORD: Password for the PostgreSQL user
|
|
# - OPENAI_API_KEY (or configure another LLM provider)
|
|
#
|
|
# Optional environment variables with defaults:
|
|
# - HINDSIGHT_VERSION: Hindsight application version (default: latest)
|
|
# - HINDSIGHT_DB_USER: PostgreSQL user (default: hindsight_user)
|
|
# - HINDSIGHT_DB_NAME: PostgreSQL database name (default: hindsight_db)
|
|
|
|
services:
|
|
db:
|
|
# Custom PostgreSQL image with Timescale extensions (pgvectorscale + pg_textsearch)
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile
|
|
container_name: hindsight-db-timescale
|
|
restart: always
|
|
# Expose PostgreSQL port (using 5438 to avoid conflicts with other setups)
|
|
ports:
|
|
- "5438:5432"
|
|
environment:
|
|
POSTGRES_USER: ${HINDSIGHT_DB_USER:-hindsight_user}
|
|
POSTGRES_PASSWORD: ${HINDSIGHT_DB_PASSWORD:-hindsight_password}
|
|
POSTGRES_DB: ${HINDSIGHT_DB_NAME:-hindsight_db}
|
|
volumes:
|
|
- pg_data:/var/lib/postgresql/data
|
|
networks:
|
|
- hindsight-net
|
|
# Health check to ensure database is ready
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "pg_isready -U hindsight_user"]
|
|
interval: 5s
|
|
timeout: 5s
|
|
retries: 5
|
|
|
|
timescale-init:
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile
|
|
depends_on:
|
|
db:
|
|
condition: service_healthy
|
|
environment:
|
|
- PGPASSWORD=${HINDSIGHT_DB_PASSWORD:-hindsight_password}
|
|
command: >
|
|
bash -c "
|
|
echo 'PostgreSQL is ready - creating hindsight_db database';
|
|
psql -h hindsight-db-timescale -p 5432 -U hindsight_user -c 'CREATE DATABASE hindsight_db;' 2>/dev/null || echo 'Database already exists';
|
|
echo 'Installing Timescale extensions...';
|
|
echo '1/3: Installing pgvector (required by pgvectorscale)...';
|
|
psql -h hindsight-db-timescale -p 5432 -U hindsight_user -d hindsight_db -c 'CREATE EXTENSION IF NOT EXISTS vector CASCADE;';
|
|
echo '2/3: Installing pgvectorscale (DiskANN vector search)...';
|
|
psql -h hindsight-db-timescale -p 5432 -U hindsight_user -d hindsight_db -c 'CREATE EXTENSION IF NOT EXISTS vectorscale CASCADE;';
|
|
echo '3/3: Installing pg_textsearch (BM25 text search)...';
|
|
psql -h hindsight-db-timescale -p 5432 -U hindsight_user -d hindsight_db -c 'CREATE EXTENSION IF NOT EXISTS pg_textsearch CASCADE;';
|
|
echo '';
|
|
echo '✅ Timescale extensions installed successfully';
|
|
echo '';
|
|
echo 'Installed extensions:';
|
|
psql -h hindsight-db-timescale -p 5432 -U hindsight_user -d hindsight_db -c \"\\dx\" | grep -E '(vector|vectorscale|pg_textsearch)';
|
|
"
|
|
restart: "no"
|
|
networks:
|
|
- hindsight-net
|
|
|
|
hindsight:
|
|
image: ghcr.io/vectorize-io/hindsight:${HINDSIGHT_VERSION:-latest}
|
|
container_name: hindsight-app-timescale
|
|
ports:
|
|
- "8888:8888"
|
|
- "9999:9999"
|
|
environment:
|
|
# LLM Configuration
|
|
HINDSIGHT_API_LLM_PROVIDER: ${HINDSIGHT_API_LLM_PROVIDER:-openai}
|
|
HINDSIGHT_API_LLM_API_KEY: ${OPENAI_API_KEY:-your-api-key}
|
|
|
|
# Database Configuration
|
|
HINDSIGHT_API_DATABASE_URL: postgresql://${HINDSIGHT_DB_USER:-hindsight_user}:${HINDSIGHT_DB_PASSWORD:-hindsight_password}@db:5432/${HINDSIGHT_DB_NAME:-hindsight_db}
|
|
|
|
# Timescale Extensions
|
|
# pgvectorscale: DiskANN algorithm for disk-based scalable vector search
|
|
HINDSIGHT_API_VECTOR_EXTENSION: pgvectorscale
|
|
# pg_textsearch: High-performance BM25 text search
|
|
HINDSIGHT_API_TEXT_SEARCH_EXTENSION: pg_textsearch
|
|
|
|
depends_on:
|
|
db:
|
|
condition: service_healthy
|
|
timescale-init:
|
|
condition: service_completed_successfully
|
|
networks:
|
|
- hindsight-net
|
|
|
|
|
|
networks:
|
|
hindsight-net:
|
|
driver: bridge
|
|
|
|
volumes:
|
|
pg_data:
|