stremio/docs/dokploy.md
Jos Vooges | STH eb8ae1e85a Fix Stremio playback, folder-aware scan, and remove STH branding.
Parse Plex-style Title (Year) and Show/Season folders; restore notWebReady with direct node stream URLs; hide unavailable titles by default.

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

168 lines
5 KiB
Markdown

# 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:
```bash
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`):
```env
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=true
```
Belangrijk: `DATABASE_URL` wachtwoord moet **exact** gelijk zijn aan `POSTGRES_PASSWORD`.
### 3. Domeinen — bij jou via Nginx Proxy Manager
**Zet géén domein in Dokploy** als NPM al HTTPS doet.
Dokploy publiceert (host-poorten gekozen om conflict met Dokploy UI `:3000` te vermijden):
| Service | Host-poort | Container-poort |
|---------|------------|-----------------|
| `master-api` | `3100` | `3000` |
| `admin-ui` | `3101` | `3000` |
In **Nginx Proxy Manager** maak je 2 Proxy Hosts:
#### Master API
| Veld | Waarde |
|------|--------|
| Domain | `master.jouwdomein.nl` |
| Scheme | `http` |
| Forward Hostname/IP | LAN-IP van de **Dokploy-server** |
| Forward Port | `3100` |
| Websockets Support | **Aan** |
| SSL | Let's Encrypt + Force SSL |
Advanced (aanbevolen):
```nginx
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 86400s;
```
#### Admin UI
| Veld | Waarde |
|------|--------|
| Domain | `admin.jouwdomein.nl` |
| Scheme | `http` |
| Forward Hostname/IP | LAN-IP van de **Dokploy-server** |
| Forward Port | `3101` |
| SSL | Let's Encrypt + Force SSL |
DNS A/AAAA van beide domeinen → publiek IP waar NPM op luistert (poort 443).
`PUBLIC_URL` in de env moet `https://master.jouwdomein.nl` zijn (het NPM-domein).
### 4. Deploy
Klik **Deploy**. Eerste build kan enkele minuten duren (TypeScript + Next.js).
Controleer:
```text
https://master.jouwdomein.nl/health
→ {"status":"ok","service":"master-api",...}
```
Login Admin UI:
```text
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** → token + **Kopieer install-commando** (Unraid: één curl|bash)
3. Op Unraid: zie [unraid-node.md](./unraid-node.md). Op Linux: `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`).