168 lines
4.8 KiB
Markdown
168 lines
4.8 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=false
|
|
```
|
|
|
|
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:
|
|
|
|
| Service | Host-poort |
|
|
|---------|------------|
|
|
| `master-api` | `3000` |
|
|
| `admin-ui` | `3001` |
|
|
|
|
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 | `3000` |
|
|
| 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 | `3001` |
|
|
| 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** → 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`).
|