Replace WIKIJS_API_KEY with WIKIJS_USERNAME/PASSWORD and add WIKIJS_DB_PASSWORD for PostgreSQL LISTEN/NOTIFY connection. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
154 lines
4.7 KiB
YAML
154 lines
4.7 KiB
YAML
version: '3.8'
|
|
|
|
# Library - Front Desk API (Coordination Service)
|
|
# Application Layer
|
|
# Port: 8089 (HTTP)
|
|
# GPU: No
|
|
# Storage: SSD (venv, logs)
|
|
|
|
services:
|
|
library-desk:
|
|
image: python:3.12-slim
|
|
container_name: library-desk
|
|
restart: unless-stopped
|
|
ports:
|
|
- "8089:8089" # FastAPI HTTP
|
|
volumes:
|
|
# Mount source code for live editing
|
|
- /home/jpmschweitzer/Projects/portainer-core/services/library-desk:/app
|
|
# Persist container's venv for fast restarts
|
|
- /home/jpmschweitzer/docker-data/library-desk/venv:/venv
|
|
|
|
working_dir: /app
|
|
|
|
command: >
|
|
sh -c "
|
|
echo 'Installing system dependencies...' &&
|
|
apt-get update -qq &&
|
|
apt-get install -y --no-install-recommends curl >/dev/null 2>&1 &&
|
|
rm -rf /var/lib/apt/lists/* &&
|
|
echo 'Setting up Python environment...' &&
|
|
if [ ! -f /venv/bin/python ]; then
|
|
echo 'Initializing venv...' &&
|
|
python3 -m venv --clear /venv;
|
|
fi &&
|
|
echo 'Upgrading pip...' &&
|
|
/venv/bin/python -m pip install --upgrade pip --quiet &&
|
|
echo 'Installing dependencies from requirements.txt...' &&
|
|
/venv/bin/python -m pip install -r /app/requirements.txt --quiet &&
|
|
echo 'Starting Library Desk API...' &&
|
|
/venv/bin/python -m uvicorn src.main:app --host 0.0.0.0 --port 8089 --workers 2
|
|
"
|
|
environment:
|
|
# API Configuration
|
|
- LIBRARY_API_KEY=${LIBRARY_API_KEY}
|
|
|
|
# Neo4j Configuration
|
|
- NEO4J_URI=bolt://neo4j:7687
|
|
- NEO4J_USER=neo4j
|
|
- NEO4J_PASSWORD=${NEO4J_PASSWORD}
|
|
|
|
# Qdrant Configuration
|
|
- QDRANT_HOST=qdrant
|
|
- QDRANT_PORT=6333
|
|
|
|
# Wiki.js Configuration
|
|
- WIKIJS_URL=http://wiki:3000
|
|
- WIKIJS_USERNAME=librarian@schweitz.net
|
|
- WIKIJS_PASSWORD=${WIKIJS_PASSWORD}
|
|
- WIKIJS_DB_PASSWORD=${WIKIJS_DB_PASSWORD}
|
|
|
|
# SearXNG Configuration
|
|
- SEARXNG_URL=http://searxng:8080
|
|
|
|
# Ollama Configuration (for embeddings)
|
|
- OLLAMA_URL=http://ollama:11434
|
|
- OLLAMA_MODEL=nomic-embed-text
|
|
|
|
# Redis Configuration
|
|
- REDIS_HOST=redis-shared
|
|
- REDIS_PORT=6379
|
|
- REDIS_DB=4
|
|
|
|
# Python Configuration
|
|
- PYTHONUNBUFFERED=1
|
|
- TZ=${TZ:-Europe/Amsterdam}
|
|
networks:
|
|
- docker-dataplane
|
|
deploy:
|
|
resources:
|
|
reservations:
|
|
memory: 256M
|
|
limits:
|
|
memory: 768M
|
|
healthcheck:
|
|
test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8089/health')"]
|
|
interval: 30s
|
|
timeout: 10s
|
|
retries: 3
|
|
start_period: 60s
|
|
|
|
networks:
|
|
docker-dataplane:
|
|
external: true
|
|
name: docker-dataplane
|
|
|
|
# ⚠️ SECURITY WARNING:
|
|
# Set these in environment variables before deploying:
|
|
# - LIBRARY_API_KEY (generate with: openssl rand -hex 32)
|
|
# - NEO4J_PASSWORD (from library-neo4j deployment)
|
|
# - LIBRARY_DB_PASSWORD (from library-wiki deployment)
|
|
# - WIKIJS_API_KEY (from Wiki.js admin panel → API Access)
|
|
#
|
|
# Prerequisites:
|
|
# 1. Create /home/jpmschweitzer/Projects/portainer-core/services/library/services/front-desk/
|
|
# 2. Create requirements.txt (see DEPLOYMENT.md Phase 4.3)
|
|
# 3. Create main.py with FastAPI app (see DEPLOYMENT.md Phase 4.3)
|
|
#
|
|
# API Endpoints (once implemented):
|
|
# Query:
|
|
# POST /query/hybrid # HybridRAG (graph + vector + web)
|
|
# POST /query/semantic # Vector search only
|
|
# POST /query/graph # Graph traversal only
|
|
# GET /query/related/{id} # Find related content
|
|
#
|
|
# Content Management:
|
|
# POST /ingest/document # Index new document
|
|
# POST /ingest/wiki-page # Sync Wiki.js page
|
|
# POST /wiki/dossier # Create dossier (proxies to Wiki.js)
|
|
# PUT /wiki/dossier/{id} # Update dossier
|
|
# DELETE /wiki/dossier/{id} # Delete dossier
|
|
#
|
|
# Graph Operations:
|
|
# GET /graph/entities # List entities
|
|
# GET /graph/mindmap/{id} # Generate mind map for dossier
|
|
# POST /graph/query # Execute Cypher query
|
|
#
|
|
# Deduplication:
|
|
# POST /deduplicate/find # Find potential duplicates
|
|
# POST /deduplicate/merge # Merge duplicate entities
|
|
#
|
|
# System:
|
|
# GET /stats # System statistics
|
|
# GET /health # Health check
|
|
#
|
|
# API Documentation:
|
|
# - Interactive docs: http://192.168.86.149:8089/docs
|
|
# - OpenAPI spec: http://192.168.86.149:8089/openapi.json
|
|
#
|
|
# Features:
|
|
# - HybridRAG queries (Neo4j + Qdrant + SearXNG)
|
|
# - Document ingestion and indexing
|
|
# - Entity extraction and relationship mapping
|
|
# - Mind map generation
|
|
# - Deduplication detection
|
|
# - Wiki.js API proxy
|
|
#
|
|
# Dependencies:
|
|
# - Neo4j (knowledge graph)
|
|
# - Qdrant (vector search)
|
|
# - Wiki.js (wiki operations)
|
|
# - SearXNG (web search)
|
|
# - Ollama (embeddings)
|
|
# - Redis (caching)
|