HCLOUD-RFFMPEG
February 21, 2023 ยท View on GitHub
NOTICE!
I've rewritten this script in Go which is much easier to use and does more things automatically.
Kubernetes
Check this out!
Setup
- Set the required environment variables
- Share the volume of rffmpeg config directory with Jellyfin
- Make sure the
cloud-initstring works manually first - All of your workers need Jellyfin's
/config/transcodesand/config/data/subtitlesdirectories available and mounted at the same path as the Jellyfin host. Best solution is to useNFSv4withsyncoption. - Also, I'm assuming you're using Hetzner Storage Box so the defaults will work for you, but if you aren't using a network drive for media you will need to share that directory via NFS as well.
If you need a reference docker compose file use this one.
Recommended images
I made and tested these images to use with this script:
Environment variables
| Name | Default value | Description |
|---|---|---|
| STATE_DIR | /config | Path to rffmpeg config |
| LOG_FILE | STATE_DIR + /log/hcloud-rffmpeg.log | Path to log file |
| DB_PATH | STATE_DIR + /rffmpeg/rffmpeg.db | Path to SQLite database file used by rffmpeg script |
| SSH_KEY | STATE_DIR + /rffmpeg/.ssh/id_ed25519.pub | Path to rffmpeg public ssh key generated by rffmpeg on jellyfin host |
| JELLYFIN_LAN_ONLY_IP | Must be explicitly set! | The IP address of the jellyfin host / nfs share that workers use to access Jellyfin's transcodes and subtitles directories |
| HCLOUD_API_TOKEN | Must be explicitly set! | Hetzner Cloud API token |
| MEDIA_USERNAME | "" | Username for the media share |
| MEDIA_PASSWORD | "" | Password for the media share |
| SERVER_TYPE | cx21 | The type of server from Hetzner that should be used for workers |
| IMAGE_TYPE | docker-ce | The OS image used on workers, docker-ce is Ubuntu with Docker preinstalled |
| SSH_KEY_NAME | root@jellyfin | The name of the ssh key that will be saved on Hetzner and used for connecting to workers |
| NETWORK_NAME | rffmpeg-workers | The name of the network created for local communication between the workers and the Jellyfin host |
| FIREWALL_NAME | rffmpeg-workers | The name of the firewall created for workers, recommended to block access to ssh over the internet |
| PLACEMENT_GROUP_NAME | rffmpeg-workers | The name of the placement group created to spread the workers over the datacenter |
| LOCATION_NAME | nbg1 | The name of the location in which the workers should be created |
| CLOUD_CONFIG | string | The string that setups the workers after creation, the default uses my docker compose and inserts needed env variables |
| JOBS_PER_WORKER | 2 | Number of jobs allowed per worker, the default of 2 tells the script to only create a new worker if there are 2 or more jobs on the previous one. |