3bb01ddaaf
- New Ansible role: jellyfin — Docker + nvidia-container-toolkit setup, full *arr stack compose file (Jellyfin, qBittorrent, Radarr, Sonarr, Prowlarr, FlareSolverr, Jellyseerr), systemd service for auto-start - New playbook: jellyfin.yml targeting media_servers group - Inventory: add media LXC (10.10.1.50) to media_servers group - Traefik: add internal .homelab routes for all 6 media services - Pi-hole: add DNS records for all 6 media services → Traefik - network-interfaces: DNAT port 6881 TCP+UDP → 10.10.1.50 for BitTorrent - homelab-requirements.md: document full Jellyfin stack requirements including NVIDIA GTX 1060 passthrough approach and driver notes - jellyfin-tools: original reference compose file from upstream Infrastructure created on Proxmox: - LXC 106 (media, Debian 12, privileged, nesting=1, 10.10.1.50/vmbr1) - ZFS dataset hdd/media mounted at /media in LXC - NVIDIA device passthrough entries in /etc/pve/lxc/106.conf Note: NVIDIA driver 580.159.03 (.run) installed on Proxmox host — not managed by apt (Debian only has 550.x which doesn't support kernel 7.x or GTX 1060 Pascal as of this driver version). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
73 lines
1.9 KiB
Django/Jinja
73 lines
1.9 KiB
Django/Jinja
http:
|
|
routers:
|
|
{% for svc in traefik_services %}
|
|
{{ svc.name }}-internal:
|
|
rule: "Host(`{{ svc.host }}`)"
|
|
service: {{ svc.name }}
|
|
entryPoints:
|
|
- web
|
|
- websecure
|
|
tls: {}
|
|
{% if svc.public_host is defined %}
|
|
{{ svc.name }}-public-redirect:
|
|
rule: "Host(`{{ svc.public_host }}`){% if svc.public_path is defined %} && PathPrefix(`{{ svc.public_path }}`){% endif %}"
|
|
service: {{ svc.name }}
|
|
entryPoints:
|
|
- web
|
|
middlewares:
|
|
- redirect-https
|
|
{{ svc.name }}-public:
|
|
rule: "Host(`{{ svc.public_host }}`){% if svc.public_path is defined %} && PathPrefix(`{{ svc.public_path }}`){% endif %}"
|
|
service: {{ svc.name }}
|
|
entryPoints:
|
|
- websecure
|
|
tls:
|
|
certResolver: letsencrypt
|
|
{% if svc.strip_prefix is defined %}
|
|
middlewares:
|
|
- {{ svc.name }}-strip-prefix
|
|
{% endif %}
|
|
{% endif %}
|
|
{% endfor %}
|
|
|
|
middlewares:
|
|
redirect-https:
|
|
redirectScheme:
|
|
scheme: https
|
|
permanent: true
|
|
{% for svc in traefik_services %}
|
|
{% if svc.strip_prefix is defined %}
|
|
{{ svc.name }}-strip-prefix:
|
|
stripPrefix:
|
|
prefixes:
|
|
- "{{ svc.strip_prefix }}"
|
|
{% endif %}
|
|
{% endfor %}
|
|
|
|
services:
|
|
{% for svc in traefik_services %}
|
|
{{ svc.name }}:
|
|
loadBalancer:
|
|
servers:
|
|
- url: "{{ svc.backend }}"
|
|
{% if svc.tls_skip_verify is defined and svc.tls_skip_verify %}
|
|
serversTransport: {{ svc.name }}-transport
|
|
{% endif %}
|
|
{% endfor %}
|
|
|
|
{% set ns = namespace(has_skip_verify=false) %}
|
|
{% for svc in traefik_services %}
|
|
{% if svc.tls_skip_verify is defined and svc.tls_skip_verify %}
|
|
{% set ns.has_skip_verify = true %}
|
|
{% endif %}
|
|
{% endfor %}
|
|
{% if ns.has_skip_verify %}
|
|
serversTransports:
|
|
{% for svc in traefik_services %}
|
|
{% if svc.tls_skip_verify is defined and svc.tls_skip_verify %}
|
|
{{ svc.name }}-transport:
|
|
insecureSkipVerify: true
|
|
{% endif %}
|
|
{% endfor %}
|
|
{% endif %}
|