Changelog
v2.1.0 — All-in-One Docker Image
✨ New Features
- All-in-One Docker Image: Deploy TrackWatch with a single
docker runcommand. One container includes PostgreSQL, Nginx, Django, and the background scheduler — managed by supervisord. - Pre-built Images: Available on GHCR and Docker Hub. No cloning or building required.
- Runtime Environment Injection: Pre-built images can be fully configured at startup via environment variables — no need to rebuild for different Spotify credentials or domains.
- Automated Publishing: GitHub Actions workflow builds and publishes the AiO image on every semver tag (e.g.
2.1.0) to both GHCR and Docker Hub. - Configurable Email Domain: Self-hosters can now set
EMAIL_DOMAINto use their own Resend-verified domain for email notifications. - Updated Install Page: The frontend
/installpage now features an AiO tab with copy-pastedocker runcommands for both GHCR and Docker Hub.
🔧 Improvements
- Background Processing: New releases update now runs in a background thread to prevent Gunicorn worker timeout.
- Hide Login Button: New
VITE_HIDE_PUBLIC_LOGINenvironment variable to hide the login button for public instance. - Dependency Updates: Django 5.2.11, react-router-dom 7.
📦 Quick Start
docker run -d \
--name trackwatch \
-e SPOTIFY_CLIENT_ID=your-client-id \
-e SPOTIFY_CLIENT_SECRET=your-client-secret \
-e SECRET_KEY=your-secret-key \
-v trackwatch_data:/var/lib/postgresql/data \
-p 80:80 \
--restart unless-stopped \
ghcr.io/emlopezr/trackwatch:latestOpen http://127.0.0.1 and you're done.
For the full setup guide, see docs/DOCKER_AIO_SETUP.md.
⚠️ No Breaking Changes
The existing docker-compose.yml multi-container setup continues to work exactly as before. The AiO image is a new deployment option, not a replacement.