stremio/docs/dokploy.md
Jos Vooges | STH a5c6fd5fe4 Initial commit: Distributed Stremio Media Cluster V1
Master API, Admin UI, Go media-node, Docker/Dokploy deploy configs.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-25 00:17:04 +02:00

4.1 KiB

Master deployen met Dokploy

Ja — Dokploy is een uitstekende optie voor de Master. De Media Nodes blijven losse Go-binaries op andere servers (niet in Dokploy).

Dokploy (Master stack)
  ├── master-api
  ├── admin-ui
  ├── postgres
  └── redis

Media Nodes (apart, systemd)
  └── media-node binary → outbound WSS naar Master

Wat Dokploy wel / niet doet

Onderdeel Dokploy?
Master API + Admin UI + Postgres + Redis Ja
HTTPS / domeinen (Traefik) Ja (aanbevolen)
Media Nodes Nee — aparte servers
Stremio zelf Nee — client-app

Als je al Nginx Proxy Manager voor Master wilt blijven gebruiken: laat Dokploy de containers draaien zonder publiek domein, en proxy NPM naar de host-poorten. Meestal is Dokploy Traefik eenvoudiger voor de Master.

Voorbereiding

  1. Zet deze repo op GitHub/GitLab/Gitea (privé mag).
  2. Zorg dat Dokploy bij die repo kan (deploy key / token).
  3. Genereer secrets:
openssl rand -base64 48   # SESSION_SECRET
openssl rand -base64 24   # POSTGRES_PASSWORD

Stappen in Dokploy

1. Nieuwe Compose-app

  • Project → Create Service → Compose
  • Source: Git repository
  • Compose path: deploy/docker/docker-compose.dokploy.yml
  • Branch: main (of jouw branch)

2. Environment variables

Tab Environment — plak en vul in (zie ook deploy/dokploy/.env.example):

NODE_ENV=production
POSTGRES_USER=media
POSTGRES_PASSWORD=<sterk-wachtwoord>
POSTGRES_DB=media_cluster
DATABASE_URL=postgresql://media:<sterk-wachtwoord>@postgres:5432/media_cluster
REDIS_URL=redis://redis:6379
SESSION_SECRET=<min-32-chars>
ADMIN_EMAIL=admin@jouwdomein.nl
ADMIN_PASSWORD=<sterk-wachtwoord>
PUBLIC_URL=https://master.jouwdomein.nl
TMDB_API_KEY=
PLAYBACK_IDLE_TIMEOUT_SECONDS=1200
PLAYBACK_ABSOLUTE_LIFETIME_SECONDS=43200
NODE_HEARTBEAT_INTERVAL_SECONDS=30
NODE_OFFLINE_THRESHOLD_SECONDS=90
HIDE_UNAVAILABLE_TITLES=false

Belangrijk: DATABASE_URL wachtwoord moet exact gelijk zijn aan POSTGRES_PASSWORD.

3. Domeinen (Dokploy Traefik)

Koppel domeinen aan de juiste service/poort:

Domein Service Poort Opmerking
master.jouwdomein.nl master-api 3000 WebSockets aan
admin.jouwdomein.nl admin-ui 3000 Admin UI

WebSockets zijn verplicht: nodes verbinden via
wss://master.jouwdomein.nl/api/v1/node/connect.

DNS A/AAAA records naar je Dokploy-server.

4. Deploy

Klik Deploy. Eerste build kan enkele minuten duren (TypeScript + Next.js).

Controleer:

https://master.jouwdomein.nl/health
→ {"status":"ok","service":"master-api",...}

Login Admin UI:

https://admin.jouwdomein.nl

Admin UI → API

De Admin UI praat via server-side rewrites naar http://master-api:3000 (Docker-netwerk).
Browsers roepen alleen /api/... op het admin-domein aan — dat is correct.

Na succesvolle deploy

  1. Admin UI → Instellingen → Stremio addon token genereren
  2. Admin UI → Nodes → enrollment token
  3. Op een Media Node: sudo media-node install met
    Master URL = https://master.jouwdomein.nl

Alternatief: Dokploy + jouw NPM

Als Master achter NPM moet blijven:

  1. In Dokploy: expose master-api als host-poort 3000 en admin-ui als 3001 (pas compose aan met ports:).
  2. In NPM:
    • master.… → http://dokploy-host:3000 (Websockets aan)
    • admin.… → http://dokploy-host:3001

Troubleshooting

Probleem Oplossing
Build faalt (context) Compose path moet deploy/docker/docker-compose.dokploy.yml zijn; context is repo-root
Env leeg in container Variables in Dokploy UI + env_file: .env (staat al in de compose)
Node kan niet verbinden Domein op master-api, WebSockets enabled, PUBLIC_URL HTTPS
Admin login faalt Check ADMIN_EMAIL / ADMIN_PASSWORD; herdeploy na env-wijziging
DB auth error DATABASE_URL password ≠ POSTGRES_PASSWORD

Volume / backups

Postgres data staat in Docker volume postgres_data.
Backup periodiek (Dokploy volume backup of pg_dump via deploy/master/backup.sh).