{"id":16463284,"url":"https://github.com/leoverto/jellyfin-hcloud","last_synced_at":"2025-10-27T10:31:20.991Z","repository":{"id":41239061,"uuid":"343638842","full_name":"LeoVerto/jellyfin-hcloud","owner":"LeoVerto","description":"Automatically set up Jellyfin on Hetzner Cloud using Terraform, Ansible and Docker Compose","archived":false,"fork":false,"pushed_at":"2022-12-23T15:01:46.000Z","size":51,"stargazers_count":6,"open_issues_count":2,"forks_count":2,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-02-01T05:03:59.303Z","etag":null,"topics":["ansible","ansible-playbook","docker","docker-compose","hcloud","hetzner","hetzner-cloud","jellyfin","terraform","traefik","traefik-v2"],"latest_commit_sha":null,"homepage":"","language":"Jinja","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/LeoVerto.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-03-02T03:54:22.000Z","updated_at":"2024-09-19T22:48:17.000Z","dependencies_parsed_at":"2023-01-30T18:45:40.076Z","dependency_job_id":null,"html_url":"https://github.com/LeoVerto/jellyfin-hcloud","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LeoVerto%2Fjellyfin-hcloud","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LeoVerto%2Fjellyfin-hcloud/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LeoVerto%2Fjellyfin-hcloud/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LeoVerto%2Fjellyfin-hcloud/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/LeoVerto","download_url":"https://codeload.github.com/LeoVerto/jellyfin-hcloud/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":238480681,"owners_count":19479529,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ansible","ansible-playbook","docker","docker-compose","hcloud","hetzner","hetzner-cloud","jellyfin","terraform","traefik","traefik-v2"],"created_at":"2024-10-11T11:14:00.949Z","updated_at":"2025-10-27T10:31:15.670Z","avatar_url":"https://github.com/LeoVerto.png","language":"Jinja","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Set up Jellyfin on Hetzner Cloud using Terraform and Ansible\nThis reposistory provides both an Ansible playbook to automatically\ninstall Jellyfin on a Debian server as well as\na Terraform configuration to provision a server at Hetzer Cloud,\nrun the playbook, and set up DNS records.\n\nJellyfin is set up using the official Docker image with\nTraefik as a reverse proxy for TLS termination.\n\nThe playbook handles some basic hardening of the server using\nroles from [dev-sec/ansible-collection-hardening](https://github.com/dev-sec/ansible-collection-hardening/).\nThe SSH server is configured to a standard similar to the\n[Mozilla Modern OpenSSH guideline](https://infosec.mozilla.org/guidelines/openssh).\nThe TLS configuration is rated as \"A+\" by [Qualys SSL Labs](https://ssllabs.com/).\n\nAs of the time of writing, the playbook is really only intended\nto work with an existing Jellyfin config directory, see below for details and how to correctly use it.\n\n## Requirements\nYou need to have ansible, terraform and python-hcloud installed.\n\nIf the latter isn't available as a package on your distribution, install it using `pip --user install python-hcloud`.\n\n## Configuration\nEnter the terraform directory and create a file `terraform.tfvars` defining all the required variables\nfrom `variables.tf`.\n\nIf your media files can be directly played by all clients, a `cx11` instance should work fine,\nbut as soon as clients require transcoding, you will need a bigger one.\n\nIdeally you should use an instance with dedicated CPU resources.\nThe `ccx31` type should be sufficient for transcoding at least five different streams at the same time.\n\nThis playbook is intended to be used with an existing Jellyfin configuration.\nCopy your Jellyfin `config` directory to `ansible/jellyfin-config`.\n\n### **DANGER**\n\nIf you do not do this, the Jellyfin install wizard will be accessible\non the web and accessible by absolutely ***anyone***; who could then\ncreate an admin account and use the server to serve potentially\nillegal content. You have been warned.\n\nAs a workaround you may change the Traefik config in `ansible/roles/jellyfin/templates`\nto only allow local local connections until the wizard has been\ncompleted.\n\nIf you figure out a better way to handle this, feel free to make a pull request.\nI'd be happy to accept it!\n\n## Running\nAgain in the `terraform` directory run `terraform apply`, enter \"yes\", and sit back and watch\nas your server is being provisioned, hardened, and Jellyfin is set up.\n\nOnce this is done you can connect to the server using the user name\n`deploy` and upload media to `/srv/jellyfin/jellyfin/media`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fleoverto%2Fjellyfin-hcloud","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fleoverto%2Fjellyfin-hcloud","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fleoverto%2Fjellyfin-hcloud/lists"}