3.3 KiB
Docker & Deployment
Overview
Trackpull is fully containerized with Docker. The docker-compose.yml handles all volume mounts and environment configuration. A single docker compose up -d --build is enough to get a running instance.
Quick Start
cp .env.example .env
# Edit .env: set ADMIN_USERNAME, ADMIN_PASSWORD, SECRET_KEY, and PORT
docker compose up -d --build
The app will be available at http://localhost:{PORT} (default: 5000).
Environment Variables
All configuration goes in .env. Copy .env.example to get started.
| Variable | Default | Description |
|---|---|---|
ADMIN_USERNAME |
— | Username for the seeded admin account |
ADMIN_PASSWORD |
— | Password for the seeded admin account |
SECRET_KEY |
— | Flask session key; use a 32-byte random hex string |
PORT |
5000 |
Host port the app is exposed on |
HOST_DOWNLOADS_DIR |
./downloads |
Host path for downloaded files |
HOST_CONFIG_DIR |
./config |
Host path for DB, cookies, device cert |
DOWNLOADS_DIR |
/downloads |
Container-internal downloads path (rarely changed) |
COOKIES_PATH |
/config/cookies.txt |
Path to Spotify cookies file inside the container |
CONFIG_DIR |
/config |
Config directory inside the container |
WVD_PATH |
/config/device.wvd |
Path to Widevine device certificate inside the container |
Important
:
SECRET_KEYmust be a stable secret. Changing it invalidates all active sessions.
Volumes
Host path (from .env) |
Container path | Contents |
|---|---|---|
HOST_DOWNLOADS_DIR |
/downloads |
Per-user download directories |
HOST_CONFIG_DIR |
/config |
SQLite DB, cookies.txt, device.wvd |
Both directories are created automatically by Docker if they don't exist.
Dockerfile Summary
Base image: python:3.12-slim
System packages installed:
ffmpeg— audio conversionaria2— download managergit,curl,unzip— tooling
Binaries installed:
- Bento4
mp4decrypt— MP4 DRM decryption (version 1.6.0-641, downloaded from bok.net)
Python packages:
- From
requirements.txt: Flask, gunicorn, mutagen, werkzeug, etc. websocket-client— WebSocket supportvotify-fix— Spotify downloader (installed from GitHub: GladistonXD/votify-fix)
Runtime command:
gunicorn --bind 0.0.0.0:5000 --workers 1 --threads 4 app:app
One worker with four threads keeps SQLite contention low while still handling concurrent requests.
Persistent Data
| File | Created by | Purpose |
|---|---|---|
/config/trackpull.db |
App on first run | All users, jobs, settings |
/config/cookies.txt |
Admin upload | Spotify auth for Votify |
/config/device.wvd |
Admin upload | Widevine cert for Votify |
Back up /config/ to preserve all user data between rebuilds.
Updating
docker compose down
docker compose up -d --build
The database and config files persist on the host, so user data survives rebuilds.
Key Files
| File | Relevance |
|---|---|
| Dockerfile | Container image definition |
| docker-compose.yml | Service orchestration |
| .env.example | Environment template |
| requirements.txt | Python dependencies |