Self-Hosting Yamtrack with Docker and Caddy
Yamtrack is an open-source media tracker for movies, TV shows, anime, and games. This guide covers setting it up on your own server using Docker Compose and Caddy as a reverse proxy.
Prerequisites
- A Linux server with Docker and Docker Compose installed
- A domain name pointed at your server (this guide uses
play.example.com) - Caddy installed
Step 1 — Create the Docker Compose file
Create a folder for Yamtrack and open a new compose file:
mkdir docker/yamtrack
cd docker/yamtrack
nano docker-compose.yml
Paste in the following. You will fill in the empty values in later steps.
services:
yamtrack:
container_name: yamtrack
image: ghcr.io/fuzzygrim/yamtrack:latest
restart: unless-stopped
depends_on:
- redis
environment:
- URLS=https://play.example.com
- TZ=Asia/Seoul
- SECRET=
- REDIS_URL=redis://redis:6379
- TMDB_API=
- MAL_API=
- IGDB_ID=
- IGDB_SECRET=
volumes:
- ./db:/yamtrack/db
ports:
- "15055:8000"
redis:
container_name: yamtrack-redis
image: redis:8-alpine
restart: unless-stopped
volumes:
- redis_data:/data
volumes:
redis_data:
Change TZ=Asia/Seoul to your timezone. A full list of valid timezone names is at php.net/manual/en/timezones.php.
Step 2 — Generate a secret key
Run this command to generate a random secret:
openssl rand -hex 32
It outputs a 64-character string. Copy it and paste it into the SECRET field in docker-compose.yml:
- SECRET=your64characterstringhere
Step 3 — Set up Caddy
Open your Caddyfile:
sudo nano /etc/caddy/Caddyfile
Add this block, replacing the domain with your own:
play.example.com {
reverse_proxy localhost:15055
}
Caddy will handle HTTPS automatically. Reload Caddy to apply the change.
Step 4 — Start Yamtrack and create your account
Start the containers:
docker compose up -d
Go to your domain in a browser and create an account. Once done, open docker-compose.yml and add REGISTRATION=False to disable new signups:
environment:
- URLS=https://play.example.com
- REGISTRATION=False
Step 5 — Get API keys
Yamtrack uses three external APIs to fetch metadata like posters and descriptions. All three are free and do not require a credit card.
| Service | Used for | Compose variable |
|---|---|---|
| TMDB | Movies & TV shows | TMDB_API |
| MyAnimeList | Anime | MAL_API |
| Twitch | Games | IGDB_ID, IGDB_SECRET |
TMDB
- Log in at themoviedb.org.
- Click your profile icon and go to API.
- Create a new API key. You will see two credentials: an API Read Access Token and an API Key. You only need the API Key.
- Add it to
docker-compose.yml:
- TMDB_API=your_api_key
MyAnimeList
- Log in at myanimelist.net.
- Click your username and go to Account Settings.
- Open the API tab and click Create ID.
- After the app is created, click Edit next to it.
- Copy the Client ID and add it:
- MAL_API=your_client_id
IGDB
IGDB credentials are issued through Twitch.
- Log in to Twitch and go to dev.twitch.tv/console/apps/create.
- Enter any app name and set
http://localhostas the OAuth Redirect URL. - After registering, copy the Client ID and Client Secret.
- Add both to
docker-compose.yml:
- IGDB_ID=your_client_id
- IGDB_SECRET=your_client_secret
Step 6 — Restart to apply changes
Restart the containers to load all the API keys and updated settings:
cd docker/yamtrack
docker compose up -d
Yamtrack is now running with full metadata support.
