refactor: extract library-desk to standalone repository
- Move library-desk service to git.schweitz.net/jpmschweitzer/library-desk - Update stacks/library-desk.yml to use container image - Add library-desk to External Repositories in CONTAINERS.md - Remove source code (now in external repo) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
+5
-88
@@ -4,41 +4,15 @@ version: '3.8'
|
||||
# Application Layer
|
||||
# Port: 8089 (HTTP)
|
||||
# GPU: No
|
||||
# Storage: SSD (venv, logs)
|
||||
# Source: https://git.schweitz.net/jpmschweitzer/library-desk
|
||||
|
||||
services:
|
||||
library-desk:
|
||||
image: python:3.12-slim
|
||||
image: git.schweitz.net/jpmschweitzer/library-desk:latest
|
||||
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}
|
||||
@@ -73,6 +47,8 @@ services:
|
||||
# Python Configuration
|
||||
- PYTHONUNBUFFERED=1
|
||||
- TZ=${TZ:-Europe/Amsterdam}
|
||||
labels:
|
||||
- "com.centurylinklabs.watchtower.enable=true"
|
||||
networks:
|
||||
- docker-dataplane
|
||||
deploy:
|
||||
@@ -82,7 +58,7 @@ services:
|
||||
limits:
|
||||
memory: 768M
|
||||
healthcheck:
|
||||
test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8089/health')"]
|
||||
test: ["CMD", "curl", "-f", "http://localhost:8089/health"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
@@ -92,62 +68,3 @@ 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)
|
||||
|
||||
Reference in New Issue
Block a user