From fbf42cbc483cf99117608ae57566c159a72ead87 Mon Sep 17 00:00:00 2001 From: Christopher Jones Date: Sat, 25 Apr 2026 00:19:40 -0400 Subject: [PATCH] First commit. --- compose.yaml | 110 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 compose.yaml diff --git a/compose.yaml b/compose.yaml new file mode 100644 index 0000000..228b3ec --- /dev/null +++ b/compose.yaml @@ -0,0 +1,110 @@ +# compose.yaml for Open Source SageTV +# Image: sagetvopen/sagetv-server-java11 (most stable as of 2024/2025) +# +# CRITICAL: network_mode must be "host". Without it, the SageTV server +# cannot distinguish LAN extenders (HD300) from remote Placeshifter +# clients, and the HD300 will be greeted with a login prompt instead +# of the SageTV UI. +# +# Because of host networking, the "ports:" section is omitted — +# the container shares the host's network stack directly. +# The port list below is for firewall reference only. +# +# Ports used by SageTV (all on host network): +# 8080/tcp - Jetty web UI (SageTV web interface) +# 42024/tcp - Primary client<->server communication +# 7818/tcp - Media streaming (large file transfers to clients) +# 8270/udp - Automatic server discovery (HD300 "find server" scan) +# 31099/tcp - Extender & Placeshifter server port +# 31100/udp - Extender communication +# 16867/udp - Extender media port +# 16869/udp - Extender media port +# 16881/tcp - Extender media port + +services: + sagetv: + image: sagetvopen/sagetv-server-java11:latest + container_name: sagetv + network_mode: host + restart: unless-stopped + + environment: + # --- SageTV Version --- + # "latest" pulls the newest release on each container start. + # Pin to a specific version (e.g., "9.2.16.368") to prevent + # automatic upgrades. Before upgrading, the container automatically + # backs up Sage.jar, Sage.properties, and Wiz.bin. + VERSION: "latest" + + # --- Java Heap Memory --- + # Amount of RAM to give the SageTV JVM, in MB. + # 768 MB is the default; 1024–2048 is reasonable for a media server + # with a large library (several hundred recordings). + JAVA_MEM_MB: "1024" + + # --- File Permissions --- + # PUID and PGID should match the UID/GID of the user on your HOST + # that owns the media and appdata directories. This avoids permission + # conflicts between the container process and your host filesystem. + # + # To find your UID/GID, run on your host: id $(whoami) + # Common values on a standard Linux system: UID=1000, GID=1000 + PUID: "1000" + PGID: "1000" + + # --- Optional: License Key --- + # SageTV v9+ is fully open source and does not require a license. + # Leave blank. + LICENCE_DATA: "" + + # --- Optional Add-ons --- + # OPT_GENTUNER: Installs the GenericTuner plugin (not needed if + # you have no tuner hardware — set to N for a playback-only setup) + OPT_GENTUNER: "N" + + # OPT_COMSKIP: Installs comskip binaries for commercial detection. + # Useful later but not needed for initial bring-up. + OPT_COMSKIP: "N" + + # OPT_COMMANDIR: CommandIR IR blaster support. Leave N unless you + # have CommandIR hardware. + OPT_COMMANDIR: "N" + + # OPT_SETPERMS: If Y, resets ownership/permissions on all SageTV + # files at every startup. Slower start, but fixes permission issues. + # Set to Y temporarily if you hit "permission denied" errors. + OPT_SETPERMS: "N" + + volumes: + # --- SageTV Application Data --- + # This is where SageTV stores its configuration: Sage.properties, + # Wiz.bin (the recording database), plugins, and logs. + # Map to a persistent directory on your host. + # The container expects /opt/sagetv; it will create a "server" + # subdirectory here on first run. + - /opt/docker/sagetv/appdata:/opt/sagetv + + # --- Recordings / Primary Media Directory --- + # SageTV will create a "tv" subdirectory here for recordings. + # Point this at the directory containing your existing SageTV + # recordings (.mpg files). Read-write so SageTV can manage them. + - /your/sagetv/recordings:/var/media + + # --- Additional Media (Videos, Music, Photos) --- + # For your imported video library. SageTV will be configured + # (via its UI) to look here for non-recorded content. + # Read-only is fine if SageTV should not modify these files. + - /your/other/media:/var/mediaext:ro + + # host networking has no "ports:" mapping — the container + # uses the host's ports directly. Shown here as documentation only: + # + # 8080/tcp Jetty web UI + # 42024/tcp Client/server protocol + # 7818/tcp Media streaming + # 8270/udp Server autodiscovery + # 31099/tcp Extender server port + # 31100/udp Extender comms + # 16867/udp Extender media + # 16869/udp Extender media + # 16881/tcp Extender media