services: # ============================================ # keep-notes - Next.js Web Application # ============================================ keep-notes: build: context: ./keep-notes dockerfile: Dockerfile container_name: memento-web env_file: - .env.docker ports: - "3000:3000" environment: - DATABASE_URL=file:/app/prisma/dev.db - NEXTAUTH_SECRET=${NEXTAUTH_SECRET:-changethisinproduction} - NEXTAUTH_URL=${NEXTAUTH_URL:-http://localhost:3000} - NODE_ENV=production - NEXT_TELEMETRY_DISABLED=1 # Email Configuration (SMTP) - SMTP_HOST=${SMTP_HOST} - SMTP_PORT=${SMTP_PORT:-587} - SMTP_USER=${SMTP_USER} - SMTP_PASS=${SMTP_PASS} - SMTP_FROM=${SMTP_FROM:-noreply@memento.app} # AI Providers - AI_PROVIDER_TAGS=${AI_PROVIDER_TAGS} - AI_PROVIDER_EMBEDDING=${AI_PROVIDER_EMBEDDING} - OPENAI_API_KEY=${OPENAI_API_KEY} - OLLAMA_BASE_URL=${OLLAMA_BASE_URL} - OLLAMA_MODEL=${OLLAMA_MODEL} - AI_MODEL_TAGS=${AI_MODEL_TAGS} - AI_MODEL_EMBEDDING=${AI_MODEL_EMBEDDING} volumes: - db-data:/app/prisma - uploads-data:/app/public/uploads restart: unless-stopped healthcheck: test: ["CMD", "wget", "--spider", "-q", "http://localhost:3000"] interval: 30s timeout: 10s retries: 3 start_period: 40s networks: - memento-network deploy: resources: limits: cpus: '2' memory: 2G reservations: cpus: '0.5' memory: 512M # ============================================ # mcp-server - MCP Protocol Server # ============================================ mcp-server: build: context: ./mcp-server dockerfile: Dockerfile container_name: memento-mcp env_file: - .env.docker ports: # SSE mode exposes port 3001, stdio mode doesn't need ports - "3001:3001" environment: # Mode: 'stdio' (default, for Claude Desktop) or 'sse' (for HTTP/N8N) - MCP_MODE=${MCP_MODE:-stdio} - PORT=${MCP_PORT:-3001} # Database path - must match the volume mount - DATABASE_URL=file:/app/db/dev.db - NODE_ENV=production volumes: # Shared database with keep-notes - db-data:/app/db depends_on: keep-notes: condition: service_healthy restart: unless-stopped networks: - memento-network healthcheck: test: ["CMD-SHELL", "if [ \"${MCP_MODE}\" = 'sse' ]; then wget --spider -q http://localhost:3001/ || exit 1; else node -e \"console.log('healthy')\" || exit 1; fi"] interval: 30s timeout: 10s retries: 3 start_period: 10s # ============================================ # Ollama - Local LLM Provider (Optional) # ============================================ ollama: image: ollama/ollama:latest container_name: memento-ollama ports: - "11434:11434" volumes: - ollama-data:/root/.ollama restart: unless-stopped networks: - memento-network deploy: resources: limits: cpus: '4' memory: 8G reservations: cpus: '2' memory: 4G # Ollama is optional - only enable if you set AI_PROVIDER_TAGS=ollama profiles: - ollama # ============================================ # Volumes - Data Persistence # ============================================ volumes: db-data: driver: local uploads-data: driver: local ollama-data: driver: local # ============================================ # Networks - Service Communication # ============================================ networks: memento-network: driver: bridge