Master API, Admin UI, Go media-node, Docker/Dokploy deploy configs. Co-authored-by: Cursor <cursoragent@cursor.com>
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
- Zet deze repo op GitHub/GitLab/Gitea (privé mag).
- Zorg dat Dokploy bij die repo kan (deploy key / token).
- 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
- Admin UI → Instellingen → Stremio addon token genereren
- Admin UI → Nodes → enrollment token
- Op een Media Node:
sudo media-node installmet
Master URL =https://master.jouwdomein.nl
Alternatief: Dokploy + jouw NPM
Als Master achter NPM moet blijven:
- In Dokploy: expose
master-apials host-poort3000enadmin-uials3001(pas compose aan metports:). - 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).