mirror of
https://github.com/4gray/iptvnator.git
synced 2026-10-15 13:46:16 -08:00
docs(docker): restore self-hosted PWA compose flow
This commit is contained in:
1 parent
3096115e64
commit
23a1330a14
7 files changed
+377
-51
No files matched your search
+79
-11
@@ -1,20 +1,88 @@
|
||||
# Self-hosted version of IPTVnator
|
||||
# Self-hosted IPTVnator
|
||||
|
||||
You can deploy and run the PWA version of IPTVnator on your own machine with `docker-compose` using the following command:
|
||||
The self-hosted image contains both pieces required for the browser PWA:
|
||||
|
||||
$ cd docker
|
||||
$ docker-compose up -d
|
||||
- Angular PWA static files served by nginx
|
||||
- The monorepo `web-backend` Express app proxied under `/api`
|
||||
|
||||
This command will launch the frontend and backend applications. By default, the application will be available at: http://localhost:4333/. The ports can be configured in the `docker-compose.yml` file.
|
||||
The historical standalone `4gray/iptvnator-backend` image is no longer needed
|
||||
for the default Docker deployment.
|
||||
|
||||
The web backend proxy accepts only `http` and `https` provider URLs. The PWA first registers provider URLs through `/provider-targets`, then uses the returned `targetId` for playlist, Xtream, and Stalker proxy calls. The backend blocks loopback, private, link-local, and reserved network targets by default to avoid exposing the self-hosted server as a generic internal-network fetcher. If you intentionally need to test against local mock servers or LAN-only IPTV sources, set `IPTVNATOR_PROXY_ALLOW_PRIVATE_NETWORKS=1` on the backend container and avoid exposing that instance to untrusted users.
|
||||
## Run With Docker Compose
|
||||
|
||||
For providers that use private certificate authorities, keep TLS validation enabled and pass the CA bundle to Node with `NODE_EXTRA_CA_CERTS=/path/to/ca.pem`.
|
||||
From the repository root:
|
||||
|
||||
## Build frontend
|
||||
```bash
|
||||
docker compose -f docker/docker-compose.yml up --build -d
|
||||
```
|
||||
|
||||
$ docker build -t 4gray/iptvnator -f docker/Dockerfile .
|
||||
The ready-to-run compose file is [`docker-compose.yml`](./docker-compose.yml).
|
||||
By default the app is available at <http://localhost:4333>. No additional
|
||||
environment variables, backend repository checkout, or separate backend
|
||||
container are required for the default local deployment.
|
||||
|
||||
## Build backend
|
||||
## Build The Image
|
||||
|
||||
You can find the backend app with all instructions in a separate GitHub repository - https://github.com/4gray/iptvnator-backend
|
||||
```bash
|
||||
docker build -t 4gray/iptvnator -f docker/Dockerfile .
|
||||
```
|
||||
|
||||
The image build runs:
|
||||
|
||||
```bash
|
||||
pnpm nx build web --configuration=pwa
|
||||
pnpm nx build web-backend
|
||||
```
|
||||
|
||||
## Runtime Configuration
|
||||
|
||||
The container writes `/usr/share/nginx/html/assets/app-config.js` on startup.
|
||||
That file sets `window.__IPTVNATOR_CONFIG__.BACKEND_URL`, which the PWA reads
|
||||
before it creates `PwaService`.
|
||||
|
||||
These variables are supported by the Docker image. The compose file sets the
|
||||
safe local defaults shown below.
|
||||
|
||||
| Variable | Default | Purpose |
|
||||
| ---------------------------------------- | ----------------------- | ------------------------------------------------------------------------------------------------------------------ |
|
||||
| `BACKEND_URL` | `/api` | Browser-facing backend URL used by the PWA. Keep `/api` for the bundled nginx proxy. |
|
||||
| `CLIENT_URL` | `http://localhost:4333` | Allowed browser origin for backend CORS. Use the public URL when hosting behind a reverse proxy. Multiple origins can be comma-separated. |
|
||||
| `PORT` | `3000` | Internal Express backend port. nginx proxy config is rendered from the template to match it at startup. |
|
||||
| `IPTVNATOR_PROXY_ALLOW_PRIVATE_NETWORKS` | `0` | Set to `1` or `true` only for trusted local/LAN deployments that intentionally proxy private network IPTV or mock endpoints. |
|
||||
| `NODE_EXTRA_CA_CERTS` | unset | Optional Node.js CA bundle path for providers using private certificate authorities. Mount the CA file into the container and set this path. |
|
||||
|
||||
The web backend proxy accepts only `http` and `https` provider URLs. The PWA
|
||||
first registers provider URLs through `/provider-targets`, then uses the
|
||||
returned `targetId` for playlist, Xtream, and Stalker proxy calls. The backend
|
||||
blocks loopback, private, link-local, and reserved network targets by default so
|
||||
a publicly exposed instance cannot be used as a generic internal-network
|
||||
fetcher. If you enable `IPTVNATOR_PROXY_ALLOW_PRIVATE_NETWORKS=1`, keep the
|
||||
instance restricted to trusted users.
|
||||
|
||||
For providers that use private certificate authorities, keep TLS validation
|
||||
enabled and pass the CA bundle to Node:
|
||||
|
||||
```yaml
|
||||
services:
|
||||
iptvnator:
|
||||
volumes:
|
||||
- ./ca.pem:/etc/ssl/private/provider-ca.pem:ro
|
||||
environment:
|
||||
NODE_EXTRA_CA_CERTS: /etc/ssl/private/provider-ca.pem
|
||||
```
|
||||
|
||||
The entrypoint renders the nginx config from `docker/nginx.conf`, starts the
|
||||
backend, waits for `/health`, and only then starts nginx. The nginx config
|
||||
serves the PWA with SPA fallback, avoids caching `assets/app-config.js`, and
|
||||
proxies `/api/*` to the internal backend. The Dockerfile and compose file both
|
||||
define a health check against `/api/health`.
|
||||
|
||||
## Local Validation
|
||||
|
||||
```bash
|
||||
pnpm nx test web-backend
|
||||
pnpm nx build web --configuration=pwa --skip-nx-cache
|
||||
pnpm nx build web-backend
|
||||
pnpm nx run web-e2e:e2e -- --project=chromium --grep @self-hosted
|
||||
docker compose -f docker/docker-compose.yml config
|
||||
```
|
||||
Reference in new issue
Block a user