feat(deploy): Jellyfin at home, published through WireGuard (ADR 0032)
Some checks failed
CI / check (push) Failing after 41m12s
CI / deploy (push) Has been skipped

The instance serves jellyfin.halkyon.eu and its Caddy proxies through a
WireGuard tunnel to a Jellyfin on the operator's own machine, which dials
out, so nothing names the home network's address and its router opens no
port. compose.jellyfin-home.yaml takes the sidecar's place, with its
site's rules unchanged (jellyfin.caddy's upstream is now a setting), and
leaves JELLYFIN_URL unset, so the instance suggests it only while it
answers.

On the instance's server the tunnel reaches Jellyfin from Caddy alone and
nothing of the host (wg-jellyfin-rules.sh, set and removed with the
tunnel); the CI runner's unit denies it, and CI's Sandbox step fails if a
job reaches it. The home end keeps Jellyfin in WireGuard's network
namespace, its port on the loopback alone. The steps are in
deploy/sidecars/README.md, the rules held by test/deploy/jellyfin_home_test.dart.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
Tizian 「ティツィアーン」 2026-10-30 22:49:47 +01:00
commit d8c827eab6
Signed by: raisondetredev
GPG key ID: 07F6FCF405488B64

View file

@ -36,14 +36,14 @@ TimeoutStopSec=11min
# Away from production: /home (deploy's .env, the checkout, the database dumps) is
# invisible, the rest of the system read-only except the runner's own directory, other
# users' processes hidden, and Docker's container networks, where the database listens,
# unreachable.
# unreachable, and so is the tunnel to Jellyfin at home (10.61.96.0/30, ADR 0032, D6).
ProtectHome=yes
ProtectSystem=strict
ReadWritePaths=/var/lib/forgejo-runner
PrivateTmp=yes
ProtectProc=invisible
InaccessiblePaths=-/run/docker.sock -/run/containerd -/var/lib/docker
IPAddressDeny=172.16.0.0/12 192.168.0.0/16 fd00::/8
IPAddressDeny=172.16.0.0/12 192.168.0.0/16 fd00::/8 10.61.96.0/30
NoNewPrivileges=yes
CapabilityBoundingSet=
AmbientCapabilities=