153 lines
4.3 KiB
Plaintext
153 lines
4.3 KiB
Plaintext
# Honcho Docker Compose
|
|
#
|
|
# Usage:
|
|
# cp docker-compose.yml.example docker-compose.yml
|
|
# cp .env.template .env # edit with your provider config
|
|
# docker compose up -d --build
|
|
# INSTALL_LANCEDB=true docker compose up -d --build # optional local vector store
|
|
#
|
|
# By default, ports are bound to 127.0.0.1 (localhost only).
|
|
# For development, uncomment the source mounts and monitoring services below.
|
|
|
|
services:
|
|
api:
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile
|
|
args:
|
|
INSTALL_LANCEDB: ${INSTALL_LANCEDB:-false}
|
|
entrypoint: ["sh", "docker/entrypoint.sh"]
|
|
depends_on:
|
|
database:
|
|
condition: service_healthy
|
|
redis:
|
|
condition: service_healthy
|
|
ports:
|
|
- "127.0.0.1:8000:8000"
|
|
healthcheck:
|
|
test:
|
|
[
|
|
"CMD",
|
|
"/app/.venv/bin/python",
|
|
"-c",
|
|
"import urllib.request; urllib.request.urlopen('http://localhost:8000/health', timeout=2).read()",
|
|
]
|
|
interval: 5s
|
|
timeout: 5s
|
|
retries: 5
|
|
start_period: 10s
|
|
volumes:
|
|
# Shared LanceDB data (used when VECTOR_STORE_TYPE=lancedb)
|
|
- lancedb-data:/app/lancedb_data
|
|
# -- Development: mount source for live reload --
|
|
# - .:/app
|
|
# - venv:/app/.venv
|
|
environment:
|
|
- DB_CONNECTION_URI=postgresql+psycopg://postgres:postgres@database:5432/postgres
|
|
- CACHE_URL=redis://redis:6379/0?suppress=true
|
|
- CACHE_ENABLED=true
|
|
env_file:
|
|
- path: .env
|
|
required: false
|
|
restart: unless-stopped
|
|
|
|
deriver:
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile
|
|
args:
|
|
INSTALL_LANCEDB: ${INSTALL_LANCEDB:-false}
|
|
entrypoint: ["/app/.venv/bin/python", "-m", "src.deriver"]
|
|
depends_on:
|
|
api:
|
|
condition: service_healthy
|
|
database:
|
|
condition: service_healthy
|
|
redis:
|
|
condition: service_healthy
|
|
volumes:
|
|
# Shared LanceDB data (used when VECTOR_STORE_TYPE=lancedb)
|
|
- lancedb-data:/app/lancedb_data
|
|
# -- Development: mount source for live reload --
|
|
# - .:/app
|
|
# - venv:/app/.venv
|
|
environment:
|
|
- DB_CONNECTION_URI=postgresql+psycopg://postgres:postgres@database:5432/postgres
|
|
- CACHE_URL=redis://redis:6379/0?suppress=true
|
|
- CACHE_ENABLED=true
|
|
env_file:
|
|
- path: .env
|
|
required: false
|
|
restart: unless-stopped
|
|
|
|
database:
|
|
image: pgvector/pgvector:pg15
|
|
restart: unless-stopped
|
|
ports:
|
|
- "127.0.0.1:5432:5432"
|
|
command: ["postgres", "-c", "max_connections=200"]
|
|
environment:
|
|
- POSTGRES_DB=postgres
|
|
- POSTGRES_USER=postgres
|
|
- POSTGRES_PASSWORD=postgres
|
|
# Allow passwordless connections from the host (port is bound to 127.0.0.1).
|
|
# Lets the local test suite and ad-hoc tools connect without supplying a
|
|
# password. Do NOT use this in production.
|
|
- POSTGRES_HOST_AUTH_METHOD=trust
|
|
- PGDATA=/var/lib/postgresql/data/pgdata
|
|
volumes:
|
|
- ./database/init.sql:/docker-entrypoint-initdb.d/init.sql
|
|
- pgdata:/var/lib/postgresql/data/
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "pg_isready -U postgres -d postgres"]
|
|
interval: 5s
|
|
timeout: 5s
|
|
retries: 5
|
|
|
|
redis:
|
|
image: redis:8.2
|
|
restart: unless-stopped
|
|
ports:
|
|
- "127.0.0.1:6379:6379"
|
|
volumes:
|
|
- redis-data:/data
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "redis-cli ping"]
|
|
interval: 5s
|
|
timeout: 5s
|
|
retries: 5
|
|
|
|
# -- Development: monitoring stack (uncomment to enable) --
|
|
# prometheus:
|
|
# image: prom/prometheus:v3.2.1
|
|
# ports:
|
|
# - "127.0.0.1:9090:9090"
|
|
# volumes:
|
|
# - ./docker/prometheus.yml:/etc/prometheus/prometheus.yml:ro
|
|
# - prometheus-data:/prometheus
|
|
# depends_on:
|
|
# api:
|
|
# condition: service_started
|
|
# grafana:
|
|
# image: grafana/grafana:11.4.0
|
|
# ports:
|
|
# - "127.0.0.1:3000:3000"
|
|
# environment:
|
|
# - GF_SECURITY_ADMIN_USER=admin
|
|
# - GF_SECURITY_ADMIN_PASSWORD=admin
|
|
# - GF_AUTH_ANONYMOUS_ENABLED=true
|
|
# - GF_AUTH_ANONYMOUS_ORG_ROLE=Viewer
|
|
# volumes:
|
|
# - ./docker/grafana-datasource.yml:/etc/grafana/provisioning/datasources/datasource.yml:ro
|
|
# depends_on:
|
|
# prometheus:
|
|
# condition: service_started
|
|
|
|
volumes:
|
|
pgdata:
|
|
redis-data:
|
|
lancedb-data:
|
|
# -- Development: uncomment if using source mounts --
|
|
# venv:
|
|
# prometheus-data:
|