parent
123a3f241b
commit
bcdb211253
1 changed files with 63 additions and 0 deletions
63
README.md
Normal file
63
README.md
Normal file
|
|
@ -0,0 +1,63 @@
|
||||||
|
# livetv
|
||||||
|
|
||||||
|
Self-hosted live-TV stack: an Xtream IPTV source is mirrored through this VPS and
|
||||||
|
served to **Jellyfin** so it can be watched ad-free in Jellyfin's apps.
|
||||||
|
|
||||||
|
```
|
||||||
|
Xtream provider (API only)
|
||||||
|
│ player_api.php (URL + username + password)
|
||||||
|
▼
|
||||||
|
Dispatcharr ← ingests via the Xtream API, regenerates a clean
|
||||||
|
│ HDHomeRun tuner + M3U + EPG
|
||||||
|
▼
|
||||||
|
Jellyfin ← Live TV: adds Dispatcharr as a tuner + guide
|
||||||
|
│
|
||||||
|
▼
|
||||||
|
Jellyfin apps (HTTPS via Nginx Proxy Manager)
|
||||||
|
```
|
||||||
|
|
||||||
|
Both services run on the shared external Docker network **`proxy`**, where
|
||||||
|
Nginx Proxy Manager (NPM) reaches them by name — no raw host ports are opened.
|
||||||
|
|
||||||
|
## Services
|
||||||
|
|
||||||
|
| Service | Internal address | Public (via NPM) |
|
||||||
|
|--------------|-------------------------|--------------------------------------|
|
||||||
|
| `jellyfin` | `jellyfin:8096` | `https://jellyfin.altricade.com` |
|
||||||
|
| `dispatcharr`| `dispatcharr:9191` | `https://dispatcharr.altricade.com` (admin, behind an Access List) |
|
||||||
|
|
||||||
|
## Deploy
|
||||||
|
|
||||||
|
Pushing to `master` triggers `.forgejo/workflows/deploy.yaml`, which runs
|
||||||
|
`docker compose up -d` on the VPS runner. The compose project name is pinned to
|
||||||
|
`livetv` so the named volumes persist across deploys.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git add -A
|
||||||
|
git commit -m "..."
|
||||||
|
git push origin master
|
||||||
|
```
|
||||||
|
|
||||||
|
## NPM proxy hosts
|
||||||
|
|
||||||
|
Create two hosts (both forward over the `proxy` network, scheme `http`, Websockets on, SSL via Let's Encrypt):
|
||||||
|
|
||||||
|
- `jellyfin.altricade.com` → `jellyfin` : `8096`
|
||||||
|
- `dispatcharr.altricade.com` → `dispatcharr` : `9191` (add an **Access List** — this is the admin UI)
|
||||||
|
|
||||||
|
## First-time configuration
|
||||||
|
|
||||||
|
1. **Dispatcharr** (`https://dispatcharr.altricade.com`): create admin login →
|
||||||
|
add an **Xtream Codes** account (server URL + username + password) → let it
|
||||||
|
scan channels via the API → add the EPG source.
|
||||||
|
2. **Jellyfin** (`https://jellyfin.altricade.com`): Dashboard → Live TV →
|
||||||
|
- Tuner Devices → add **HDHomeRun** `http://dispatcharr:9191` (or an M3U Tuner).
|
||||||
|
- TV Guide Data → add **XMLTV** using Dispatcharr's EPG URL.
|
||||||
|
- Refresh guide and map channels.
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
- No credentials are stored in this repo. The Xtream login is entered in the
|
||||||
|
Dispatcharr UI and lives in the `dispatcharr_data` volume on the VPS.
|
||||||
|
- Confirm the shared network is named `proxy` (`docker network ls`); adjust
|
||||||
|
`docker-compose.yaml` if NPM is on a different network.
|
||||||
Loading…
Reference in a new issue