Ctrl K
ComunidadGuías…

docker-compose.dev.yml.example

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
# hiai-docs Docker Compose (Development) — TEMPLATE
#
# Copy this file to docker-compose.dev.yml and fill in your local values:
#   cp docker-compose.dev.yml.example docker-compose.dev.yml
#
# The .example file is tracked in git; the actual docker-compose.dev.yml is
# gitignored. Adjust secrets, ports, and embedding provider settings for your
# machine, then `docker compose -f docker-compose.dev.yml up`.

services:
  # Custom PostgreSQL image with AGE, pgvector, and pgvectorscale.
  postgres:
    image: hiai-postgres:18-custom
    restart: unless-stopped
    ports:
      - "127.0.0.1:${DB_PORT:-5437}:5432"
    volumes:
      - pgdata:/var/lib/postgresql
    environment:
      POSTGRES_DB: ${DB_NAME:-hiai_docs}
      POSTGRES_USER: ${DB_USER:-aiuser}
      # Change this for any non-throwaway environment.
      POSTGRES_PASSWORD: ${DB_PASSWORD:-changeme}
      HIAI_APP_PASSWORD: ${HIAI_APP_PASSWORD:?HIAI_APP_PASSWORD must be set}
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U ${DB_USER:-aiuser} -d ${DB_NAME:-hiai_docs}"]
      interval: 10s
      timeout: 5s
      retries: 5
    deploy:
      resources:
        limits:
          memory: 2G
          cpus: "2"

  # Redis — used for caching, rate limiting, and job queues.
  redis:
    image: redis:8-alpine
    restart: unless-stopped
    ports:
      - "127.0.0.1:${REDIS_PORT:-6384}:6379"
    volumes:
      - redis_data:/data
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 10s
      timeout: 5s
      retries: 5
    deploy:
      resources:
        limits:
          memory: 256M
          cpus: "0.5"

  # SeaweedFS — S3-compatible object storage for uploaded files (PDFs, etc.).
  # The canonical 50702/50703 host ports keep storage in the same local range.
  seaweedfs:
    image: chrislusf/seaweedfs:3.85
    restart: unless-stopped
    ports:
      - "50702:8333"   # S3 Gateway
      - "50703:8888"   # SeaweedFS Web UI (Filer)
    volumes:
      - seaweedfs_data:/data
    entrypoint: ["/bin/sh", "-ec"]
    command:
      - |
        printf '%s' "$$SEAWEEDFS_S3_CONFIG" > /data/s3.json
        exec /usr/bin/weed server -s3 -s3.port=8333 -s3.config=/data/s3.json -filer -filer.port=8888 -master.port=9333 -volume.port=8080 -dir=/data -ip=127.0.0.1 -ip.bind=0.0.0.0
    environment:
      SEAWEEDFS_S3_CONFIG: >-
        {"identities":[{"name":"hiai-docs","credentials":[{"accessKey":"${STORAGE_ACCESS_KEY:-hiai-docs}","secretKey":"${STORAGE_SECRET_KEY:-hiai-docs}"}],"actions":["Admin","Read","List","Tagging","Write"]}]}
      SEAWEEDFS_S3_CORS_ALLOW_ORIGIN: ${STORAGE_CORS_ALLOW_ORIGIN:-http://localhost:50701,http://127.0.0.1:50701}
    healthcheck:
      test: ["CMD", "wget", "-qO-", "http://127.0.0.1:8888/"]
      interval: 10s
      timeout: 5s
      retries: 5
    deploy:
      resources:
        limits:
          memory: 512M
          cpus: "1"

  # Backend API (Bun + Elysia). Runs migrations, then watches src/.
  api:
    image: oven/bun:1.4.4-alpine
    working_dir: /mnt/ai_data/projects/hiai-docs
    restart: unless-stopped
    ports:
      - "127.0.0.1:${API_PORT:-50700}:50700"
    extra_hosts:
      - "host.docker.internal:host-gateway"
    volumes:
      # Bind-mount source for live reload.
      # Host's node_modules (with workspace symlinks) are used directly.
      - ./:/mnt/ai_data/projects/hiai-docs
      - ../../packages/hiai-ui:/mnt/ai_data/packages/hiai-ui
    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_healthy
      seaweedfs:
        condition: service_healthy
    command:
      - sh
      - -c
      - "cd /mnt/ai_data/projects/hiai-docs/packages/db && DATABASE_URL=postgresql://${DB_USER:-aiuser}:${DB_PASSWORD:-changeme}@postgres:5432/${DB_NAME:-hiai_docs} bun run db:migrate && cd /mnt/ai_data/projects/hiai-docs/backend && bun run --watch src/index.ts"
    env_file:
      - path: .env
        required: false
    environment:
      DATABASE_URL: postgresql://hiai_app:${HIAI_APP_PASSWORD:?HIAI_APP_PASSWORD must be set}@postgres:5432/${DB_NAME:-hiai_docs}
      HIAI_APP_PASSWORD: ${HIAI_APP_PASSWORD:?HIAI_APP_PASSWORD must be set}
      REDIS_URL: redis://redis:6379
      STORAGE_ENDPOINT: seaweedfs
      STORAGE_PORT: 8333
      STORAGE_ACCESS_KEY: ${STORAGE_ACCESS_KEY:-hiai-docs}
      STORAGE_SECRET_KEY: ${STORAGE_SECRET_KEY:-hiai-docs}
      STORAGE_BUCKET: ${STORAGE_BUCKET:-hiai-docs}
      STORAGE_PUBLIC_ENDPOINT: localhost
      STORAGE_PUBLIC_PORT: 50702
      STORAGE_REGION: us-east-1
      STORAGE_FORCE_PATH_STYLE: true
      BETTER_AUTH_SECRET: ${BETTER_AUTH_SECRET:-dev-only-secret-replace-me}
      BETTER_AUTH_URL: ${BETTER_AUTH_URL:-http://localhost:50700}
      CORS_ORIGINS: ${CORS_ORIGINS:-http://localhost:50701,http://127.0.0.1:50701}
      # Embedding provider (OpenAI-compatible). The public template uses
      # OpenRouter; replace these values with Ollama settings for local-only
      # inference and remove OPENROUTER_API_KEY from .env.
      OPENROUTER_API_KEY: ${OPENROUTER_API_KEY:-}
      EMBEDDING_BASE_URL: ${EMBEDDING_BASE_URL:-https://openrouter.ai/api/v1}
      EMBEDDING_API_KEY: ${EMBEDDING_API_KEY:-}
      EMBEDDING_MODEL: ${EMBEDDING_MODEL:-voyageai/voyage-4-lite}
      EMBEDDING_FALLBACK_BASE_URL: ${EMBEDDING_FALLBACK_BASE_URL:-https://openrouter.ai/api/v1}
      EMBEDDING_FALLBACK_API_KEY: ${EMBEDDING_FALLBACK_API_KEY:-}
      EMBEDDING_FALLBACK_MODEL: ${EMBEDDING_FALLBACK_MODEL:-baai/bge-m3}
      EMBEDDING_FALLBACK_2_BASE_URL: ${EMBEDDING_FALLBACK_2_BASE_URL:-https://openrouter.ai/api/v1}
      EMBEDDING_FALLBACK_2_API_KEY: ${EMBEDDING_FALLBACK_2_API_KEY:-}
      EMBEDDING_FALLBACK_2_MODEL: ${EMBEDDING_FALLBACK_2_MODEL:-openai/text-embedding-3-small}
      GRAPH_EXTRACT_ENABLED: ${GRAPH_EXTRACT_ENABLED:-false}
      GRAPH_SEARCH_ENABLED: ${GRAPH_SEARCH_ENABLED:-false}
      GRAPH_EXTRACT_BASE_URL: ${GRAPH_EXTRACT_BASE_URL:-https://openrouter.ai/api/v1}
      GRAPH_EXTRACT_API_KEY: ${GRAPH_EXTRACT_API_KEY:-}
      GRAPH_EXTRACT_MODEL: ${GRAPH_EXTRACT_MODEL:-nvidia/nemotron-3.5-lightning}
      GRAPH_EXTRACT_REASONING_EFFORT: ${GRAPH_EXTRACT_REASONING_EFFORT:-}
      GRAPH_EXTRACT_TIMEOUT_MS: ${GRAPH_EXTRACT_TIMEOUT_MS:-120000}
      GRAPH_EXTRACT_FALLBACK_BASE_URL: ${GRAPH_EXTRACT_FALLBACK_BASE_URL:-https://openrouter.ai/api/v1}
      GRAPH_EXTRACT_FALLBACK_API_KEY: ${GRAPH_EXTRACT_FALLBACK_API_KEY:-}
      GRAPH_EXTRACT_FALLBACK_MODEL: ${GRAPH_EXTRACT_FALLBACK_MODEL:-mistralai/mistral-small-2603}
      GRAPH_EXTRACT_FALLBACK_2_BASE_URL: ${GRAPH_EXTRACT_FALLBACK_2_BASE_URL:-https://openrouter.ai/api/v1}
      GRAPH_EXTRACT_FALLBACK_2_API_KEY: ${GRAPH_EXTRACT_FALLBACK_2_API_KEY:-}
      GRAPH_EXTRACT_FALLBACK_2_MODEL: ${GRAPH_EXTRACT_FALLBACK_2_MODEL:-google/gemma-4-31b-it}
      GRAPH_EXTRACT_MIN_CONFIDENCE: ${GRAPH_EXTRACT_MIN_CONFIDENCE:-0.5}
      # API_PORT controls only the published host mapping above.
      API_PORT: 50700
      NODE_ENV: development
      BODY_SIZE_LIMIT: "10485760"
      LOG_LEVEL: ${LOG_LEVEL:-debug}
      # Loaded from .env; explicit here for Docker (Bun's auto-load only
      # checks the cwd, which after `cd /app/backend` is backend/).
      HIAI_DOCS_API_KEY: ${HIAI_DOCS_API_KEY:-}
      OWNER_ID: ${OWNER_ID:-00000000-0000-4000-8000-000000000001}
      CSRF_SECRET: ${CSRF_SECRET:-dev-csrf-change-in-production}
      WEBHOOK_SECRET: ${WEBHOOK_SECRET:-dev-webhook-change-in-production}
      DOCSMINT_WORKSPACE_ENABLED: ${DOCSMINT_WORKSPACE_ENABLED:-false}
      DOCSMINT_WORKSPACE_ISSUER: ${DOCSMINT_WORKSPACE_ISSUER:-}
      DOCSMINT_WORKSPACE_SECRET: ${DOCSMINT_WORKSPACE_SECRET:-}
      DOCSMINT_WORKSPACE_CLOCK_SKEW_SECONDS: ${DOCSMINT_WORKSPACE_CLOCK_SKEW_SECONDS:-5}
    deploy:
      resources:
        limits:
          memory: 256M
          cpus: "0.5"

  # SvelteKit frontend (Vite dev server).
  web:
    image: oven/bun:1.4.4-alpine
    working_dir: /mnt/ai_data/projects/hiai-docs
    restart: unless-stopped
    ports:
      - "${WEB_PORT:-50701}:50701"
    volumes:
      - ./:/mnt/ai_data/projects/hiai-docs
      - ../../packages/hiai-ui:/mnt/ai_data/packages/hiai-ui
    depends_on:
      - api
    command:
      - sh
      - -c
      - "cd /mnt/ai_data/projects/hiai-docs/frontend && bun run dev"
    environment:
      API_URL: http://api:50700
      PORT: 50701
      WEB_PORT: 50701
      # SvelteKit adapter-node rejects bodies over 512 KiB by default. Match
      # the production proxy envelope so large valid imports reach the API.
      BODY_SIZE_LIMIT: "104857600"
      NODE_ENV: development

volumes:
  pgdata:
  redis_data:
  seaweedfs_data: