421 words
2 minutes
Self-Hosting Yamtrack Using TMDB, IGDB, MyAnimeList/MAL APIs

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.

ServiceUsed forCompose variable
TMDBMovies & TV showsTMDB_API
MyAnimeListAnimeMAL_API
TwitchGamesIGDB_ID, IGDB_SECRET

TMDB#

  1. Log in at themoviedb.org.
  2. Click your profile icon and go to API.
  3. 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.
  4. Add it to docker-compose.yml:
- TMDB_API=your_api_key

MyAnimeList#

  1. Log in at myanimelist.net.
  2. Click your username and go to Account Settings.
  3. Open the API tab and click Create ID.
  4. After the app is created, click Edit next to it.
  5. Copy the Client ID and add it:
- MAL_API=your_client_id

IGDB#

IGDB credentials are issued through Twitch.

  1. Log in to Twitch and go to dev.twitch.tv/console/apps/create.
  2. Enter any app name and set http://localhost as the OAuth Redirect URL.
  3. After registering, copy the Client ID and Client Secret.
  4. 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.

Self-Hosting Yamtrack Using TMDB, IGDB, MyAnimeList/MAL APIs
https://blog.juyung.com/posts/en/2026/06/07/
Author
Jay Juyung
Published at
2026-06-07
License
CC BY