# Synology !!! note Being I don't have a Synology myself and I kind of hate the Synology GUI for the dockers, I'm doing this with the use of docker-compose. This works like 10x faster then the GUI and after adding it shows up in the GUI. Thanks to faxity for the initial compose that I used to create the Synology Guide. We need to get some information that we need later to setup the docker-compose file. ## PUID and PGID In order for the Docker container to access the shares on the Synology, we need to give it the same permissions as your main user who has access to those shares. For this we need to figure out the PUID and the PGID of the user having access to your shares. You will need to SSH into your Synology. If you didn't already enable it you need to do that first ![!synology-control-panel](images/synology-control-panel.png) Then use a program like Putty and SSH to your Synology. Login if you get a popup asking if you want to trust the key, Just press `OK` or `ACCEPT` Enter the login information of your main Synology user account. ![!synology-id](images/synology-id.png) Once logged in type `id`. This will show your UID (aka PUID). Which in this screenshot is `1026` for the administrator and the GID (aka PGID) which is `100` for the users group. Remember these values for later use. !!! note Yes we know it's not recommended to use the admin account but if you already know this then you wouldn't need to read this ;) ------ ## Folder Structure !!! attention To get Hardlinks and Atomic-Moves working with your Synology you will need to make use of **ONE** share with subfolders. For this example we're going to make use of a share called `data`. On the host (Synology) you will need to add `/volume1/` before it. So `/volume1/data` The `data` folder has sub-folders for `torrents` and `usenet` and each of these have sub-folders for `tv`, `movie` and `music` downloads to keep things neat. The `media` folder has nicely named `TV`, `Movies` and `Music` sub-folders, this is your library and what you’d pass to Plex, Emby or JellyFin. These subfolders you need to create your self. *I'm using lower case on all folder on purpose, being Linux is case sensitive.* ```none data ├── torrents │ ├── movies │ ├── music │ └── tv ├── usenet │ ├── movies │ ├── music │ └── tv └── media ├── movies ├── music └── tv ``` --8<-- "includes/hardlinks/breakdown-folder-structure.md" ------ ## Appdata Your appdata will be stored in `/volume1/docker/appdata/{appname}` These `{appname}` sub folders you need to create your self. (*This is a limitation of the Synology*) We're going to do this in Putty or a similar program. ```bash sudo mkdir /volume1/docker/appdata cd /volume1/docker/appdata sudo mkdir radarr sonarr bazarr plex tautulli pullio # The following is needed for plex transcode location sudo mkdir /tmp/plex ``` ??? bug "plex transcode location `/tmp/plex` - [CLICK TO EXPAND]" The extra created `/tmp/plex` folder for plex's transcode location won't survive a reboot. so you will need to create in your task scheduler a "triggered task" that runs on startup of the nas. Add the following command as root: `mkdir /tmp/plex/` ![!Create task](images/synology-create-task.png) ![!Create task](images/synology-task-settings.png) If you need extra help please come to [![Discord chat](https://img.shields.io/discord/492590071455940612?style=for-the-badge&color=4051B5&logo=discord)](https://trash-guides.info/discord){:target="_blank" rel="noopener noreferrer"} So your appdata folder will look like this. ```bash ls -al /volume1/docker/appdata ``` ```none docker └── appdata ├── radarr ├── sonarr ├── bazarr ├── plex ├── pullio └── tautulli ``` ------ ## Needed files First we will download the `docker-compose.yml` file Download this [docker-compose.yml](https://github.com/TRaSH-/Guides-Synology-Templates/blob/main/docker-compose/docker-compose.yml){:target="_blank" rel="noopener noreferrer"} to your `/volume1/docker/appdata` location so you got your important stuff together. ```bash sudo wget https://raw.githubusercontent.com/TRaSH-/Guides-Synology-Templates/main/docker-compose/docker-compose.yml ``` ??? question "What's included and What's not included - [CLICK TO EXPAND]" This docker-compose file will have the following docker containers included. - Radarr - Sonarr - Bazarr (Subtitle searcher and downloaded) - Plex - Tautulli What's not included. I didn't add a downloader to it because it depends on what you prefer usenet/torrents and which client you prefer, so i created a new [Repository](https://github.com/TRaSH-/Guides-Synology-Templates){:target="_blank" rel="noopener noreferrer"} on Github where I provide and maintain some templates that you can find in the `template` folder ready to use with the main `docker-compose.yml`. The only thing you need to do is copy/paste what's inside the `.yml` file in to the main `docker-compose.yml`, the template also has the command what you need to use to create the [appdata](#appdata) folder that we explained earlier. Second we will download the `.env` file Download this [.env](https://github.com/TRaSH-/Guides-Synology-Templates/blob/main/docker-compose/.env){:target="_blank" rel="noopener noreferrer"} to your `/volume1/docker/appdata` location so you got your important stuff together. ```bash sudo wget https://raw.githubusercontent.com/TRaSH-/Guides-Synology-Templates/main/docker-compose/.env ``` !!! attention :bangbang: MAKE SURE THE FILE KEEPS THE ORIGINAL NAME `.env` WITH THE DOT BEFORE IT :bangbang: ------ ### Changes you need to do The `.env` we downloaded holds the variables/information you need to change so everything works (I added also a description in the `.env` file) !!! info "" The `.env` holds more variables/information for other containers 1. DOCKERCONFDIR (only change this if you know what you're doing and decide to use another path then in this guide used) 1. DOCKERDATADIR (only change this if you know what you're doing and decide to use another path then in this guide used) 1. PUID/PGID (this info you got earlier from [HERE](#puid-and-pgid)) 1. TZ (Change to your timezone) 1. Install and Create a task scheduler for Pullio, so your containers stay up to date. ------ #### Pullio - Auto update docker-compose the correct way First you need to download Pullio ```bash sudo curl -fsSL "https://raw.githubusercontent.com/hotio/pullio/master/pullio.sh" -o /usr/local/bin/pullio sudo chmod +x /usr/local/bin/pullio ``` For Pullio you will need to create in your task scheduler a "triggered task" that runs for example at 4am at night with root privileges. Add the following 2 lines to your triggered task ```bash /usr/local/bin/pullio > /volume1/docker/appdata/pullio/pullio.log 2>&1 ``` More info about Pullio [HERE](https://hotio.dev/pullio/){:target="_blank" rel="noopener noreferrer"} ------ ### Permissions Now we need to make sure that the newly created files and folders have the correct permissions. !!! note If you're using another user then `admin` then you need to change it in the commands below !!! ```bash sudo chown -R admin:users /volume1/data /volume1/docker sudo chmod -R a=,a+rX,u+w,g+w /volume1/data /volume1/docker ``` ------ ## Run the Docker Compose !!! important make sure you deleted/removed all your existing dockers from the GUI and also remove your native installs of these applications !!! When you did all the above steps you only need to type the following in your `/volume1/docker/appdata` ```bash cd /volume1/docker/appdata sudo docker-compose up -d ``` You will notice that all the images will be downloaded, and after that the containers will be started. If you get a error then look at the error what it says and try to fix it. If you still got issues then put your used docker-compose.yml on [0bin](https://0bin.net/){:target="_blank" rel="noopener noreferrer"} and join the guides-discord [here](https://trash-guides.info/discord){:target="_blank" rel="noopener noreferrer"} and provide the pastebin link with the error, have patience because of timezone differences. ------ **Don't forget to look at the [Examples](/Hardlinks/Examples/) how to setup the paths inside your applications.** !!! attention If you need to do any changes only edit the `docker-compose.yml` file and activate the changes when you type `sudo docker-compose up -d` again. Any changes you do/did in the GUI will be reverted when you run the docker-compose. Just don't use the GUI !!! --8<-- "includes/hardlinks/docker-compose-commands.md"