# 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= POSTGRES_DB=media_cluster DATABASE_URL=postgresql://media:@postgres:5432/media_cluster REDIS_URL=redis://redis:6379 SESSION_SECRET= ADMIN_EMAIL=admin@jouwdomein.nl ADMIN_PASSWORD= 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** → platform Unraid/Synology → token + **Kopieer install-commando** 3. Op Unraid: zie [unraid-node.md](./unraid-node.md). Op Synology: [synology-node.md](./synology-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`).