version: '3.8' services: timescaledb: image: timescale/timescaledb:latest-pg15 container_name: market_data_timescaledb restart: unless-stopped environment: POSTGRES_DB: market_data POSTGRES_USER: market_user POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-market_data_secure_pass_2024} POSTGRES_INITDB_ARGS: "--encoding=UTF-8 --lc-collate=C --lc-ctype=C" # TimescaleDB specific settings TIMESCALEDB_TELEMETRY: 'off' ports: - "5432:5432" volumes: - timescale_data:/var/lib/postgresql/data - ./init-scripts:/docker-entrypoint-initdb.d command: > postgres -c shared_preload_libraries=timescaledb -c max_connections=200 -c shared_buffers=256MB -c effective_cache_size=1GB -c maintenance_work_mem=64MB -c checkpoint_completion_target=0.9 -c wal_buffers=16MB -c default_statistics_target=100 -c random_page_cost=1.1 -c effective_io_concurrency=200 -c work_mem=4MB -c min_wal_size=1GB -c max_wal_size=4GB -c max_worker_processes=8 -c max_parallel_workers_per_gather=4 -c max_parallel_workers=8 -c max_parallel_maintenance_workers=4 healthcheck: test: ["CMD-SHELL", "pg_isready -U market_user -d market_data"] interval: 30s timeout: 10s retries: 3 start_period: 60s networks: - market_data_network redis: image: redis:7-alpine container_name: market_data_redis restart: unless-stopped ports: - "6379:6379" volumes: - redis_data:/data - ./redis.conf:/usr/local/etc/redis/redis.conf command: redis-server /usr/local/etc/redis/redis.conf healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 30s timeout: 10s retries: 3 start_period: 30s networks: - market_data_network volumes: timescale_data: driver: local redis_data: driver: local networks: market_data_network: driver: bridge ipam: config: - subnet: 172.20.0.0/16