services: postgres: image: postgres:18 container_name: synctv-postgres-dev environment: POSTGRES_USER: synctv POSTGRES_PASSWORD: synctv POSTGRES_DB: synctv ports: - "5432:5432" volumes: - postgres18_dev_data:/var/lib/postgresql healthcheck: test: ["CMD-SHELL", "pg_isready -U synctv"] interval: 5s timeout: 5s retries: 5 start_period: 30s networks: - synctv-dev restart: unless-stopped redis: image: redis:8 container_name: synctv-redis-dev ports: - "6379:6379" volumes: - redis_dev_data:/data command: redis-server --appendonly yes healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 5s timeout: 3s retries: 5 networks: - synctv-dev restart: unless-stopped synctv: build: context: . dockerfile: Dockerfile container_name: synctv-app-dev ports: - "8080:8080" - "1935:1935" - "3478:3478/udp" environment: SYNCTV_DATABASE_URL: postgresql://synctv:synctv@postgres:5432/synctv SYNCTV_REDIS_URL: redis://redis:6379 SYNCTV_DATA_DIR: /data SYNCTV_SERVER_HOST: 0.0.0.0 SYNCTV_SERVER_PORT: 8080 SYNCTV_JWT_SECRET: dev-jwt-secret-please-change-in-production-1234567890 SYNCTV_SERVER_CLUSTER_SECRET: dev-cluster-secret-please-change-in-production-1234567890 SYNCTV_SECURITY_CREDENTIAL_ENCRYPTION_KEY: "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f" SYNCTV_SECURITY_OPAQUE_SERVER_SETUP_SECRET: dev-opaque-server-setup-secret-please-change-1234567890 SYNCTV_BOOTSTRAP_CREATE_ROOT_USER: "true" SYNCTV_BOOTSTRAP_ROOT_PASSWORD: DevRootPass12345 SYNCTV_LOGGING_LEVEL: debug depends_on: postgres: condition: service_healthy redis: condition: service_healthy networks: - synctv-dev volumes: - synctv_dev_data:/data restart: unless-stopped healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8080/health/ready"] interval: 30s timeout: 3s start_period: 40s retries: 3 volumes: postgres18_dev_data: driver: local redis_dev_data: driver: local synctv_dev_data: driver: local networks: synctv-dev: driver: bridge