====== Systems - Media Server - Set Up the Docker Environment ======
===== Directory Structure =====
Setup a specific directory structure so have everything centralized in one place:
mkdir -p /home/peter/docker/appdata
mkdir -p /home/peter/docker/compose
mkdir -p /home/peter/docker/logs
mkdir -p /home/peter/docker/scripts
mkdir -p /home/peter/docker/secrets
mkdir -p /home/peter/docker/shared
**NOTE:**
* **appdata** - this directory will store the data for all apps and services.
* **compose** - this directory will have a sub-directory for each host, inside which all the individual Docker Compose files will be stored.
* **logs** - to centralize all relevant logs.
* **scripts** - to store all scripts.
* **secrets** - to store credentials used by apps securely.
* **shared** - to store shared information.
----
===== Set permissions for the secrets directory =====
sudo chown peter:docker /home/peter/docker/secrets
sudo chmod 600 /home/peter/docker/secrets
**NOTE:** Setting permissions of the **secrets** directory to 600, makes this directory accessible only to the primary user, adding a layer of security while accessing sensitive information.
----
===== Create and set permissions for the .env file =====
touch /home/peter/docker/.env
sudo chown peter:docker /home/peter/docker/.env
sudo chmod 600 /home/peter/docker/.env
**NOTE:** **.env** - to store credentials used by apps securely as variable names.
* Setting permissions of the **secrets** directory to 600, makes this directory accessible only to the specified user, adding a layer of security while accessing sensitive information.
----
===== Create the mediaserver docker-compose file =====
touch /home/peter/docker/docker-compose-mediaserver.yml
**NOTE:** This is the master configuration file for all services.
----
===== Set Root Directory Permissions =====
==== Install facl ====
sudo apt install acl
----
==== Set permission for /home/peter/docker direcrory ====
sudo chmod 775 /home/peter/docker
sudo setfacl -Rdm u:peter:rwx /home/peter/docker
sudo setfacl -Rm u:peter:rwx /home/peter/docker
sudo setfacl -Rdm g:docker:rwx /home/peter/docker
sudo setfacl -Rm g:docker:rwx /home/peter/docker
**NOTE:** This provides access to the contents of the docker root directory to the docker group.
* Similar acls may also need to be set on the media directories, which will be defined later, such as sonarr, radarr, etc. or they may throw permissions errors.
* After doing the above, you will notice a "+" at the end of permissions (e.g. drwxrwxr-x+) for docker root directory and its contents.
* This indicates that ACL is set for the directory/file.
**WARNING:** These permissions may not seem restrictive enough.
* Feel free to change as required, but keep for now to ensure a smooth setup.
----
===== Populate the Environmental Variables (.env) file =====
Add the following environmental variables:
PUID='1000'
PGID='1000'
TZ='Europe/Jersey'
USERDIR='/home/peter'
DOCKERDIR='/home/peter/docker'
MEDIADIR1='/mnt/media'
HOSTNAME='mediaserver'
**NOTE:**
* **PUID** and **PGID** - the user ID and group ID of the Linux user (peter), who we want to run the home server apps as.
* Both of these can be obtained using the **id** command: id
* **TZ** - the time zone that you want to set for your containers.
* Get your TZ from this [[https://en.wikipedia.org/wiki/List_of_tz_database_time_zones|timezone database]].
* **USERDIR** - the path to the home directory of the current user.
* **DOCKERDIR** - the docker root directory that will house all persistent data folders for docker apps.
* **MEDIADIR1** - the directory that stores the media, downloads, and other stuff.
* This could be an external drive or a network directory.
* **HOSTNAME** - is the name of the docker host.
* To determine the hostname run: hostname
----
===== Create the Docker Compose Mediaserver Directory =====
mkdir /home/peter/docker/compose/mediaserver
**NOTE:** The previously created **docker-compose-mediaserver.yml** is the main Docker Compose file.
* But, the individual Docker Compose files for the apps will be created inside the compose directory.
----
===== References =====
https://en.wikipedia.org/wiki/List_of_tz_database_time_zones