init
Some checks failed
Deploy / deploy (push) Has been cancelled

This commit is contained in:
Заид Омар Медхат 2026-07-25 22:06:50 +05:00
commit 123a3f241b
3 changed files with 132 additions and 0 deletions

View file

@ -0,0 +1,58 @@
name: Deploy
# Deploy on every push to master (and allow manual runs from the Actions tab).
on:
push:
branches: [master]
workflow_dispatch:
# A STABLE compose project name so the named volume (dispatcharr_data) is the
# same on every run. Compose prefixes volumes with the project name; if that
# name changed between runs (e.g. a different checkout path) you'd silently get
# a fresh empty volume and lose Dispatcharr's database/config on each deploy.
env:
COMPOSE_PROJECT_NAME: livetv
jobs:
deploy:
# `docker` label => node:22-bookworm with the host Docker socket available.
runs-on: docker
steps:
- name: Checkout
uses: actions/checkout@v4
# The job image has the Docker socket available but may not ship the docker
# CLI / compose plugin. Install them only if missing (no-op otherwise) so
# `docker compose ...` can talk to the host daemon.
- name: Ensure Docker CLI + Compose plugin
run: |
if ! command -v docker >/dev/null 2>&1; then
curl -fsSL https://download.docker.com/linux/static/stable/x86_64/docker-27.3.1.tgz \
| tar -xz -C /usr/local/bin --strip-components=1 docker/docker
fi
if ! docker compose version >/dev/null 2>&1; then
mkdir -p /usr/local/lib/docker/cli-plugins
curl -fsSL https://github.com/docker/compose/releases/download/v2.29.7/docker-compose-linux-x86_64 \
-o /usr/local/lib/docker/cli-plugins/docker-compose
chmod +x /usr/local/lib/docker/cli-plugins/docker-compose
fi
docker version
docker compose version
# `proxy` is the shared external network Nginx Proxy Manager sits on.
# Create it if it doesn't exist yet so `docker compose up` won't fail.
- name: Ensure 'proxy' network exists
run: docker network inspect proxy >/dev/null 2>&1 || docker network create proxy
# Pull the latest images referenced in docker-compose.yaml.
- name: Pull images
run: docker compose pull
# Reconcile the stack: compose only recreates services whose config or
# image actually changed, and cleans up any services removed from the file.
- name: Deploy stack
run: docker compose up -d --remove-orphans
# Free disk on the shared runner by dropping old, untagged images.
- name: Prune old images
run: docker image prune -f

20
.gitignore vendored Normal file
View file

@ -0,0 +1,20 @@
# Claude Code local settings (machine-specific, not for sharing)
.claude/settings.local.json
# Environment files / secrets (never commit real credentials)
.env
.env.*
!.env.example
# Local compose overrides (per-machine tweaks)
docker-compose.override.yml
docker-compose.override.yaml
# OS / editor cruft
.DS_Store
Thumbs.db
desktop.ini
*.swp
*~
.idea/
.vscode/

54
docker-compose.yaml Normal file
View file

@ -0,0 +1,54 @@
services:
# ---------------------------------------------------------------------------
# Dispatcharr — ingests the Xtream API (URL + user + pass) and re-serves it as
# an HDHomeRun tuner + M3U + EPG for Jellyfin. NOT exposed publicly.
# ---------------------------------------------------------------------------
dispatcharr:
image: ghcr.io/dispatcharr/dispatcharr:latest
container_name: dispatcharr
restart: unless-stopped
volumes:
- dispatcharr_data:/data
environment:
DISPATCHARR_ENV: aio
REDIS_HOST: localhost
CELERY_BROKER_URL: redis://localhost:6379/0
DISPATCHARR_LOG_LEVEL: info
# No published ports. NPM (on the `proxy` network) reaches it by name for
# both the admin UI and Jellyfin's tuner/EPG: http://dispatcharr:9191
# - Admin UI -> NPM host dispatcharr.altricade.com (add an Access List)
# - Jellyfin -> internal http://dispatcharr:9191 (no exposure)
networks:
- proxy
# ---------------------------------------------------------------------------
# Jellyfin — the app you and others actually watch in. This is the ONLY
# public-facing service: expose it via Nginx Proxy Manager (see notes below).
# In NPM: forward hostname = jellyfin , port = 8096 , scheme http , WS on.
# ---------------------------------------------------------------------------
jellyfin:
image: jellyfin/jellyfin:latest
container_name: jellyfin
restart: unless-stopped
volumes:
- jellyfin_config:/config
- jellyfin_cache:/cache
# Optional media library (VOD / DVR recordings). Point at a real path:
# - /srv/media:/media
environment:
# Helps clients build correct absolute URLs behind the HTTPS proxy.
JELLYFIN_PublishedServerUrl: https://jellyfin.altricade.com
networks:
- proxy
# Optional Intel/AMD hardware transcoding (uncomment if your VPS has a GPU):
# devices:
# - /dev/dri:/dev/dri
volumes:
dispatcharr_data:
jellyfin_config:
jellyfin_cache:
networks:
proxy:
external: true