Files
FabledScribe/docker-compose.prod.yml
T
bvandeusen cbfdf5289e Add multi-user auth, background generation, and chat UX improvements
Phase 5: Multi-user authentication with session cookies, bcrypt passwords,
first-user-is-admin pattern, per-user data isolation, backup/restore,
Docker Swarm production stack with secrets and network isolation.

Phase 5.1: Chat UX improvements:
- Background generation architecture (GenerationBuffer + asyncio task)
  with SSE fan-out, reconnect support, and periodic DB flushes
- LLM-generated conversation titles (first exchange + every 10th message)
- Stop generation button with cancel_event and partial content preservation
- Relative timestamps in sidebar (5m ago, 3h ago, then dates)
- Empty chat auto-cleanup on navigation away
- Save-as-note uses LLM for title generation, tags notes with "chat"
- Summarize-as-note also tags with "chat"

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 14:36:30 -05:00

110 lines
2.5 KiB
YAML

services:
app:
build: .
ports:
- "5000:5000"
depends_on:
db:
condition: service_healthy
ollama:
condition: service_started
environment:
DATABASE_URL_FILE: /run/secrets/fabled_assistant_db_url
SECRET_KEY_FILE: /run/secrets/fabled_assistant_secret_key
OLLAMA_URL: "http://ollama:11434"
OLLAMA_MODEL: "${OLLAMA_MODEL:-llama3.1}"
LOG_LEVEL: "${LOG_LEVEL:-INFO}"
secrets:
- fabled_assistant_db_url
- fabled_assistant_secret_key
networks:
- frontend
- backend
healthcheck:
test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:5000/api/health')"]
interval: 30s
timeout: 10s
retries: 3
start_period: 30s
deploy:
resources:
limits:
memory: 512M
restart_policy:
condition: on-failure
max_attempts: 5
db:
image: postgres:16-alpine
volumes:
- pgdata:/var/lib/postgresql/data
environment:
POSTGRES_USER: fabled
POSTGRES_PASSWORD_FILE: /run/secrets/fabled_assistant_db_password
POSTGRES_DB: fabledassistant
secrets:
- fabled_assistant_db_password
networks:
- backend
healthcheck:
test: ["CMD-SHELL", "pg_isready -U fabled"]
interval: 10s
timeout: 5s
retries: 5
deploy:
resources:
limits:
memory: 256M
restart_policy:
condition: on-failure
max_attempts: 5
ollama:
image: ollama/ollama
volumes:
- ollama_models:/root/.ollama
networks:
- backend
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:11434/"]
interval: 30s
timeout: 10s
retries: 3
start_period: 15s
deploy:
placement:
constraints:
- node.role == worker
resources:
limits:
memory: 8G
restart_policy:
condition: on-failure
max_attempts: 3
# To enable GPU support, uncomment the section below
# (requires nvidia-container-toolkit)
# deploy:
# resources:
# reservations:
# devices:
# - driver: nvidia
# count: all
# capabilities: [gpu]
volumes:
pgdata:
ollama_models:
networks:
frontend:
backend:
internal: true
secrets:
fabled_assistant_secret_key:
external: true
fabled_assistant_db_password:
external: true
fabled_assistant_db_url:
external: true