Upon finishing the setup for Kronos, the first thing you should do is attach your first node to the system.
If you intend to use Emby invites, the below guide is not required - Install emby however you like, Kronos only requires the ip:port(or domain) and the emby api key!
For Kronos, we recommend running all nodes with the following specs;
You can watch a short video on how to configure Hetzner servers in the rescue system, to fulfill the above requirements HERE
We highly recommend to configure your nodes disk system using XFS and zfs with no raid, to allow instant deployment when extract folders are moved from /deployment to the customers folder! Additionally, make sure appbox containers are spawned with the same UserID as the tarballs are created as, to allow instant deployments!(this is covered further down)
Note! If you deviate from recommended setup, please accept limited support and the fact that all aspects of Kronos may not work as intended!
After installing the underlying system and setting up LVM, dependencies must be installed.
For Kronos, we assume that all additional volumes docker containers need to access(like media files) are stored in /media/storagebox
by default. This can be changed in Kronos settings under Settings / Deployment
and then 'Primary storage location
'
The prep script below, will create these folders
Run the prep script provided HERE (FOR HETZNER) or HERE (FOR ALL OTHER HOSTS) - Open it in a text editor to check it if you are curious, the script will do the following;
You can modify the script if you wish, however docker and the networks are required
For Kronos to work, 2 docker networks must be created on each node running containers. The script above, creates these automatically for you - However, if you want to create them manually, or if you run cloudbox, you will need to change the network subnet to not conflict with other containers.
The following network commands are used for Kronos. Change the following parameters to modify the network;
Make sure your new entries all are within the same network, look at the examples below
docker network create \
--driver=bridge \
--subnet=172.18.0.0/16 \
--ip-range=172.18.5.0/24 \
--gateway=172.18.0.1 \
--opt com.docker.network.bridge.host_binding_ipv4=0.0.0.0 \
--opt com.docker.network.bridge.name=plexworks \
--opt com.docker.network.bridge.enable_icc=true \
--opt com.docker.network.driver.mtu=1500 \
plexworks
The Tautulli network range is currently not configurable, so please do not change the subnet - The command below is illustrated for the purpose of creating the network manually via terminal
docker network create \
--driver=bridge \
--subnet=172.19.0.0/16 \
--ip-range=172.19.5.0/24 \
--gateway=172.19.0.1 \
--opt com.docker.network.bridge.host_binding_ipv4=0.0.0.0 \
--opt com.docker.network.bridge.name=tauworks \
--opt com.docker.network.bridge.enable_icc=true \
--opt com.docker.network.driver.mtu=1500 \
tauworks
In order to deploy containers a pre-loaded plex image is required, this can either be a blank image, or an image containing content already scanned in. If you intend to use a blank image, you still need to follow this guide!
Add a node to Kronos first
Before adding a node, make sure to have some products configured first! Check this article HERE on how to configure products
In the top left menu, navigate to "Server Management" and click the "Add node" just below the "Nodes" table
In the dialog, enter the name of the node and pick the service type, the following types are available
Pick the type of service that's intended for this node, and fill out the rest of the dialog. Make sure to assign the appropriate products you added earlier, to the node.
If you intend to use a pre-loaded plex image, set "available spots" to 0 until the image is complete!
If you set "GPU" to Enabled, make sure you have enabled the iGPU on your server so it is accessible in /dev/dri - Otherwise deployments will fail!. If you are using hetzner, our hetzner node script will enable this for you, alternatively, follow this guide HERE
If adding a plex appbox node, some steps must be taken to allow for instant deployments of pre-configured images.
In order for Kronos to deploy a pre-configured image almost instantly and apply settings during deployment for plex, the following requirements must be fulfilled
Kronos allows for sudo use, however we strongly recommend NOT to use sudo to prevent incorrect permissions on container creation. Make sure that the user configured in Kronos to spawn the containers, also owns the deployment image, and also owns the appbox deployment directory
The SSH key you upload for node control, will define the user Kronos use to interact with your nodes. In the Kronos menu under;
App Management -> Deployment make sure that Spawn user ID equals the userID of the user used to interact with your node!
If you picked "Plex Appbox" a background job will begin preparing deployment folders based on your library image until the "Total allowed customers" is reached
Your node is now added, and ready to receive customers!
In order to finish this step, your WHMCS installation must have a client, and a product configured
Note! Before building the image
It is important the the user that runs your appbox containers, owns the data directory that you save your appbox data within. The below process will create a compressed image of an appbox installation, preserving the filesystem permissions at the time. When it is de-compressed, it will maintain those same permissions if the user you use, to access your nodes via Kronos is root, or allowed to set permissions.
After adding the node, navigate to Integrations / Plex
and pick one of the 2 options;
If this is your first Kronos setup, pick 1.
Follow the dialogue and deploy the image container, and claim it. Once claimed, visit plex.tv and configure the image how you want it, set your desired server settings, create your libraries if you want the image to have libraries, and scan in any content that you want to be present in the image.
Once done, return to Kronos and complete the 'Create image' dialogue, any appboxes deployed on the node from this point on, will make use of the new image
After creating the image above, the image will contain a file called "Preferences.xml" this file contains a lot of the settings you applied to the plex server during the image creation process, such as scanning settings, default transcode limit, etc etc.
It is important you edit the Preferences.xml and remove the machine identifiers, before using it with Kronos! Open the Preferences.xml, locate and remove the points below!
- MachineIdentifier
- ProcessedMachineIdentifier
- AnonymousMachineIdentifier
This Preferences.xml
need to be applied to each product within Kronos, so that when a deployment is made and when a customer makes use of the "Reset Plex config" function, the correct Preferences.xml
file is added to their appbox.
Make sure to unclaim the server from which you are grabbing the Preference.xml file, to make sure theres no token or other login information!
Kronos will handle applying the 'Transcode' limit value, based on what you input when creating the products in Kronos - So you do NOT need to create a Preferences.xml, for each product with the transcode values!
Grab the Preferences.xml
from your image, you can edit it however you like. Then head to the Kronos dashboard;
In here, set a name for the file, upload it and attach it to those products that should be making use of this setting template
You now have an image ready for deployments! Make sure to place this in
/opt/plexdocker
on all nodes that should make use of it
For Emby, you can follow the same guidelines as for plex above - Install the prep script, install Emby in docker manually and tar it to easily expand.
However, you can also simply link Emby nodes to Kronos manually. Install Emby where you want, however you want. In Kronos, Click Add Node and enter the Emby domain/IP and the API key, and the node will be ready for use immediately!