services: melodia-chart: build: . restart: unless-stopped expose: - "3000" volumes: - melodia_data:/data environment: NODE_ENV: production PORT: 3000 APP_URL: ${APP_URL:?Set APP_URL to https://chart.melodia.top} DATABASE_PATH: /data/melodia.db JWT_SECRET: ${JWT_SECRET:?Set a random secret of at least 32 characters} GOOGLE_CLIENT_ID: ${GOOGLE_CLIENT_ID:-} GOOGLE_CLIENT_SECRET: ${GOOGLE_CLIENT_SECRET:-} SPOTIFY_CLIENT_ID: ${SPOTIFY_CLIENT_ID:-} SPOTIFY_CLIENT_SECRET: ${SPOTIFY_CLIENT_SECRET:-} ADMIN_USERNAME: ${ADMIN_USERNAME:-} ADMIN_PASSWORD: ${ADMIN_PASSWORD:-} healthcheck: test: ["CMD", "node", "-e", "fetch('http://127.0.0.1:3000/health').then(r => { if (!r.ok) process.exit(1) }).catch(() => process.exit(1))"] interval: 30s timeout: 5s retries: 3 start_period: 20s volumes: melodia_data: