platform-deployments/docker/docker-compose.yml
Quinn Ftw f7c4d22370 chore(docker): 🔧 Update Docker Compose services, networks, and volumes configurations
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-04-04 21:00:42 -07:00

1446 lines
51 KiB
YAML

# =============================================================================
# Lilith Platform - Unified Docker Compose
# =============================================================================
#
# Single compose file for all environments using Docker profiles:
# - core: Infrastructure (PostgreSQL, Redis, Meilisearch, MinIO)
# - platform: nginx + all platform services
# - debug: Admin UIs (pgAdmin, Redis Commander)
# - gpu: GPU-accelerated ML services
#
# Usage:
# Dev: ./run dev (starts core + platform profiles)
# Prod: ./run prod (starts core + platform with prod env)
# All: ./run dev:all (starts core + platform + debug + gpu)
#
# Environment Variables (from .env.dev or .env.prod):
# LILITH_ENV - dev or prod
# COMPOSE_PROJECT_NAME - lilith-dev or lilith-prod
# NGINX_CONFIG - nginx config file to use
#
# Data persistence:
# All data stored in Docker volumes (portable across machines)
#
# DNS setup required for dev:
# sudo ./tooling/scripts/dev-setup/setup-local-dns.sh
#
name: ${COMPOSE_PROJECT_NAME:-lilith-dev}
services:
# ===========================================================================
# CORE INFRASTRUCTURE (profile: core)
# ===========================================================================
# ---------------------------------------------------------------------------
# PostgreSQL 16 with TimescaleDB Extension
# ---------------------------------------------------------------------------
postgresql:
image: timescale/timescaledb:latest-pg16
container_name: lilith-${LILITH_ENV:-dev}-postgres
restart: unless-stopped
profiles:
- core
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres}
POSTGRES_DB: lilith_${LILITH_ENV:-dev}
POSTGRES_HOST_AUTH_METHOD: ${POSTGRES_HOST_AUTH_METHOD:-trust}
ports:
- '${INFRA_POSTGRES_PORT:-25432}:5432'
volumes:
- postgres-data:/var/lib/postgresql/data
- ./init-scripts/postgres:/docker-entrypoint-initdb.d:ro
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U postgres']
interval: 10s
timeout: 5s
retries: 5
networks:
- lilith-network
# ---------------------------------------------------------------------------
# Redis 7 - Cache, Queues, Pub/Sub
# ---------------------------------------------------------------------------
redis:
image: redis:7-alpine
container_name: lilith-${LILITH_ENV:-dev}-redis
restart: unless-stopped
profiles:
- core
ports:
- '${INFRA_REDIS_PORT:-26379}:6379'
volumes:
- redis-data:/data
command:
- redis-server
- --appendonly
- 'yes'
- --appendfsync
- everysec
- --maxmemory
- ${REDIS_MAXMEMORY:-2gb}
- --maxmemory-policy
- noeviction
- --requirepass
- ${REDIS_PASSWORD:-redis_dev_password}
healthcheck:
test: ['CMD', 'redis-cli', '-a', '${REDIS_PASSWORD:-redis_dev_password}', 'ping']
interval: 10s
timeout: 3s
retries: 5
networks:
- lilith-network
# ---------------------------------------------------------------------------
# Model Boss Redis - GPU/VRAM Lease Coordination (shared, one per host)
# ---------------------------------------------------------------------------
# Single Redis instance for model-boss GPU lease coordination across ALL ML
# services on this host. Used by GPUBoss for lease acquisition, heartbeats,
# preemption, and model registry. Lightweight — no persistence needed.
model-boss-redis:
image: redis:7-alpine
container_name: model-boss-redis
restart: unless-stopped
profiles:
- core
ports:
- '${MODEL_BOSS_REDIS_PORT:-26400}:6379'
command:
- redis-server
- --maxmemory
- 64mb
- --maxmemory-policy
- allkeys-lru
- --save
- ''
healthcheck:
test: ['CMD', 'redis-cli', 'ping']
interval: 10s
timeout: 3s
retries: 5
networks:
- lilith-network
# ---------------------------------------------------------------------------
# Meilisearch - Full-text Search
# ---------------------------------------------------------------------------
meilisearch:
image: getmeili/meilisearch:v1.6
container_name: lilith-${LILITH_ENV:-dev}-meilisearch
restart: unless-stopped
profiles:
- core
ports:
- '${MEILISEARCH_PORT:-7700}:7700'
environment:
MEILI_MASTER_KEY: ${MEILI_MASTER_KEY:-development-master-key-change-in-prod}
MEILI_ENV: ${MEILI_ENV:-development}
MEILI_NO_ANALYTICS: 'true'
volumes:
- meilisearch-data:/meili_data
healthcheck:
test: ['CMD', 'curl', '-f', 'http://localhost:7700/health']
interval: 10s
timeout: 5s
retries: 5
networks:
- lilith-network
# ---------------------------------------------------------------------------
# MinIO - S3-compatible Object Storage
# ---------------------------------------------------------------------------
minio:
image: minio/minio:latest
container_name: lilith-${LILITH_ENV:-dev}-minio
restart: unless-stopped
profiles:
- core
ports:
- '${MINIO_API_PORT:-9000}:9000' # S3 API
- '${MINIO_CONSOLE_PORT:-9001}:9001' # Web Console
environment:
MINIO_ROOT_USER: ${MINIO_ROOT_USER:-minioadmin}
MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD:-minioadmin123}
volumes:
- minio-data:/data
command: server /data --console-address ":9001"
healthcheck:
test: ['CMD', 'mc', 'ready', 'local']
interval: 10s
timeout: 5s
retries: 5
start_period: 10s
networks:
- lilith-network
# ===========================================================================
# NGINX - Reverse Proxy (profile: platform)
# ===========================================================================
nginx:
image: nginx:alpine
container_name: lilith-${LILITH_ENV:-dev}-nginx
restart: unless-stopped
profiles:
- platform
ports:
- '${NGINX_HTTP_PORT:-80}:80'
- '${NGINX_HTTPS_PORT:-443}:443'
volumes:
- ../nginx/${NGINX_CONFIG:-nginx.local.conf}:/etc/nginx/nginx.conf:ro
# Override default.conf that ships with nginx:alpine - its server_name localhost
# captures health check requests before our catch-all (server_name _), causing
# the /health endpoint to 404 and the container to report unhealthy permanently.
- /dev/null:/etc/nginx/conf.d/default.conf:ro
- ../nginx/conf.d/${NGINX_RATE_LIMITING:-0-rate-limiting.local.conf}:/etc/nginx/conf.d/0-rate-limiting.conf:ro
- ../nginx/conf.d/${NGINX_UPSTREAMS:-1-upstreams.local.conf}:/etc/nginx/conf.d/1-upstreams.conf:ro
# Infrastructure domains (api, imajin, minio, meilisearch)
- ../nginx/conf.d/${NGINX_INFRASTRUCTURE:-7-infrastructure.local.conf}:/etc/nginx/conf.d/7-infrastructure.conf:ro
# Deployment-specific domain configs (colocated with services.yaml)
- ../@domains/atlilith.www/nginx/local.conf:/etc/nginx/conf.d/8-atlilith-www.conf:ro
- ../@domains/atlilith.admin/nginx/local.conf:/etc/nginx/conf.d/8-atlilith-admin.conf:ro
- ../@domains/atlilith.status/nginx/local.conf:/etc/nginx/conf.d/8-atlilith-status.conf:ro
- ../@domains/trustedmeet.www/nginx/local.conf:/etc/nginx/conf.d/8-trustedmeet-www.conf:ro
- ../@domains/spoiledbabes.www/nginx/local.conf:/etc/nginx/conf.d/8-spoiledbabes-www.conf:ro
- ../@domains/lilith_cam.www/nginx/local.conf:/etc/nginx/conf.d/8-lilith-cam-www.conf:ro
- ../@domains/lilithstage.www/nginx/local.conf:/etc/nginx/conf.d/8-lilithstage-www.conf:ro
- ../@domains/lilithfan.www/nginx/local.conf:/etc/nginx/conf.d/8-lilithfan-www.conf:ro
# Quinn domains (lilith-platform.live — cross-repo mounts)
- ../../../lilith-platform.live/deployments/@domains/quinn.www/nginx/conf.d/quinn-upstreams.conf:/etc/nginx/conf.d/2-quinn-upstreams.conf:ro
- ../../../lilith-platform.live/deployments/@domains/quinn.www/nginx/local.conf:/etc/nginx/conf.d/8-quinn-www.conf:ro
- ../../../lilith-platform.live/deployments/@domains/quinn.my/nginx/local.conf:/etc/nginx/conf.d/8-quinn-my.conf:ro
- ../../../lilith-platform.live/infrastructure/certs:/etc/nginx/certs/quinn:ro
- ../nginx/snippets:/etc/nginx/snippets:ro
- ../nginx/errors:/etc/nginx/errors:ro
# SSL certs for production
- ${SSL_CERT_PATH:-/dev/null}:/etc/letsencrypt:ro
# SSL certs for local development (mkcert)
- ../certs/local:/etc/nginx/certs/local:ro
extra_hosts:
# Allow nginx to reach host services (dev mode with HMR)
- "host.docker.internal:host-gateway"
depends_on:
postgresql:
condition: service_healthy
redis:
condition: service_healthy
healthcheck:
test: ['CMD', 'curl', '-f', 'http://localhost/health']
interval: 10s
timeout: 5s
retries: 3
networks:
- lilith-network
# ===========================================================================
# PLATFORM SERVICES (profile: platform)
# ===========================================================================
# Note: In dev mode, these services run on the HOST with volume mounts for HMR.
# In prod mode, these would be built images. For now, we use host.docker.internal
# to route to host-running services managed by the orchestrator.
#
# The nginx container routes to host services via host.docker.internal.
# This allows Vite HMR to work in dev while nginx handles domain routing.
# ===========================================================================
# FEATURE DATABASES (profile: feature-dbs)
# ===========================================================================
# Feature-isolated databases following Feature-Sliced Design.
# Ports from deployments/ports.yaml, credentials from vault/features/*.env
# ---------------------------------------------------------------------------
# I18N PostgreSQL - Translation service database (port 25435)
# Used by: platform-admin, i18n
# ---------------------------------------------------------------------------
i18n-postgres:
image: postgres:16-alpine
container_name: lilith-i18n-postgres
restart: unless-stopped
profiles:
- feature-dbs
ports:
- '${I18N_POSTGRES_PORT:-25435}:5432'
environment:
POSTGRES_USER: ${I18N_POSTGRES_USER:-i18n}
POSTGRES_PASSWORD: ${I18N_POSTGRES_PASSWORD:-i18n_dev_password}
POSTGRES_DB: ${I18N_POSTGRES_DB:-platform_admin}
volumes:
- i18n-postgres-data:/var/lib/postgresql/data
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U ${I18N_POSTGRES_USER:-i18n} -d ${I18N_POSTGRES_DB:-platform_admin}']
interval: 10s
timeout: 5s
retries: 5
networks:
- lilith-network
# ---------------------------------------------------------------------------
# Landing PostgreSQL - Landing page backend database (port 25438)
# Used by: landing
# ---------------------------------------------------------------------------
landing-postgres:
image: postgres:16-alpine
container_name: lilith-landing-postgres
restart: unless-stopped
profiles:
- feature-dbs
ports:
- '${LANDING_POSTGRES_PORT:-25438}:5432'
environment:
POSTGRES_USER: ${LANDING_POSTGRES_USER:-lilith}
POSTGRES_PASSWORD: ${LANDING_POSTGRES_PASSWORD:-lilith}
POSTGRES_DB: ${LANDING_POSTGRES_DB:-lilith_landing}
volumes:
- landing-postgres-data:/var/lib/postgresql/data
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U ${LANDING_POSTGRES_USER:-lilith} -d ${LANDING_POSTGRES_DB:-lilith_landing}']
interval: 10s
timeout: 5s
retries: 5
networks:
- lilith-network
# ---------------------------------------------------------------------------
# Media Gallery PostgreSQL - Photo sync database (port 25448)
# Used by: media-gallery
# Managed by: media-gallery/docker-compose.yml (container already running)
# ---------------------------------------------------------------------------
media-gallery-postgres:
image: postgres:16-alpine
container_name: lilith-media-gallery-postgres
restart: unless-stopped
profiles:
- feature-dbs-media-gallery-external
ports:
- '${MEDIA_GALLERY_POSTGRES_PORT:-25448}:5432'
environment:
POSTGRES_USER: ${MEDIA_GALLERY_POSTGRES_USER:-postgres}
POSTGRES_PASSWORD: ${MEDIA_GALLERY_POSTGRES_PASSWORD:-imageassist_dev_password}
POSTGRES_DB: ${MEDIA_GALLERY_POSTGRES_DB:-media_gallery}
volumes:
- media-gallery-postgres-data:/var/lib/postgresql/data
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U ${MEDIA_GALLERY_POSTGRES_USER:-postgres} -d ${MEDIA_GALLERY_POSTGRES_DB:-media_gallery}']
interval: 10s
timeout: 5s
retries: 5
networks:
- lilith-network
# ---------------------------------------------------------------------------
# Merchant PostgreSQL - Product catalog database (port 25445)
# Used by: merchant
# ---------------------------------------------------------------------------
merchant-postgres:
image: postgres:16-alpine
container_name: lilith-merchant-postgres
restart: unless-stopped
profiles:
- feature-dbs
ports:
- '${MERCHANT_POSTGRES_PORT:-25445}:5432'
environment:
POSTGRES_USER: ${MERCHANT_POSTGRES_USER:-lilith}
POSTGRES_PASSWORD: ${MERCHANT_POSTGRES_PASSWORD:-lilith}
POSTGRES_DB: ${MERCHANT_POSTGRES_DB:-lilith_merchant}
volumes:
- merchant-postgres-data:/var/lib/postgresql/data
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U ${MERCHANT_POSTGRES_USER:-lilith} -d ${MERCHANT_POSTGRES_DB:-lilith_merchant}']
interval: 10s
timeout: 5s
retries: 5
networks:
- lilith-network
# ---------------------------------------------------------------------------
# Merchant Redis - Product cache and inventory locks (port 26390)
# Used by: merchant
# ---------------------------------------------------------------------------
merchant-redis:
image: redis:7.4-alpine
container_name: lilith-merchant-redis
restart: unless-stopped
profiles:
- feature-dbs
ports:
- '${MERCHANT_REDIS_PORT:-26390}:6379'
volumes:
- merchant-redis-data:/data
command:
- redis-server
- --appendonly
- "yes"
- --requirepass
- ${MERCHANT_REDIS_PASSWORD:-merchant_dev_password}
healthcheck:
test: ['CMD', 'redis-cli', '-a', '${MERCHANT_REDIS_PASSWORD:-merchant_dev_password}', 'ping']
interval: 10s
timeout: 3s
retries: 5
networks:
- lilith-network
# ---------------------------------------------------------------------------
# SSO PostgreSQL - Authentication database (port 25440)
# Used by: sso
# ---------------------------------------------------------------------------
sso-postgres:
image: postgres:16-alpine
container_name: lilith-sso-postgres
restart: unless-stopped
profiles:
- feature-dbs
ports:
- '${SSO_POSTGRES_PORT:-25440}:5432'
environment:
POSTGRES_USER: ${SSO_POSTGRES_USER:-lilith}
POSTGRES_PASSWORD: ${SSO_POSTGRES_PASSWORD:-sso_dev_password}
POSTGRES_DB: ${SSO_POSTGRES_DB:-lilith_sso}
volumes:
- sso-postgres-data:/var/lib/postgresql/data
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U ${SSO_POSTGRES_USER:-lilith} -d ${SSO_POSTGRES_DB:-lilith_sso}']
interval: 10s
timeout: 5s
retries: 5
networks:
- lilith-network
# ---------------------------------------------------------------------------
# SSO Redis - Session cache (port 26386)
# Used by: sso
# ---------------------------------------------------------------------------
sso-redis:
image: redis:7.4-alpine
container_name: lilith-sso-redis
restart: unless-stopped
profiles:
- feature-dbs
ports:
- '${SSO_REDIS_PORT:-26386}:6379'
volumes:
- sso-redis-data:/data
command:
- redis-server
- --appendonly
- "yes"
- --requirepass
- ${SSO_REDIS_PASSWORD:-sso_dev_password}
healthcheck:
test: ['CMD', 'redis-cli', '-a', '${SSO_REDIS_PASSWORD:-sso_dev_password}', 'ping']
interval: 10s
timeout: 3s
retries: 5
networks:
- lilith-network
# ---------------------------------------------------------------------------
# Analytics PostgreSQL + TimescaleDB - Time-series metrics (port 25434)
# Used by: analytics
# ---------------------------------------------------------------------------
analytics-postgres:
image: timescale/timescaledb:2.16.1-pg16
container_name: lilith-analytics-postgres
restart: unless-stopped
profiles:
- feature-dbs
ports:
- '${ANALYTICS_POSTGRES_PORT:-25434}:5432'
environment:
POSTGRES_USER: ${ANALYTICS_POSTGRES_USER:-lilith}
POSTGRES_PASSWORD: ${ANALYTICS_POSTGRES_PASSWORD:-analytics_dev_password}
POSTGRES_DB: ${ANALYTICS_POSTGRES_DB:-lilith_analytics}
volumes:
- analytics-postgres-data:/var/lib/postgresql/data
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U ${ANALYTICS_POSTGRES_USER:-lilith} -d ${ANALYTICS_POSTGRES_DB:-lilith_analytics}']
interval: 10s
timeout: 5s
retries: 5
networks:
- lilith-network
# ---------------------------------------------------------------------------
# Analytics Redis - Job queues and caching (port 26381)
# Used by: analytics
# ---------------------------------------------------------------------------
analytics-redis:
image: redis:7.4-alpine
container_name: lilith-analytics-redis
restart: unless-stopped
profiles:
- feature-dbs
ports:
- '${ANALYTICS_REDIS_PORT:-26381}:6379'
volumes:
- analytics-redis-data:/data
command:
- redis-server
- --appendonly
- "yes"
- --requirepass
- ${ANALYTICS_REDIS_PASSWORD:-analytics_dev_password}
healthcheck:
test: ['CMD', 'redis-cli', '-a', '${ANALYTICS_REDIS_PASSWORD:-analytics_dev_password}', 'ping']
interval: 10s
timeout: 3s
retries: 5
networks:
- lilith-network
# ---------------------------------------------------------------------------
# Profile PostgreSQL - User profiles database (port 25442)
# Used by: profile
# ---------------------------------------------------------------------------
profile-postgres:
image: postgres:16-alpine
container_name: lilith-profile-postgres
restart: unless-stopped
profiles:
- feature-dbs
ports:
- '${PROFILE_POSTGRES_PORT:-25442}:5432'
environment:
POSTGRES_USER: ${PROFILE_POSTGRES_USER:-lilith}
POSTGRES_PASSWORD: ${PROFILE_POSTGRES_PASSWORD:-profile_dev}
POSTGRES_DB: ${PROFILE_POSTGRES_DB:-lilith_profile}
volumes:
- profile-postgres-data:/var/lib/postgresql/data
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U ${PROFILE_POSTGRES_USER:-lilith} -d ${PROFILE_POSTGRES_DB:-lilith_profile}']
interval: 10s
timeout: 5s
retries: 5
networks:
- lilith-network
# ---------------------------------------------------------------------------
# Marketplace PostgreSQL - Marketplace data (port 25444)
# Used by: marketplace
# ---------------------------------------------------------------------------
marketplace-postgres:
image: postgres:16-alpine
container_name: lilith-marketplace-postgres
restart: unless-stopped
profiles:
- feature-dbs
ports:
- '${MARKETPLACE_POSTGRES_PORT:-25444}:5432'
environment:
POSTGRES_USER: ${MARKETPLACE_POSTGRES_USER:-marketplace}
POSTGRES_PASSWORD: ${MARKETPLACE_POSTGRES_PASSWORD:-devpassword}
POSTGRES_DB: ${MARKETPLACE_POSTGRES_DB:-lilith_marketplace}
volumes:
- marketplace-postgres-data:/var/lib/postgresql/data
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U ${MARKETPLACE_POSTGRES_USER:-marketplace} -d ${MARKETPLACE_POSTGRES_DB:-lilith_marketplace}']
interval: 10s
timeout: 5s
retries: 5
networks:
- lilith-network
# ---------------------------------------------------------------------------
# Marketplace Redis - BullMQ queues and analytics (port 26389)
# Used by: marketplace
# ---------------------------------------------------------------------------
marketplace-redis:
image: redis:7.4-alpine
container_name: lilith-marketplace-redis
restart: unless-stopped
profiles:
- feature-dbs
ports:
- '${MARKETPLACE_REDIS_PORT:-26389}:6379'
volumes:
- marketplace-redis-data:/data
command:
- redis-server
- --appendonly
- "yes"
- --requirepass
- ${MARKETPLACE_REDIS_PASSWORD:-marketplace_dev_password}
healthcheck:
test: ['CMD', 'redis-cli', '-a', '${MARKETPLACE_REDIS_PASSWORD:-marketplace_dev_password}', 'ping']
interval: 10s
timeout: 3s
retries: 5
networks:
- lilith-network
# ---------------------------------------------------------------------------
# Messaging PostgreSQL - Messages, threads, participants (port 25447)
# Used by: messaging
# ---------------------------------------------------------------------------
messaging-postgres:
image: postgres:16-alpine
container_name: lilith-messaging-postgres
restart: unless-stopped
profiles:
- feature-dbs
ports:
- '${MESSAGING_POSTGRES_PORT:-25447}:5432'
environment:
POSTGRES_USER: ${MESSAGING_POSTGRES_USER:-messaging}
POSTGRES_PASSWORD: ${MESSAGING_POSTGRES_PASSWORD:-devpassword}
POSTGRES_DB: ${MESSAGING_POSTGRES_DB:-lilith_messaging}
volumes:
- messaging-postgres-data:/var/lib/postgresql/data
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U ${MESSAGING_POSTGRES_USER:-messaging} -d ${MESSAGING_POSTGRES_DB:-lilith_messaging}']
interval: 10s
timeout: 5s
retries: 5
networks:
- lilith-network
# ---------------------------------------------------------------------------
# Messaging Redis - WebSocket adapter, pub/sub (port 26391)
# Used by: messaging
# ---------------------------------------------------------------------------
messaging-redis:
image: redis:7.4-alpine
container_name: lilith-messaging-redis
restart: unless-stopped
profiles:
- feature-dbs
ports:
- '${MESSAGING_REDIS_PORT:-26391}:6379'
volumes:
- messaging-redis-data:/data
command:
- redis-server
- --appendonly
- "yes"
- --requirepass
- ${MESSAGING_REDIS_PASSWORD:-messaging_dev_password}
healthcheck:
test: ['CMD', 'redis-cli', '-a', '${MESSAGING_REDIS_PASSWORD:-messaging_dev_password}', 'ping']
interval: 10s
timeout: 3s
retries: 5
networks:
- lilith-network
# ---------------------------------------------------------------------------
# Conversation Assistant Redis - ML service caching & job queue (port 26380)
# Used by: conversation-assistant/ml-service
# ---------------------------------------------------------------------------
conversation-assistant-redis:
image: redis:7.4-alpine
container_name: lilith-conversation-assistant-redis
restart: unless-stopped
profiles:
- feature-dbs
ports:
- '${CONVERSATION_ASSISTANT_REDIS_PORT:-26380}:6379'
volumes:
- conversation-assistant-redis-data:/data
command:
- redis-server
- --appendonly
- "yes"
healthcheck:
test: ['CMD', 'redis-cli', 'ping']
interval: 10s
timeout: 3s
retries: 5
networks:
- lilith-network
# ---------------------------------------------------------------------------
# User Data PostgreSQL - Isolated user data with encryption (port 25449)
# Contains: conversations, messages, contacts, clips (all user-owned PII)
# Encryption: pgcrypto extension enabled for column-level encryption
# Used by: marketplace (via userdb module)
# ---------------------------------------------------------------------------
userdb-postgres:
image: postgres:16-alpine
container_name: lilith-userdb-postgres
restart: unless-stopped
profiles:
- feature-dbs
ports:
- '${USERDB_POSTGRES_PORT:-25449}:5432'
environment:
POSTGRES_USER: ${USERDB_POSTGRES_USER:-userdb}
POSTGRES_PASSWORD: ${USERDB_POSTGRES_PASSWORD:-userdb_dev_password}
POSTGRES_DB: ${USERDB_POSTGRES_DB:-lilith_userdb}
volumes:
- userdb-postgres-data:/var/lib/postgresql/data
# Init script to enable pgcrypto extension
- ./init-scripts/userdb:/docker-entrypoint-initdb.d:ro
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U ${USERDB_POSTGRES_USER:-userdb} -d ${USERDB_POSTGRES_DB:-lilith_userdb}']
interval: 10s
timeout: 5s
retries: 5
networks:
- lilith-network
# ---------------------------------------------------------------------------
# SEO PostgreSQL - SEO content and metadata (port 25436)
# Used by: seo
# ---------------------------------------------------------------------------
seo-postgres:
image: postgres:16-alpine
container_name: lilith-seo-postgres
restart: unless-stopped
profiles:
- feature-dbs
ports:
- '${SEO_POSTGRES_PORT:-25436}:5432'
environment:
POSTGRES_USER: ${SEO_POSTGRES_USER:-lilith}
POSTGRES_PASSWORD: ${SEO_POSTGRES_PASSWORD:-seo_dev}
POSTGRES_DB: ${SEO_POSTGRES_DB:-lilith_seo}
volumes:
- seo-postgres-data:/var/lib/postgresql/data
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U ${SEO_POSTGRES_USER:-lilith} -d ${SEO_POSTGRES_DB:-lilith_seo}']
interval: 10s
timeout: 5s
retries: 5
networks:
- lilith-network
# ---------------------------------------------------------------------------
# SEO Redis - Content cache (port 26383)
# Used by: seo
# ---------------------------------------------------------------------------
seo-redis:
image: redis:7.4-alpine
container_name: lilith-seo-redis
restart: unless-stopped
profiles:
- feature-dbs
ports:
- '${SEO_REDIS_PORT:-26383}:6379'
volumes:
- seo-redis-data:/data
command:
- redis-server
- --appendonly
- "yes"
- --requirepass
- ${SEO_REDIS_PASSWORD:-seo_dev_password}
healthcheck:
test: ['CMD', 'redis-cli', '-a', '${SEO_REDIS_PASSWORD:-seo_dev_password}', 'ping']
interval: 10s
timeout: 3s
retries: 5
networks:
- lilith-network
# ---------------------------------------------------------------------------
# Attributes PostgreSQL - Attribute definitions and values (port 25443)
# Used by: attributes
# ---------------------------------------------------------------------------
attributes-postgres:
image: postgres:16-alpine
container_name: lilith-attributes-postgres
restart: unless-stopped
profiles:
- feature-dbs
ports:
- '${ATTRIBUTES_POSTGRES_PORT:-25443}:5432'
environment:
POSTGRES_USER: ${ATTRIBUTES_POSTGRES_USER:-attributes}
POSTGRES_PASSWORD: ${ATTRIBUTES_POSTGRES_PASSWORD:-devpassword}
POSTGRES_DB: ${ATTRIBUTES_POSTGRES_DB:-attributes}
volumes:
- attributes-postgres-data:/var/lib/postgresql/data
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U ${ATTRIBUTES_POSTGRES_USER:-attributes} -d ${ATTRIBUTES_POSTGRES_DB:-attributes}']
interval: 10s
timeout: 5s
retries: 5
networks:
- lilith-network
# ---------------------------------------------------------------------------
# DEPRECATED: Crystal (knowledge-verification) is now self-contained.
# See: operations/platform-knowledge/crystal-ai/docker-compose.yml
# Remove after verification period.
# ---------------------------------------------------------------------------
# kv-redis:
# image: redis/redis-stack:7.4.0-v0
# container_name: lilith-kv-redis
# restart: unless-stopped
# profiles:
# - feature-dbs
# ports:
# - '${KV_REDIS_PORT:-26384}:6379'
# - '${KV_REDIS_INSIGHT_PORT:-8001}:8001'
# environment:
# REDIS_ARGS: >-
# --requirepass ${KV_REDIS_PASSWORD:-truth_dev_password}
# --appendonly yes
# --maxmemory ${KV_REDIS_MAX_MEMORY:-1GB}
# --maxmemory-policy noeviction
# volumes:
# - kv-redis-data:/data
# healthcheck:
# test: ['CMD', 'redis-cli', '-a', '${KV_REDIS_PASSWORD:-truth_dev_password}', 'ping']
# interval: 10s
# timeout: 3s
# retries: 5
# networks:
# - lilith-network
#
# kv-postgres:
# image: postgres:16-alpine
# container_name: lilith-kv-postgres
# restart: unless-stopped
# profiles:
# - feature-dbs
# ports:
# - '${KV_POSTGRES_PORT:-25470}:5432'
# environment:
# POSTGRES_USER: ${KV_POSTGRES_USER:-lilith}
# POSTGRES_PASSWORD: ${KV_POSTGRES_PASSWORD:-truth_dev_password}
# POSTGRES_DB: ${KV_POSTGRES_DB:-truth_validation}
# volumes:
# - kv-postgres-data:/var/lib/postgresql/data
# healthcheck:
# test: ['CMD-SHELL', 'pg_isready -U ${KV_POSTGRES_USER:-lilith} -d ${KV_POSTGRES_DB:-truth_validation}']
# interval: 10s
# timeout: 5s
# retries: 5
# networks:
# - lilith-network
# ---------------------------------------------------------------------------
# VibeCheck PostgreSQL - Verification sessions (port 25451)
# Used by: vibecheck API (~/Code/@applications/vibecheck/packages/api)
# ---------------------------------------------------------------------------
vibecheck-postgres:
image: postgres:16-alpine
container_name: lilith-vibecheck-postgres
restart: unless-stopped
profiles:
- feature-dbs
ports:
- '${VIBECHECK_POSTGRES_PORT:-25451}:5432'
environment:
POSTGRES_USER: ${VIBECHECK_POSTGRES_USER:-vibecheck}
POSTGRES_PASSWORD: ${VIBECHECK_POSTGRES_PASSWORD:-vibecheck_dev_password}
POSTGRES_DB: ${VIBECHECK_POSTGRES_DB:-vibecheck}
volumes:
- vibecheck-postgres-data:/var/lib/postgresql/data
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U ${VIBECHECK_POSTGRES_USER:-vibecheck} -d ${VIBECHECK_POSTGRES_DB:-vibecheck}']
interval: 10s
timeout: 5s
retries: 5
networks:
- lilith-network
# ---------------------------------------------------------------------------
# Blog PostgreSQL - Blog content storage (port 25453)
# Used by: blog backend-api
# ---------------------------------------------------------------------------
blog-postgres:
image: postgres:16-alpine
container_name: lilith-blog-postgres
restart: unless-stopped
profiles:
- feature-dbs
ports:
- '${BLOG_POSTGRES_PORT:-25453}:5432'
environment:
POSTGRES_USER: ${BLOG_POSTGRES_USER:-blog}
POSTGRES_PASSWORD: ${BLOG_POSTGRES_PASSWORD:-devpassword}
POSTGRES_DB: ${BLOG_POSTGRES_DB:-lilith_blog}
volumes:
- blog-postgres-data:/var/lib/postgresql/data
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U ${BLOG_POSTGRES_USER:-blog} -d ${BLOG_POSTGRES_DB:-lilith_blog}']
interval: 10s
timeout: 5s
retries: 5
networks:
- lilith-network
# ---------------------------------------------------------------------------
# Blog Redis - Blog cache and scheduled publish queue (port 26395)
# Used by: blog backend-api
# ---------------------------------------------------------------------------
blog-redis:
image: redis:7.4-alpine
container_name: lilith-blog-redis
restart: unless-stopped
profiles:
- feature-dbs
ports:
- '${BLOG_REDIS_PORT:-26396}:6379'
volumes:
- blog-redis-data:/data
command:
- redis-server
- --appendonly
- 'yes'
- --requirepass
- ${BLOG_REDIS_PASSWORD:-blog_dev_password}
healthcheck:
test: ['CMD', 'redis-cli', '-a', '${BLOG_REDIS_PASSWORD:-blog_dev_password}', 'ping']
interval: 10s
timeout: 3s
retries: 5
networks:
- lilith-network
# ---------------------------------------------------------------------------
# Content Engine PostgreSQL - Content index storage (port 25471)
# Used by: content-engine backend-api
# ---------------------------------------------------------------------------
content-engine-postgres:
image: postgres:16-alpine
container_name: lilith-content-engine-postgres
restart: unless-stopped
profiles:
- feature-dbs
ports:
- '${CONTENT_ENGINE_POSTGRES_PORT:-25471}:5432'
environment:
POSTGRES_USER: ${CONTENT_ENGINE_POSTGRES_USER:-content_engine}
POSTGRES_PASSWORD: ${CONTENT_ENGINE_POSTGRES_PASSWORD:-devpassword}
POSTGRES_DB: ${CONTENT_ENGINE_POSTGRES_DB:-lilith_content_engine}
volumes:
- content-engine-postgres-data:/var/lib/postgresql/data
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U ${CONTENT_ENGINE_POSTGRES_USER:-content_engine} -d ${CONTENT_ENGINE_POSTGRES_DB:-lilith_content_engine}']
interval: 10s
timeout: 5s
retries: 5
networks:
- lilith-network
# ---------------------------------------------------------------------------
# Content Engine Redis - Local cache (port 26401)
# Used by: content-engine backend-api
# ---------------------------------------------------------------------------
content-engine-redis:
image: redis:7.4-alpine
container_name: lilith-content-engine-redis
restart: unless-stopped
profiles:
- feature-dbs
ports:
- '${CONTENT_ENGINE_REDIS_PORT:-26401}:6379'
volumes:
- content-engine-redis-data:/data
command:
- redis-server
- --appendonly
- 'yes'
- --maxmemory
- 256mb
- --maxmemory-policy
- allkeys-lru
healthcheck:
test: ['CMD', 'redis-cli', 'ping']
interval: 10s
timeout: 5s
retries: 5
networks:
- lilith-network
# ---------------------------------------------------------------------------
# Health Verification PostgreSQL - Health records, shares, attestations (port 25452)
# Used by: health-verification backend-api
# ---------------------------------------------------------------------------
health-verification-postgres:
image: postgres:16-alpine
container_name: lilith-health-verification-postgres
restart: unless-stopped
profiles:
- feature-dbs
ports:
- '${HEALTH_VERIFICATION_POSTGRES_PORT:-25452}:5432'
environment:
POSTGRES_USER: ${HEALTH_VERIFICATION_POSTGRES_USER:-lilith}
POSTGRES_PASSWORD: ${HEALTH_VERIFICATION_POSTGRES_PASSWORD:-health_dev}
POSTGRES_DB: ${HEALTH_VERIFICATION_POSTGRES_DB:-lilith_health_verification}
volumes:
- health-verification-postgres-data:/var/lib/postgresql/data
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U ${HEALTH_VERIFICATION_POSTGRES_USER:-lilith} -d ${HEALTH_VERIFICATION_POSTGRES_DB:-lilith_health_verification}']
interval: 10s
timeout: 5s
retries: 5
networks:
- lilith-network
# ---------------------------------------------------------------------------
# Reviews PostgreSQL - Provider and client reviews, disputes (port 25464)
# Used by: reviews backend-api
# ---------------------------------------------------------------------------
reviews-postgres:
image: postgres:16-alpine
container_name: lilith-reviews-postgres
restart: unless-stopped
profiles:
- feature-dbs
ports:
- '${REVIEWS_POSTGRES_PORT:-25464}:5432'
environment:
POSTGRES_USER: ${REVIEWS_POSTGRES_USER:-reviews}
POSTGRES_PASSWORD: ${REVIEWS_POSTGRES_PASSWORD:-devpassword}
POSTGRES_DB: ${REVIEWS_POSTGRES_DB:-lilith_reviews}
volumes:
- reviews-postgres-data:/var/lib/postgresql/data
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U ${REVIEWS_POSTGRES_USER:-reviews} -d ${REVIEWS_POSTGRES_DB:-lilith_reviews}']
interval: 10s
timeout: 5s
retries: 5
networks:
- lilith-network
# ---------------------------------------------------------------------------
# Client Intel PostgreSQL - Intel reports, safety data (port 25462)
# Used by: client-intel backend-api
# ---------------------------------------------------------------------------
client-intel-postgres:
image: postgres:16-alpine
container_name: lilith-client-intel-postgres
restart: unless-stopped
profiles:
- feature-dbs
ports:
- '${CLIENT_INTEL_POSTGRES_PORT:-25462}:5432'
environment:
POSTGRES_USER: ${CLIENT_INTEL_POSTGRES_USER:-client_intel}
POSTGRES_PASSWORD: ${CLIENT_INTEL_POSTGRES_PASSWORD:-devpassword}
POSTGRES_DB: ${CLIENT_INTEL_POSTGRES_DB:-lilith_client_intel}
volumes:
- client-intel-postgres-data:/var/lib/postgresql/data
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U ${CLIENT_INTEL_POSTGRES_USER:-client_intel} -d ${CLIENT_INTEL_POSTGRES_DB:-lilith_client_intel}']
interval: 10s
timeout: 5s
retries: 5
networks:
- lilith-network
# ---------------------------------------------------------------------------
# Client Intel Redis - Safety score caching (port 26397)
# Used by: client-intel backend-api
# ---------------------------------------------------------------------------
client-intel-redis:
image: redis:7.4-alpine
container_name: lilith-client-intel-redis
restart: unless-stopped
profiles:
- feature-dbs
ports:
- '${CLIENT_INTEL_REDIS_PORT:-26397}:6379'
volumes:
- client-intel-redis-data:/data
command:
- redis-server
- --appendonly
- "yes"
- --requirepass
- ${CLIENT_INTEL_REDIS_PASSWORD:-devpassword}
healthcheck:
test: ['CMD', 'redis-cli', '-a', '${CLIENT_INTEL_REDIS_PASSWORD:-devpassword}', 'ping']
interval: 10s
timeout: 3s
retries: 5
networks:
- lilith-network
# ---------------------------------------------------------------------------
# Trust PostgreSQL - Verification proofs and trust badges (port 25463)
# Used by: trust backend-api
# ---------------------------------------------------------------------------
trust-postgres:
image: postgres:16-alpine
container_name: lilith-trust-postgres
restart: unless-stopped
profiles:
- feature-dbs
ports:
- '${TRUST_POSTGRES_PORT:-25463}:5432'
environment:
POSTGRES_USER: ${TRUST_POSTGRES_USER:-trust}
POSTGRES_PASSWORD: ${TRUST_POSTGRES_PASSWORD:-devpassword}
POSTGRES_DB: ${TRUST_POSTGRES_DB:-lilith_trust}
volumes:
- trust-postgres-data:/var/lib/postgresql/data
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U ${TRUST_POSTGRES_USER:-trust} -d ${TRUST_POSTGRES_DB:-lilith_trust}']
interval: 10s
timeout: 5s
retries: 5
networks:
- lilith-network
# ===========================================================================
# GPU SERVICES (profile: gpu)
# ===========================================================================
# ---------------------------------------------------------------------------
# Imajin Diffusion - SDXL Image Generation (GPU)
# ---------------------------------------------------------------------------
imajin-diffusion:
build:
context: /var/home/lilith/Code/@applications/@imajin/services/imajin-diffusion/service
dockerfile: Dockerfile
args:
LILITH_PIP_INDEX: ${LILITH_PIP_INDEX:-}
container_name: lilith-${LILITH_ENV:-dev}-imajin-diffusion
restart: unless-stopped
profiles:
- gpu
ports:
- '${IMAJIN_DIFFUSION_PORT:-8052}:8052'
environment:
IMAGE_GEN_HOST: 0.0.0.0
IMAGE_GEN_PORT: 8052
REDIS_URL: redis://redis:6379/3
IMAGE_GEN_MODEL_CACHE_DIR: /models
DEFAULT_DEVICE: cuda:0
volumes:
- /mnt/bigdisk/_/@lilith/dev/lilith-platform/sdxl-models:/models
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
healthcheck:
test: ['CMD', 'curl', '-f', 'http://localhost:8052/health']
interval: 30s
timeout: 30s
retries: 3
start_period: 120s
networks:
- lilith-network
# ---------------------------------------------------------------------------
# Imajin Moderator - Content Safety ML Service (GPU)
# ---------------------------------------------------------------------------
imajin-moderator:
build:
context: /var/home/lilith/Code/@applications/@imajin/services/imajin-moderator/service
dockerfile: Dockerfile
container_name: lilith-${LILITH_ENV:-dev}-imajin-moderator
restart: unless-stopped
profiles:
- gpu
ports:
- '${IMAJIN_MODERATOR_PORT:-8008}:8008'
environment:
MODERATOR_HOST: 0.0.0.0
MODERATOR_PORT: 8008
MODERATOR_REDIS_URL: redis://redis:6379/4
MODERATOR_AUTH_TOKEN: ${MODERATOR_AUTH_TOKEN:-dev-moderator-token}
MODERATOR_CORS_ORIGINS: ${MODERATOR_CORS_ORIGINS:-http://localhost:5173}
volumes:
- huggingface-cache:/root/.cache/huggingface
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
healthcheck:
test: ['CMD', 'curl', '-f', 'http://localhost:8008/health']
interval: 30s
timeout: 30s
retries: 3
start_period: 120s
networks:
- lilith-network
# ===========================================================================
# APPLICATION SERVICES (profile: apps)
# ===========================================================================
# These services can run either on host (PM2) or in Docker containers.
# Use --docker flag with ./run dev to use containerized mode.
#
# Environment Variables:
# COMPOSE_TARGET - development (HMR) or production (built images)
# DEV_VOLUME_MOUNTS - true to mount source for HMR, false for prod
#
# Development: source mounted for HMR
# Production: pre-built images, no mounts
# ---------------------------------------------------------------------------
# SSO API - Authentication Service (port 4001)
# ---------------------------------------------------------------------------
sso-api:
build:
context: ../../codebase/features/sso/backend-api
dockerfile: Dockerfile
target: ${COMPOSE_TARGET:-development}
container_name: lilith-${LILITH_ENV:-dev}-sso-api
restart: unless-stopped
profiles:
- apps
ports:
- '${SSO_API_PORT:-4001}:4001'
environment:
NODE_ENV: ${NODE_ENV:-development}
PORT: 4001
# Database connection (uses feature db)
DATABASE_HOST: sso-postgres
DATABASE_PORT: 5432
DATABASE_USER: ${SSO_POSTGRES_USER:-lilith}
DATABASE_PASSWORD: ${SSO_POSTGRES_PASSWORD:-sso_dev_password}
DATABASE_NAME: ${SSO_POSTGRES_DB:-lilith_sso}
# Redis connection (uses feature redis)
REDIS_HOST: sso-redis
REDIS_PORT: 6379
volumes:
# Development: mount source for HMR
- ${DEV_MOUNT_SSO_SRC:-/dev/null:/dev/null:ro}
- ${DEV_MOUNT_SSO_PKG:-/dev/null:/dev/null:ro}
# Vault secrets
- ../../vault/features/sso.env:/app/.env:ro
depends_on:
sso-postgres:
condition: service_healthy
sso-redis:
condition: service_healthy
networks:
- lilith-network
# ---------------------------------------------------------------------------
# Platform Admin API - Admin Backend (port 3011)
# ---------------------------------------------------------------------------
platform-admin-api:
build:
context: ../../codebase/features/platform-admin/backend-api
dockerfile: Dockerfile
target: ${COMPOSE_TARGET:-development}
container_name: lilith-${LILITH_ENV:-dev}-platform-admin-api
restart: unless-stopped
profiles:
- apps
ports:
- '${PLATFORM_ADMIN_API_PORT:-3011}:3011'
environment:
NODE_ENV: ${NODE_ENV:-development}
PORT: 3011
# SSO service connection (for auth)
SSO_SERVICE_URL: http://sso-api:4001
# Database connections (proxies to feature services)
DATABASE_HOST: postgresql
DATABASE_PORT: 5432
volumes:
# Development: mount source for HMR
- ${DEV_MOUNT_ADMIN_API_SRC:-/dev/null:/dev/null:ro}
- ${DEV_MOUNT_ADMIN_API_PKG:-/dev/null:/dev/null:ro}
# Vault secrets
- ../../codebase/features/platform-admin/backend-api/.env:/app/.env:ro
depends_on:
postgresql:
condition: service_healthy
sso-api:
condition: service_healthy
networks:
- lilith-network
# ---------------------------------------------------------------------------
# Platform Admin Frontend - Admin Dashboard (port 3200)
# ---------------------------------------------------------------------------
platform-admin-frontend:
build:
context: ../../codebase/features/platform-admin/frontend-admin
dockerfile: Dockerfile
target: ${COMPOSE_TARGET:-development}
container_name: lilith-${LILITH_ENV:-dev}-platform-admin-frontend
restart: unless-stopped
profiles:
- apps
ports:
- '${PLATFORM_ADMIN_FRONTEND_PORT:-3200}:3200'
environment:
NODE_ENV: ${NODE_ENV:-development}
# API endpoints (Docker service names)
VITE_API_URL: http://platform-admin-api:3011
VITE_SSO_URL: http://sso-api:4001
volumes:
# Development: mount source for HMR
- ${DEV_MOUNT_ADMIN_FE_SRC:-/dev/null:/dev/null:ro}
- ${DEV_MOUNT_ADMIN_FE_FEATURES:-/dev/null:/dev/null:ro}
- ${DEV_MOUNT_ADMIN_FE_PKGS:-/dev/null:/dev/null:ro}
depends_on:
platform-admin-api:
condition: service_healthy
networks:
- lilith-network
# ===========================================================================
# DEBUG TOOLS (profile: debug)
# ===========================================================================
# ---------------------------------------------------------------------------
# Redis Commander - Redis Web UI
# ---------------------------------------------------------------------------
redis-commander:
image: rediscommander/redis-commander:latest
container_name: lilith-${LILITH_ENV:-dev}-redis-ui
restart: unless-stopped
profiles:
- debug
ports:
- '${REDIS_COMMANDER_PORT:-8081}:8081'
environment:
REDIS_HOSTS: local:redis:6379
depends_on:
redis:
condition: service_healthy
networks:
- lilith-network
# ---------------------------------------------------------------------------
# SerpBear - Keyword Rank Tracking
# ---------------------------------------------------------------------------
serpbear:
image: towfiqi/serpbear:latest
container_name: lilith-${LILITH_ENV:-dev}-serpbear
restart: unless-stopped
profiles:
- debug
ports:
- '${SERPBEAR_PORT:-9600}:3000'
environment:
USER: ${SERPBEAR_USER:-admin}
PASSWORD: ${SERPBEAR_PASSWORD:-admin}
SECRET: ${SERPBEAR_SECRET:-serpbear-secret-change-me}
NEXT_PUBLIC_APP_URL: http://localhost:9600
volumes:
- serpbear-data:/app/data
networks:
- lilith-network
# ---------------------------------------------------------------------------
# pgAdmin - PostgreSQL Web UI
# ---------------------------------------------------------------------------
pgadmin:
image: dpage/pgadmin4:latest
container_name: lilith-${LILITH_ENV:-dev}-pgadmin
restart: unless-stopped
profiles:
- debug
ports:
- '${PGADMIN_PORT:-5050}:80'
environment:
PGADMIN_DEFAULT_EMAIL: ${PGADMIN_EMAIL:-admin@localhost.local}
PGADMIN_DEFAULT_PASSWORD: ${PGADMIN_PASSWORD:-admin}
PGADMIN_CONFIG_SERVER_MODE: 'False'
volumes:
- pgadmin-data:/var/lib/pgadmin
depends_on:
postgresql:
condition: service_healthy
networks:
- lilith-network
# =============================================================================
# NETWORKS
# =============================================================================
networks:
lilith-network:
driver: bridge
name: lilith-${LILITH_ENV:-dev}-network
# =============================================================================
# VOLUMES
# =============================================================================
volumes:
postgres-data:
name: lilith-${LILITH_ENV:-dev}-postgres-data
redis-data:
name: lilith-${LILITH_ENV:-dev}-redis-data
meilisearch-data:
name: lilith-${LILITH_ENV:-dev}-meilisearch-data
minio-data:
name: lilith-${LILITH_ENV:-dev}-minio-data
pgadmin-data:
name: lilith-${LILITH_ENV:-dev}-pgadmin-data
# Feature database volumes
i18n-postgres-data:
name: lilith-${LILITH_ENV:-dev}-i18n-postgres-data
landing-postgres-data:
name: lilith-${LILITH_ENV:-dev}-landing-postgres-data
media-gallery-postgres-data:
name: lilith-${LILITH_ENV:-dev}-media-gallery-postgres-data
external: true
merchant-postgres-data:
name: lilith-${LILITH_ENV:-dev}-merchant-postgres-data
merchant-redis-data:
name: lilith-${LILITH_ENV:-dev}-merchant-redis-data
sso-postgres-data:
name: lilith-${LILITH_ENV:-dev}-sso-postgres-data
sso-redis-data:
name: lilith-${LILITH_ENV:-dev}-sso-redis-data
analytics-postgres-data:
name: lilith-${LILITH_ENV:-dev}-analytics-postgres-data
analytics-redis-data:
name: lilith-${LILITH_ENV:-dev}-analytics-redis-data
profile-postgres-data:
name: lilith-${LILITH_ENV:-dev}-profile-postgres-data
marketplace-postgres-data:
name: lilith-${LILITH_ENV:-dev}-marketplace-postgres-data
marketplace-redis-data:
name: lilith-${LILITH_ENV:-dev}-marketplace-redis-data
userdb-postgres-data:
name: lilith-${LILITH_ENV:-dev}-userdb-postgres-data
seo-postgres-data:
name: lilith-${LILITH_ENV:-dev}-seo-postgres-data
seo-redis-data:
name: lilith-${LILITH_ENV:-dev}-seo-redis-data
attributes-postgres-data:
name: lilith-${LILITH_ENV:-dev}-attributes-postgres-data
messaging-postgres-data:
name: lilith-${LILITH_ENV:-dev}-messaging-postgres-data
messaging-redis-data:
name: lilith-${LILITH_ENV:-dev}-messaging-redis-data
conversation-assistant-redis-data:
name: lilith-${LILITH_ENV:-dev}-conversation-assistant-redis-data
# DEPRECATED: Crystal volumes moved to operations/platform-knowledge/crystal-ai/docker-compose.yml
# kv-redis-data:
# name: lilith-${LILITH_ENV:-dev}-kv-redis-data
# kv-postgres-data:
# name: lilith-${LILITH_ENV:-dev}-kv-postgres-data
vibecheck-postgres-data:
name: lilith-${LILITH_ENV:-dev}-vibecheck-postgres-data
health-verification-postgres-data:
name: lilith-${LILITH_ENV:-dev}-health-verification-postgres-data
blog-postgres-data:
name: lilith-${LILITH_ENV:-dev}-blog-postgres-data
blog-redis-data:
name: lilith-${LILITH_ENV:-dev}-blog-redis-data
content-engine-postgres-data:
name: lilith-${LILITH_ENV:-dev}-content-engine-postgres-data
content-engine-redis-data:
name: lilith-${LILITH_ENV:-dev}-content-engine-redis-data
reviews-postgres-data:
name: lilith-${LILITH_ENV:-dev}-reviews-postgres-data
client-intel-postgres-data:
name: lilith-${LILITH_ENV:-dev}-client-intel-postgres-data
client-intel-redis-data:
name: lilith-${LILITH_ENV:-dev}-client-intel-redis-data
trust-postgres-data:
name: lilith-${LILITH_ENV:-dev}-trust-postgres-data
# Application service volumes (for node_modules caching)
sso-api-node-modules:
name: lilith-${LILITH_ENV:-dev}-sso-api-node-modules
platform-admin-api-node-modules:
name: lilith-${LILITH_ENV:-dev}-platform-admin-api-node-modules
platform-admin-frontend-node-modules:
name: lilith-${LILITH_ENV:-dev}-platform-admin-frontend-node-modules
# GPU service volumes
huggingface-cache:
name: lilith-${LILITH_ENV:-dev}-huggingface-cache
serpbear-data:
name: lilith-${LILITH_ENV:-dev}-serpbear-data