ο»Ώ
A combined docker image for the unified deployment of itsToggle's, yowmamasita's, and ncw's projects -- plex_debrid, zurg, and rclone
β οΈ IMPORTANT: Docker Desktop CANNOT be used to run pd_zurg.
Docker Desktop does not support the mount propagation required for rclone mounts.
See the wiki for alternative solutions to run pd_zurg on Windows through WSL2.
See the pd_zurg Wiki for a full list of features and settings
A prebuilt image is hosted on docker hub
A prebuilt image is hosted on GitHub Container Registry
[!NOTE] The below examples are not exhaustive and are intended to provide a starting point for deployment. Additionally, the host directories used in the examples are based on Define the directory structure and provided for illustrative purposes and can be changed to suit your needs.
version: "3.8"
services:
pd_zurg:
container_name: pd_zurg
image: iampuid0/pd_zurg:latest
## Optionally, specify a specific version of pd_zurg
# image: iampuid0/pd_zurg:2.0.0
stdin_open: true # docker run -i
tty: true # docker run -t
volumes:
## Location of configuration files. If a Zurg config.yml and/or Zurg app is placed here, it will be used to override the default configuration and/or app used at startup.
- /home/username/pd_zurg/config:/config
## Location for logs
- /home/username/pd_zurg/log:/log
## Location for rclone cache if enabled
- /home/username/pd_zurg/cache:/cache
## Location for Zurg RealDebrid active configuration
- /home/username/pd_zurg/RD:/zurg/RD
## Location for Zurg AllDebrid active configuration -- when supported by Zurg
- /home/username/pd_zurg/AD:/zurg/AD
## Location for rclone mount to host
- /home/username/pd_zurg/mnt:/data:shared
environment:
- TZ=
## Zurg Required Settings
- ZURG_ENABLED=true
- RD_API_KEY=
## Zurg Optional Settings
# - ZURG_LOG_LEVEL=DEBUG
# - ZURG_VERSION=v0.9.2-hotfix.4
# - ZURG_UPDATE=true
# - PLEX_REFRESH=true
# - PLEX_MOUNT_DIR=/rclone/pd_zurg
# - ZURG_USER=
# - ZURG_PASS=
# - ZURG_PORT=8800
## Rclone Required Settings
- RCLONE_MOUNT_NAME=pd_zurg
## Rclone Optional Settings - See rclone docs for full list
# - RCLONE_UID=1000
# - RCLONE_GID=1000
# - NFS_ENABLED=true
# - NFS_PORT=8000
# - RCLONE_LOG_LEVEL=DEBUG
# - RCLONE_CACHE_DIR=/cache
# - RCLONE_DIR_CACHE_TIME=10s
# - RCLONE_VFS_CACHE_MODE=full
# - RCLONE_VFS_CACHE_MAX_SIZE=100G
# - RCLONE_ATTR_TIMEOUT=8700h
# - RCLONE_BUFFER_SIZE=32M
# - RCLONE_VFS_CACHE_MAX_AGE=4h
# - RCLONE_VFS_READ_CHUNK_SIZE=32M
# - RCLONE_VFS_READ_CHUNK_SIZE_LIMIT=1G
# - RCLONE_TRANSFERS=8
## Plex Debrid Required Settings
- PD_ENABLED=true
## To utilize plex_debrid with Plex, the following environment variables are required
- PLEX_USER=
- PLEX_TOKEN=
- PLEX_ADDRESS=
## To utilize plex_debrid with Jellyfin, the following environment variables are required - Note that plex_debrid will require addtional setup befor use with Jellyfin
# - JF_ADDRESS
# - JF_API_KEY
## Plex Debrid Optional Settings
# - PD_UPDATE=true # only works when PD_REPO set
# - PD_REPO=itsToggle,plex_debrid,main
# - SHOW_MENU=false
# - SEERR_API_KEY=
# - SEERR_ADDRESS=
## Special Features
# - AUTO_UPDATE_INTERVAL=12
# - DUPLICATE_CLEANUP=true
# - CLEANUP_INTERVAL=1
# - PDZURG_LOG_LEVEL=DEBUG
# - PDZURG_LOG_COUNT=2
# - PDZURG_LOG_SIZE=10M
# Example to attach to gluetun vpn container if realdebrid blocks IP address
# network_mode: container:gluetun
devices:
- /dev/fuse:/dev/fuse:rwm
cap_add:
- SYS_ADMIN
security_opt:
- apparmor:unconfined
- no-new-privileges
[!NOTE] The Plex server must be started after the rclone mount is available. The below example uses the
depends_on
parameter to delay the start of the Plex server until the rclone mount is available. The rclone mount must be shared to the Plex container. The rclone mount location should be added to the Plex library.
version: "3.8"
services:
plex:
image: plexinc/pms-docker:latest
container_name: plex
devices:
- /dev/dri:/dev/dri
volumes:
- /home/username/docker/plex/library:/config
- /home/username/docker/plex/transcode:/transcode
- /home/username/pd_zurg/mnt:/rclone # rclone mount location from pd_zurg must be shared to Plex container. Add to plex library
environment:
- TZ=
ports:
- "32400:32400"
depends_on: # Used to delay the startup of plex to ensure the rclone mount is available.
pd_zurg: # set to the name of the container running rclone
condition: service_healthy
docker build -t your-image-name https://github.com/I-am-PUID-0/pd_zurg.git
To use plex_debrid with Plex, the following environment variables are required: PD_ENABLED, PLEX_USER, PLEX_TOKEN, PLEX_ADDRESS
To use plex_debrid with Jellyfin/Emby, the following environment variables are required: PD_ENABLED, JF_ADDRESS, JF_API_KEY
β οΈ Note: Addtional setup required for Jellyfin
plex_debrid requires the Library collection service to be set for Trakt Collection: see the plex_debrid Trakt Collections for more details
To enable Plex library refresh with Zurg, the following environment variables are required: PLEX_REFRESH, PLEX_MOUNT_DIR, PLEX_ADDRESS, PLEX_TOKEN, ZURG_ENABLED, RD_API_KEY, RCLONE_MOUNT_NAME
To enable either Overseerr or Jellyseerr integration with plex_debrid, the following environment variables are required: SEERR_API_KEY, SEERR_ADDRESS
If you would like to enable automatic updates for plex_debrid, utilize the PD_UPDATE
environment variable. Only works when PD_REPO is set.
Additional details can be found in the pd_zurg Wiki
If you would like to enable automatic updates for Zurg, utilize the ZURG_UPDATE
environment variable.
Additional details can be found in the pd_zurg Wiki
To customize some properties of the container, the following environment
variables can be passed via the -e
parameter (one for each variable), or via the docker-compose file within the environment:
section, or with a .env file saved to the config directory -- See the wiki for more info on using the .env. Value
of this parameter has the format <VARIABLE_NAME>=<VALUE>
.
Variable | Description | Default | Required for rclone | Required for plex_debrid | Required for zurg |
---|---|---|---|---|---|
TZ |
TimeZone used by the container | ||||
RD_API_KEY |
RealDebrid API key | :heavy_check_mark: | :heavy_check_mark: | ||
AD_API_KEY |
AllDebrid API key | :heavy_check_mark: | :heavy_check_mark: | ||
RCLONE_MOUNT_NAME |
A name for the rclone mount | :heavy_check_mark: | |||
RCLONE_LOG_LEVEL |
Log level for rclone - To suppress logs set value to OFF | NOTICE |
|||
RCLONE_LOG_FILE |
Log file for rclone | ||||
RCLONE_DIR_CACHE_TIME |
How long a directory should be considered up to date and not refreshed from the backend #optional, but recommended is 10s. | 5m |
|||
RCLONE_CACHE_DIR |
Directory used for caching. | ||||
RCLONE_VFS_CACHE_MODE |
Cache mode for VFS | ||||
RCLONE_VFS_CACHE_MAX_SIZE |
Max size of the VFS cache | ||||
RCLONE_VFS_CACHE_MAX_AGE |
Max age of the VFS cache | ||||
PLEX_USER |
The Plex Username for your account | :heavy_check_mark: | |||
PLEX_TOKEN |
The Plex Token associated with PLEX_USER | :heavy_check_mark: | |||
PLEX_ADDRESS |
The URL of your Plex server. Example: http://192.168.0.100:32400 or http://plex:32400 - format must include http:// or https:// and have no trailing characters after the port number (32400). E.g., / |
:heavy_check_mark: | |||
PLEX_REFRESH |
Set the value "true" to enable Plex library refresh called by the Zurg process | false |
|||
PLEX_MOUNT_DIR |
Set the value to the mount location used within Plex to enable Plex library refresh called by the Zurg process | ||||
SHOW_MENU |
Enable the plex_debrid menu to show upon startup, requiring user interaction before the program runs. Conversely, if the plex_debrid menu is disabled, the program will automatically run upon successful startup. If used, the value must be true or false | true |
||||
PD_ENABLED |
Set the value "true" to enable the plex_debrid process | false |
:heavy_check_mark: | ||
PD_LOG_LEVEL |
The level at which logs should be captured. Only DEBUG and INFO are supported for plex_debrid - To suppress logs set value to OFF | INFO |
|||
PD_LOGFILE |
Log file for plex_debrid. The log file will appear in the /config as plex_debrid.log . If used, the value must be true or false | false |
||||
PD_UPDATE |
Enable automatic updates of plex_debrid. Adding this variable will enable automatic updates to the latest version of plex_debrid locally within the container. Only enabled if PD_REPO is set | false |
|||
PD_REPO |
The repository to use for plex_debrid. If used, the value must be a comma seperated list for the GitHub username,repository name, and optionally the branch; e.g., "itsToggle,plex_debrid,main" | None |
|||
TRAKT_CLIENT_ID |
The Trakt Client ID for plex_debrid - when not set, it will use itsToggle's trakt client ID | |
|||
TRAKT_CLIENT_SECRET |
The Trakt Client Secret for plex_debrid - when not set, it will use itsToggle's trakt secret | |
|||
AUTO_UPDATE_INTERVAL |
Interval between automatic update checks in hours. Vaules can be any positive whole or decimal point based number. Ex. a value of .5 would yield thirty minutes, and 1.5 would yield one and a half hours | 24 |
|||
DUPLICATE_CLEANUP |
Automated cleanup of duplicate content in Plex. | false |
|||
CLEANUP_INTERVAL |
Interval between duplicate cleanup in hours. Values can be any positive whole or decimal point based number. Ex. a value of .5 would yield thirty minutes and 1.5 would yield one and a half hours | 24 |
|||
PDZURG_LOG_LEVEL |
The level at which logs should be captured. See the python Logging Levels documentation for more details | INFO |
|||
PDZURG_LOG_COUNT |
The number logs to retain. Result will be value + current log | 2 |
|||
PDZURG_LOG_SIZE |
The size of the log file before it is rotated. Valid options are 'K' (kilobytes), 'M' (megabytes), and 'G' (gigabytes) | 10M |
|||
ZURG_ENABLED |
Set the value "true" to enable the Zurg process | false |
:heavy_check_mark: | ||
ZURG_VERSION |
The version of Zurg to use. If enabled, the value should contain v0.9.x or v0.9.x-hotfix.x format, or "nightly" if wanting the nightly builds from Zurg private repo (requires GITHUB_TOKEN) | latest |
|||
ZURG_UPDATE |
Enable automatic updates of Zurg. Adding this variable will enable automatic updates to the latest version of Zurg locally within the container. | false |
|||
ZURG_LOG_LEVEL |
Set the log level for Zurg - To suppress logs set value to OFF | INFO |
|||
GITHUB_TOKEN |
GitHub Personal Token for use with Zurg private repo. Requires Zurg sponsorship | false |
|||
JF_API_KEY |
The Jellyfin/Emby API Key | ||||
JF_ADDRESS |
The URL of your Jellyfin/Emby server. Example: http://192.168.0.101:8096 or http://jellyfin:8096 - format must include http:// or https:// and have no trailing characters after the port number (8096). E.g., / |
||||
SEERR_API_KEY |
The Jellyseerr or Overseerr API Key | ||||
SEERR_ADDRESS |
The URL of your Jellyseerr or Overseerr server. Example: http://192.168.0.102:5055 or http://Overseerr:5055 - format must include http:// or https:// and have no trailing characters after the port number (8096). E.g., / |
||||
ZURG_USER |
The username to be used for protecting the Zurg endpoints. | none |
|||
ZURG_PASS |
The password to be used for protecting the Zurg endpoints. | none |
|||
ZURG_PORT |
The port to be used for the Zurg server | random |
|||
NFS_ENABLED |
Set the value "true" to enable the NFS server for rclone | false |
|||
NFS_PORT |
The port to be used for the rclone NFS server | random |
The following table describes the data volumes used by the container. The mappings
are set via the -v
parameter or via the docker-compose file within the volumes:
section. Each mapping is specified with the following
format: <HOST_DIR>:<CONTAINER_DIR>[:PERMISSIONS]
.
Container path | Permissions | Description |
---|---|---|
/config |
rw | This is where the application stores the rclone.conf, plex_debrid settings.json, and any files needing persistence. CAUTION: rclone.conf is overwritten upon start/restart of the container. Do NOT use an existing rclone.conf file if you have other rclone services |
/log |
rw | This is where the application stores its log files |
/data |
rshared | This is where rclone will be mounted. Not required when only utilizing plex_debrid |
/zurg/RD |
rw | This is where Zurg will store the active configuration and data for RealDebrid. Not required when only utilizing plex_debrid |
/zurg/AD |
rw | This is where Zurg will store the active configuration and data for AllDebrid. Not required when only utilizing plex_debrid |
pd_zurg supports the use of docker secrets for the following environment variables:
Variable | Description | Default | Required for rclone | Required for plex_debrid | Required for zurg |
---|---|---|---|---|---|
GITHUB_TOKEN |
GitHub Personal Token | |
:heavy_check_mark: | ||
RD_API_KEY |
RealDebrid API key | |
:heavy_check_mark: | :heavy_check_mark: | |
AD_API_KEY |
AllDebrid API key | |
:heavy_check_mark: | :heavy_check_mark: | |
PLEX_USER |
The Plex USERNAME for your account | |
:heavy_check_mark: | ||
PLEX_TOKEN |
The Plex Token associated with PLEX_USER | |
:heavy_check_mark: | ||
PLEX_ADDRESS |
The URL of your Plex server. Example: http://192.168.0.100:32400 or http://plex:32400 - format must include http:// or https:// and have no trailing characters after the port number (32400). E.g., / | |
:heavy_check_mark: | |||
JF_API_KEY |
The Jellyfin API Key | |
:heavy_check_mark: | ||
JF_ADDRESS |
The URL of your Jellyfin server. Example: http://192.168.0.101:8096 or http://jellyfin:8096 - format must include http:// or https:// and have no trailing characters after the port number (8096). E.g., / | |
:heavy_check_mark: | |||
SEERR_API_KEY |
The Jellyseerr or Overseerr API Key | |
:heavy_check_mark: | ||
SEERR_ADDRESS |
The URL of your Jellyseerr or Overseerr server. Example: http://192.168.0.102:5055 or http://Overseerr:5055 - format must include http:// or https:// and have no trailing characters after the port number (8096). E.g., / | |
:heavy_check_mark: |
To utilize docker secrets, remove the associated environment variables from the docker-compose, create a file with the case-sensitive naming convention identified and secret value, then reference the file in the docker-compose file as shown below:
version: '3.8'
services:
pd_zurg:
image: iampuid0/pd_zurg:latest
secrets:
- github_token
- rd_api_key
- ad_api_key
- plex_user
- plex_token
- plex_address
- jf_api_key
- jf_address
- seerr_api_key
- seerr_address
secrets:
github_token:
file: ./path/to/github_token.txt
rd_api_key:
file: ./path/to/rd_api_key.txt
ad_api_key:
file: ./path/to/ad_api_key.txt
plex_user:
file: ./path/to/plex_user.txt
plex_token:
file: ./path/to/plex_token.txt
plex_address:
file: ./path/to/plex_address.txt
jf_api_key:
file: ./path/to/jf_api_key.txt
jf_address:
file: ./path/to/jf_address.txt
seerr_api_key:
file: ./path/to/seerr_api_key.txt
seerr_address:
file: ./path/to/seerr_address.txt
See the pd_zurg roadmap for a list of planned features and enhancements.
pd_zurg allows for the simultaneous or individual deployment of plex_debrid and/or Zurg w/ rclone
For additional details on deployment, see the pd_zurg Wiki
If you enjoy the underlying projects and want to buy itsToggle a beer/coffee, feel free to use the real-debrid affiliate link or send a virtual beverage via PayPal :)
If you enjoy the underlying projects and want to buy yowmamasita a beer/coffee, feel free to use the GitHub sponsor link
If you enjoy the underlying projects and want to buy Nick Craig-Wood a beer/coffee, feel free to use the website's sponsor links