- name: Ensure Jellyfin container is running docker_container: name: jellyfin image: jellyfin/jellyfin state: started restart_policy: unless-stopped published_ports: - "127.0.0.1:8096:8096" env: TZ: "Europe/Budapest" volumes: - "/home/jellyfin/config:/config" - "/home/jellyfin/cache:/cache" - "/mnt/movies:/media:ro"
- name: Ensure Jellyfin container is running docker_container: name: jellyfin image: jellyfin/jellyfin state: started restart_policy: unless-stopped published_ports: - "127.0.0.1:8096:8096" env: TZ: "Europe/Budapest" volumes: - "/home/jellyfin/config:/config" - "/home/jellyfin/cache:/cache" - "/mnt/movies:/media:ro"
- name: Ensure Jellyfin container is running docker_container: name: jellyfin image: jellyfin/jellyfin state: started restart_policy: unless-stopped published_ports: - "127.0.0.1:8096:8096" env: TZ: "Europe/Budapest" volumes: - "/home/jellyfin/config:/config" - "/home/jellyfin/cache:/cache" - "/mnt/movies:/media:ro" - Plex — the most polished option, but requires an account, has a freemium model, and phones home. Some features (hardware transcoding, mobile sync) are locked behind Plex Pass.
- Emby — started as open source but went proprietary. Similar to Plex in terms of requiring a license for key features.
- Navidrome — excellent for music, but doesn't handle video. - Read-only media: The movies directory is mounted as :ro (read-only). Jellyfin only needs to read the files for playback and metadata scanning — it should never modify the source media.
- Localhost binding: Following the same pattern as all my other services, the port is bound to 127.0.0.1 and accessed through my Nginx reverse proxy at https://jellyfin.arcade-lab.io.
- Config and cache separation: Jellyfin stores its database, metadata, and settings in /config, and uses /cache for image resizing and other temporary data. Keeping them separate makes backups cleaner — you only need to back up /config. - Checks that Docker is installed
- Creates the config and cache directories
- Starts the Jellyfin container with the correct volumes, ports, and environment variables - On-demand streaming — a Netflix-like interface for browsing and watching my movie collection from any device on the network.
- Metadata and organization — Jellyfin automatically fetches posters, descriptions, ratings, and subtitles for my movies, making the library easy to browse.
- Fully automated deployment — one Ansible playbook sets up everything from directories to the running container.