Skip to content

Installation

dvnkln edited this page Oct 12, 2026 · 6 revisions

hdtracker runs as a single Docker container. All data lives in one volume.

1. Folder and files

The quick way – create a folder and download the two files into it:

mkdir hdtracker && cd hdtracker
curl -fsSLO https://raw.githubusercontent.com/dvnkln/hdtracker/main/docker-compose.yml
curl -fsSL -o .env https://raw.githubusercontent.com/dvnkln/hdtracker/main/.env.example

No curl on your system? wget does the same:

wget https://raw.githubusercontent.com/dvnkln/hdtracker/main/docker-compose.yml
wget -O .env https://raw.githubusercontent.com/dvnkln/hdtracker/main/.env.example

Or create the folder by hand with this docker-compose.yml:

services:
  hdtracker:
    image: ghcr.io/dvnkln/hdtracker:latest
    container_name: hdtracker
    restart: unless-stopped
    ports:
      - '3000:3000'
    env_file: .env
    volumes:
      - hdtracker-data:/data

volumes:
  hdtracker-data:

Another port? Change the left side of 3000:3000 (e.g. 8080:3000) and adjust ORIGIN accordingly.

2. .env

Fill in the .env file you downloaded – or create it next to the docker-compose.yml (template: .env.example):

SECRET=
TMDB_API_TOKEN=
IGDB_CLIENT_ID=
IGDB_CLIENT_SECRET=
TZ=Europe/Berlin
ORIGIN=http://192.168.1.50:3000
Variable What to put in
SECRET Random string, at least 32 characters: openssl rand -hex 32
TMDB_API_TOKEN themoviedb.org → Settings → API → API Read Access Token (the long one, not the short API key)
IGDB_CLIENT_ID / IGDB_CLIENT_SECRET dev.twitch.tv/console/apps → Register Your Application (Redirect URL http://localhost, Category Application Integration, Client Type Confidential) → copy the Client ID, create a secret with New Secret
TZ Your time zone, e.g. Europe/Berlin
ORIGIN Exactly the address you open the app with (protocol + host + port, no trailing slash) – otherwise login fails. E.g. http://192.168.1.50:3000, or https://tracker.example.com behind a reverse proxy. Several addresses: comma-separated

Anime (AniList) needs no key; only the episode titles of anime come from TMDB. Without TMDB or IGDB keys only those areas are unavailable – you can also hide areas you don't use under Settings → General.

Prefer passing the values with environment: instead of env_file? That works too; the variable names are the same.

3. Start

docker compose up -d

Open the ORIGIN address. On the first start you create your account. It is the admin of the installation and can add accounts for others later – see Users.

Everything else (interface language, content language, region, …) is set inside the app under Settings.

4. Behind a reverse proxy?

If you reach hdtracker through a reverse proxy (Nginx Proxy Manager, Caddy, Traefik, …), confirm the proxy once:

  1. Open Settings → Server → Connection through the proxy.
  2. Follow what it shows – one click, or a key with one line for your proxy.

Without it everything works, but after several wrong passwords all visitors are blocked together instead of only the one who typed them.

Settings → Server also has an overview that tells you whether anything else needs attention. Details: HTTPS and installing as an app.

Trouble?

  • Login or any form fails with “Cross-site POST form submissions are forbidden” (403): ORIGIN does not match the address in your browser exactly. See HTTPS and installing as an app.
  • “… is missing in .env”: the variable name is misspelled or the value did not reach the container. Check with docker exec hdtracker env.
  • Forgot your password? See Reset your password.

Clone this wiki locally