platform-codebase/infrastructure/docker/docker-compose.dev.yml

192 lines
6.2 KiB
YAML
Raw Normal View History

version: '3.8'
services:
# =============================================================================
# PRIMARY DATABASE: PostgreSQL 16 with TimescaleDB Extension
# =============================================================================
# TimescaleDB provides time-series optimizations for analytics tables
# All existing PostgreSQL functionality remains unchanged
postgres:
image: timescale/timescaledb:latest-pg16
container_name: lilith-platform-postgres
restart: unless-stopped
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: lilith_dev
ports:
- '5432:5432'
volumes:
- postgres-data:/var/lib/postgresql/data
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U postgres']
interval: 10s
timeout: 5s
retries: 5
# =============================================================================
# CACHE & QUEUES: Redis 7
# =============================================================================
# Used for: Sessions, caching, rate limiting, BullMQ job queues, pub/sub
redis:
image: redis:7-alpine
container_name: lilith-platform-redis
restart: unless-stopped
ports:
- '6379:6379'
volumes:
- redis-data:/data
healthcheck:
test: ['CMD', 'redis-cli', 'ping']
interval: 10s
timeout: 3s
retries: 5
# =============================================================================
# SEARCH: Meilisearch
# =============================================================================
# Full-text search engine for profile discovery, content search
# Features: Typo tolerance, faceted filtering, geo search, sub-50ms responses
meilisearch:
image: getmeili/meilisearch:v1.6
container_name: lilith-platform-meilisearch
restart: unless-stopped
ports:
- '7700:7700'
environment:
MEILI_MASTER_KEY: 'development-master-key-change-in-prod'
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
# =============================================================================
# OBJECT STORAGE: MinIO (S3-compatible)
# =============================================================================
# Used for: Media uploads, watermarked content, creator assets, backups
# S3-compatible API - same code works with AWS S3 in production if needed
minio:
image: minio/minio:latest
container_name: lilith-platform-minio
restart: unless-stopped
ports:
- '9000:9000' # S3 API
- '9001:9001' # Web Console
environment:
MINIO_ROOT_USER: minioadmin
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
# =============================================================================
# FORENSIC WATERMARKING: MediaML Privacy Service
# =============================================================================
mediaml-service:
build:
context: ../../services/mediaml-privacy-python
dockerfile: Dockerfile
container_name: lilith-platform-mediaml
restart: unless-stopped
ports:
- '8000:8000'
environment:
- PYTHONUNBUFFERED=1
healthcheck:
test: ['CMD', 'curl', '-f', 'http://localhost:8000/health']
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
# =============================================================================
# SERVICE REGISTRY: Dynamic Service Discovery
# =============================================================================
# Central registry for all services - enables dynamic discovery and health monitoring
service-registry:
build:
context: ../..
dockerfile: infrastructure/service-registry/Dockerfile
container_name: lilith-service-registry
restart: unless-stopped
ports:
- '31700:31700'
environment:
NODE_ENV: development
PORT: 31700
REDIS_HOST: redis
REDIS_PORT: 6379
SERVICE_REGISTRY_API_KEYS: dev-api-key
SERVICE_REGISTRY_ADMIN_KEY: dev-admin-key
SERVICE_REGISTRY_WS_TOKENS: dev-ws-token
ALLOWED_ORIGINS: http://localhost:3000,http://localhost:5173,http://localhost:31700
depends_on:
redis:
condition: service_healthy
healthcheck:
test: ['CMD', 'node', '-e', "require('http').get('http://localhost:31700/health', (r) => process.exit(r.statusCode === 200 ? 0 : 1))"]
interval: 30s
timeout: 5s
retries: 3
start_period: 10s
# =============================================================================
# DRIVE MICROSERVICE: Storage & MEGDrive API
# =============================================================================
# Handles file uploads, image blurring, and MEGDrive forensic protection
# Extracted from monolithic platform-service for scalability
drive-service:
build:
context: ../..
dockerfile: services/drive/Dockerfile
container_name: lilith-platform-drive
restart: unless-stopped
ports:
- '3002:3002'
environment:
NODE_ENV: development
PORT: 3002
DATABASE_HOST: postgres
DATABASE_PORT: 5432
DATABASE_NAME: lilith_dev
DATABASE_USER: postgres
DATABASE_PASSWORD: postgres
REDIS_HOST: redis
REDIS_PORT: 6379
JWT_SECRET: dev-secret-key
MINIO_ENDPOINT: minio
MINIO_PORT: 9000
MINIO_ACCESS_KEY: minioadmin
MINIO_SECRET_KEY: minioadmin123
MINIO_USE_SSL: 'false'
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
minio:
condition: service_healthy
healthcheck:
test: ['CMD', 'node', '-e', 'require("http").get("http://localhost:3002/health", (r) => process.exit(r.statusCode === 200 ? 0 : 1))']
interval: 30s
timeout: 5s
retries: 3
start_period: 10s
volumes:
postgres-data:
redis-data:
meilisearch-data:
minio-data: