version: "3.9" services: playout: build: context: ./backend/playout dockerfile: Dockerfile container_name: linearvoid-playout restart: unless-stopped env_file: - .env volumes: - ./data/playlist:/app/playlist:ro - ./data/media:/app/media:ro - ./data/hls:/app/hls:rw networks: - linearvoid-net depends_on: - redis healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8081/health"] interval: 10s timeout: 5s retries: 5 start_period: 10s chat: build: context: ./backend/chat dockerfile: Dockerfile container_name: linearvoid-chat restart: unless-stopped env_file: - .env ports: - "${CHAT_PORT:-3000}:3000" volumes: - ./data/chat:/app:rw # SQLite database and logs networks: - linearvoid-net depends_on: - redis - db healthcheck: test: ["CMD", "curl", "-f", "http://localhost:3000/health"] interval: 10s timeout: 5s retries: 5 start_period: 10s nginx: build: context: ./infrastructure/nginx dockerfile: Dockerfile container_name: linearvoid-nginx restart: unless-stopped ports: - "${NGINX_PORT:-8080}:80" volumes: - ./frontend/dist:/usr/share/nginx/html:ro - ./data/hls:/usr/share/nginx/html/hls:ro networks: - linearvoid-net depends_on: - playout - chat redis: image: redis:7-alpine container_name: linearvoid-redis restart: unless-stopped command: redis-server --appendonly yes volumes: - redis-data:/data networks: - linearvoid-net db: image: postgres:15-alpine container_name: linearvoid-db restart: unless-stopped environment: POSTGRES_DB: linearvoid POSTGRES_USER: linearvoid POSTGRES_PASSWORD: linearvoid volumes: - postgres-data:/var/lib/postgresql/data networks: - linearvoid-net networks: linearvoid-net: driver: bridge volumes: redis-data: postgres-data: