{"id":14969081,"url":"https://github.com/ahuh/docker-torrent-factory","last_synced_at":"2026-03-02T22:38:52.351Z","repository":{"id":87092125,"uuid":"259063918","full_name":"ahuh/docker-torrent-factory","owner":"ahuh","description":"Docker compose dedicated to ARM / x86 / x64 processors, hosting a complete torrent factory, or seedbox.","archived":false,"fork":false,"pushed_at":"2025-01-24T07:59:55.000Z","size":999,"stargazers_count":24,"open_issues_count":2,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-04-07T16:48:29.896Z","etag":null,"topics":["armhf","docker-compose-files","joal","mariadb-server","medusa","minidlna-docker","nginx-docker","openvpn-client","portainer-ce","qnap","radarr","self-hosting","torrent-client","transmission-torrent-client","watchtower","wd-mycloud","x86-x64"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ahuh.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-04-26T15:24:08.000Z","updated_at":"2025-03-01T23:57:48.000Z","dependencies_parsed_at":"2023-03-13T19:47:49.862Z","dependency_job_id":"9d079088-81ae-47ea-86f8-61607c2da5ea","html_url":"https://github.com/ahuh/docker-torrent-factory","commit_stats":{"total_commits":31,"total_committers":2,"mean_commits":15.5,"dds":"0.032258064516129004","last_synced_commit":"b1327312a839060da8280e36a17c87fac73413dd"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ahuh/docker-torrent-factory","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ahuh%2Fdocker-torrent-factory","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ahuh%2Fdocker-torrent-factory/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ahuh%2Fdocker-torrent-factory/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ahuh%2Fdocker-torrent-factory/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ahuh","download_url":"https://codeload.github.com/ahuh/docker-torrent-factory/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ahuh%2Fdocker-torrent-factory/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30022939,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-02T22:30:10.381Z","status":"ssl_error","status_checked_at":"2026-03-02T22:23:34.650Z","response_time":60,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["armhf","docker-compose-files","joal","mariadb-server","medusa","minidlna-docker","nginx-docker","openvpn-client","portainer-ce","qnap","radarr","self-hosting","torrent-client","transmission-torrent-client","watchtower","wd-mycloud","x86-x64"],"created_at":"2024-09-24T13:41:06.196Z","updated_at":"2026-03-02T22:38:52.321Z","avatar_url":"https://github.com/ahuh.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Docker Torrent Factory\nDocker compose dedicated to ARM / x86 / x64 processors, hosting a complete torrent factory or seedbox\n\nThis project is based on existing projects, combined and configured to work on a docker-compatible NAS, or any docker-compatible device (like Raspberry Pis).\n\nSee GitHub repositories / Docker Hub images:\n| Container | URLs |\n|-----------|------|\n| **Transmission-OpenVPN**\u003cbr /\u003eTorrent server secured by VPN connection | \u003cul\u003e\u003cli\u003ehttps://github.com/haugene/docker-transmission-openvpn\u003c/li\u003e\u003cli\u003ehttps://hub.docker.com/r/haugene/transmission-openvpn\u003c/li\u003e\u003c/ul\u003e|\n| **Jackett**\u003cbr /\u003eAPI Support for your favorite torrent trackers  | \u003cul\u003e\u003cli\u003ehttps://github.com/Jackett/Jackett\u003c/li\u003e\u003cli\u003ehttps://hub.docker.com/r/linuxserver/jackett\u003c/li\u003e\u003c/ul\u003e|\n| **JOAL**\u003cbr /\u003eRatio Master clone with web UI to boost torrent seed ratio | \u003cul\u003e\u003cli\u003ehttps://github.com/anthonyraymond/joal\u003c/li\u003e\u003cli\u003ehttps://hub.docker.com/r/anthonyraymond/joal\u003c/li\u003e\u003c/ul\u003e|\n| **Medusa**\u003cbr /\u003eTV shows manager and auto-downloader, connected to torrent server | \u003cul\u003e\u003cli\u003ehttps://github.com/linuxserver/docker-medusa\u003c/li\u003e\u003cli\u003ehttps://hub.docker.com/r/linuxserver/medusa\u003c/li\u003e\u003c/ul\u003e|\n| **Radarr**\u003cbr /\u003eMovies manager and auto-downloader, connected to torrent server | \u003cul\u003e\u003cli\u003ehttps://github.com/Radarr/Radarr\u003c/li\u003e\u003cli\u003ehttps://hub.docker.com/r/linuxserver/radarr\u003c/li\u003e\u003c/ul\u003e|\n| **nginx**\u003cbr /\u003eReverse proxy, used to expose services as HTTPS with SSL certificates and basic authentication | \u003cul\u003e\u003cli\u003ehttps://github.com/nginxinc/docker-nginx\u003c/li\u003e\u003cli\u003ehttps://hub.docker.com/_/nginx\u003c/li\u003e\u003c/ul\u003e|\n| **MiniDLNA**\u003cbr /\u003eUPnP / DLNA service, used to publish media files on the local network | \u003cul\u003e\u003cli\u003ehttps://github.com/vladgh/docker_base_images/tree/master/minidlna\u003c/li\u003e\u003cli\u003ehttps://hub.docker.com/r/vladgh/minidlna\u003c/li\u003e\u003c/ul\u003e|\n| **MariaDB**\u003cbr /\u003eDatabase service, used to host and share video and music databases for Kodi clients on the local network | \u003cul\u003e\u003cli\u003ehttps://github.com/linuxserver/docker-mariadb\u003c/li\u003e\u003cli\u003ehttps://hub.docker.com/r/linuxserver/mariadb\u003c/li\u003e\u003c/ul\u003e|\n| **Pyphotorg**\u003cbr /\u003ePhoto organizer and deduplicator, used to manage photos / videos on the NAS | \u003cul\u003e\u003cli\u003ehttps://github.com/ahuh/docker-torrent-factory/tree/master/pyphotorg\u003c/li\u003e\u003cli\u003ehttps://hub.docker.com/r/ahuh/pyphotorg\u003c/li\u003e\u003c/ul\u003e|\n\nTable of contents:\n- [Docker Torrent Factory](#docker-torrent-factory)\n  - [1) How does it work ?](#1-how-does-it-work-)\n  - [2) Features](#2-features)\n  - [3) Prerequisites](#3-prerequisites)\n    - [3.1) VPN subscription](#31-vpn-subscription)\n    - [3.2) SSL certificates](#32-ssl-certificates)\n    - [3.3) Docker installation](#33-docker-installation)\n      - [3.3.1) QNAP NAS](#331-qnap-nas)\n      - [3.3.2) WD MyCloud EX2 Ultra OS3](#332-wd-mycloud-ex2-ultra-os3)\n      - [3.3.3) General instructions](#333-general-instructions)\n  - [4) Installation](#4-installation)\n    - [4.1) Preparation](#41-preparation)\n    - [4.2) Directories](#42-directories)\n      - [4.2.1) Directory structure on host-side](#421-directory-structure-on-host-side)\n      - [4.2.2) Directory structure on container-side](#422-directory-structure-on-container-side)\n    - [4.3) Prepare environment file](#43-prepare-environment-file)\n  - [5) Usage](#5-usage)\n    - [5.1) Launch for the first time](#51-launch-for-the-first-time)\n    - [5.2) Launch or update DTF services](#52-launch-or-update-dtf-services)\n    - [5.3) Terminate DTF or Monitor services](#53-terminate-dtf-or-monitor-services)\n    - [5.4) Other commands](#54-other-commands)\n  - [6) Additional configuration](#6-additional-configuration)\n\n## 1) How does it work ?\nThis repository contains a main `docker-compose.yml` file, configured to launch each dedicated service (docker containers). This diagram explains how it works:\u003cbr /\u003e\u003cbr /\u003e\n![Architecture of the Docker Torrent Factory](./resources/docker-torrent-factory.png)\n\nOther docker compose files are available :\n* The `docker-compose-configurator.yml` file is provided to deploy a **Configurator** service, that you may optionally use to automatically configure each service to work together. This one is a \"one-shot\" process: you may launch it one time before launching the main docker-compose file, in order to generate the configuration files for each service (not possible for Radarr: must be manually configured in web UI). Note that you still can configure each service with the dedicated web UI (Medusa, Radarr, etc) to do additional settings.\n* The `docker-compose-monitor.yml` file is provided to deploy a **Portainer** service that you may use to monitor and manage your docker environment with a web UI, and a **Watchtower** service that automatically updates docker images and containers.\n\n## 2) Features\n* **VPN integration** to secure peer-to-peer downloads and uploads\n* **Bittorent client** with web UI (Transmission)\n* Bittorrent **ratio booster** with web UI (JOAL)\n* **Automatic downloader for TV shows** (Medusa), connected to the Bittorent client\n* **Automatic downloader for movies** (Radarr), connected to the Bittorent client\n* **API Proxy for torrent trackers** (Jackett), connected to the automatic donwloader for TV shows\n* **Reverse-proxy** (nginx), securing (basic authentication, SSL certificates) and exposing services on internet (Medusa, Radarr, Transmission)\n* **UPnP / DLNA** server (MiniDLNA) to broadcast your media files in your local network\n* **HTTP Proxy server** to share the VPN connection in your local network\n* **Shared video and music databases** (MariaDB) for Kodi clients in your local network\n* **Personal photos / videos organizer and deduplicator** (Pyphotorg), executed once a week\n* **Configurator service** (DTF-Configurator) available to initialize configuration files for all services\n* **Monitor services** (Portainer and Watchtower) available to manager docker with web UI, and to automatically update all container and images once a day\n* **Selection of services to enable** using an environment config file (you do not need to use everything !)\n\n## 3) Prerequisites\n\n### 3.1) VPN subscription\nYou need a VPN subscription before installing the torrent factory. You will have to specify the VPN provider, user login and password to use in the OpenVPN service. See supported providers here: http://haugene.github.io/docker-transmission-openvpn/supported-providers/\n\n### 3.2) SSL certificates\nIf you wish to secure external access to your services web UIs with nginx, you will need to provide an SSL certificate. A self-signed certificate will do the trick, for example see this tutorial for generation: https://devcenter.heroku.com/articles/ssl-certificate-self. You will have to provide two files : `server.key` and `server.crt`.\n\n### 3.3) Docker installation\nYou have to install Docker on the device or NAS that will host the Docker Torrent Factory.\n\n#### 3.3.1) QNAP NAS\nInstall the `Container Station` add-on in the QTS web UI, and enable SSH access. It provides docker and docker compose available in SSH.\n\n#### 3.3.2) WD MyCloud EX2 Ultra OS3\nOn WD MyCloud EX2 Ultra, you need to replace the old docker install by a fresh one, and then install docker-compose.\nFor this, follow these steps:\n* Connect to the NAS with SSH as `root` user (see manual for details)\n* Stop the docker daemon: `/usr/sbin/docker_daemon.sh stop`\n* Download the following apps from the WD community site: https://wdcommunity.com/\n  * Last version of Entware: `MyCloudEX2Ultra_entware_1.05.bin`\n  * Last version of Docker: `MyCloudEX2Ultra_docker_19.03.8.bin`\n* Install the downloaded apps using the MyCloud web UI: upload and install apps (see manual for details)\n* Install and upgrade python3 and pip :\n```bash\n$ # Install on MyCloud EX2 Ultra\n$ opkg update\n$ opkg install python3-pip\n$ pip3 install --upgrade pip\n```\n* Install docker-compose :\n```bash\n$ pip install setuptools\n$ # Install on MyCloud EX2 Ultra : limit to 1.23.x, because \u003e=1.24 requires to build crypto libs in ARM\n$ #   (not possible with opkg because of lack of dev packages)\n$ pip install docker-compose~=1.23.0\n```\n\n#### 3.3.3) General instructions\nOn other NAS / Raspberry Pi devices, just install last versions of docker and docker-compose.\n\n## 4) Installation\nClone this repo in a shared directory on your NAS / device. You may now adapt the files to your environment.\n\n### 4.1) Preparation\nBefore running the containers, you have to retrieve UID and GID for the user used to mount your directories (configuration, medias):\n* Connect to the NAS with SSH as `root` user, or as a sudoer user\n* Go to the shared directories that contains the media files stored on your NAS: `cd /share/\u003cname-of-share\u003e`\n* Check the `\u003cuser\u003e` owner of the files: `ls -l`\n* Get user UID:\n```\n$ id -u \u003cuser\u003e\n```\n* Get user GID:\n```\n$ id -g \u003cuser\u003e\n```\nThe containers will run impersonated as this user, in order to have read/write access to the media directories.\n\n### 4.2) Directories\nThe configuration of all the containers are stored on volumes, mapped with the docker host.\n\n#### 4.2.1) Directory structure on host-side\nFor tools configuration and logs (JOAL, Kodi MariaDB, Medusa, MiniDLNA, nginx, Radarr, Transmission):\n\n```bash\n/share/Download/tools\n├── jackett                   # Contains Jackett configuration files (use dtf-configurator to initialize)\n|   ├── Jackett               # Jackett configuration home dir\n│   │   ├── ServerConfig.json # Kodi DB initialization script (use dtf-configurator to setup)\n│   │   └── ... \n|   └── cardigann             # Custom API definitions in this dir (use dtf-configurator to setup, and add your owns)\n├── joal                      # Contains JOAL configuration files (use dtf-configurator to initialize)\n|   ├── config.json           # JOAL configuration file (use dtf-configurator to setup)\n│   ├── clients               # JOAL clients dir\n│   └── torrents              # JOAL torrents dir\n├── kodi-mariadb              # Kodi MariaDB configuration, database and logs\n│   └── initdb.d              # Initialization scripts dir (use dtf-configurator to setup)\n│       └── kodi.sql          # Kodi DB initialization script (use dtf-configurator to setup)\n├── medusa                    # Contains Medusa configuration, database, cache and logs\n│   ├── config.ini            # Medusa configuration file (use dtf-configurator to setup, use Web UI for full\n│   └── ...                   #   setup)\n├── minidlna                  # Contains MiniDLNA database cache (delete content to force reindex)\n│   └── ...        \n├── nginx                     # Contains nginx configuration, passwords and logs\n│   ├── nginx.conf            # nginx configuration file (use dtf-configurator to setup)\n│   ├── passwords             # nginx credentials for basic authentication (use dtf-configurator to setup)\n│   └── logs                  # nginx logs\n├── radarr                    # Contains Radarr configuration, database, cache and logs\n│   └── ...                   #   (do not modify, managed by Radarr with Wed UI)\n├── ssl                       # Contains certificates for nginx HTTPS access \n│   └── ...                   # **GENERATE FILES .crt AND .key HERE**\n└── transmission              # Contains Transmission configuration, cache and logs\n    ├── settings.json         # Transmission configuration file (do not modify, overwritten by\n    └── ...                   #   transmission-openvpn)\n```\n\nYou have to create the `tools` dir on your NAS / device, before launching the configurator service that will initialize the directory structure and configuration files.\n\nSee `docker-compose.yml` and `docker-compose-configurator.yml` configuration: adapt it to your own environment.\n\n#### 4.2.2) Directory structure on container-side\nFor storage (photos, videos, TV shows, movies, music, torrents):\n\n```bash\nstorage\n├── complete        # Downloaded torrents by Transmission, published with MiniDLNA\n│   ├── medusa      # Downloaded torrents by Transmission, managed by Medusa\n│   ├── radarr      # Downloaded torrents by Transmission, managed by Radarr\n│   └── seed        # Seeding torrents, managed by Transmission\n├── incomplete      # Currently downloading torrents, managed by Transmission (currently disabled)\n├── watch           # Watch directory for *.torrent files, consumed by Transmission\n├── ...\n├── Backup          # Old personal photos \u0026 videos and published with MiniDLNA\n│   ├── pyphotorg   # Backup photos \u0026 videos and logs, managed by Pyphotorg (backup for\n│   └── ...         #   deduplicate operation)\n├── Photos          # Personal photos \u0026 videos, managed by Pyphotorg (dir for deduplicate\n|   |               #   operation) and published with MiniDLNA\n|   ├── Mobile XXX  # Organized photos \u0026 videos from smartphone XXX, managed by Pyphotorg (target\n|   |               #   for move/organize operation from '/sync/backup-XXX')\n|   ├── Mobile ...  # Other smartphone dirs, managed by Pyphotorg\n│   └── ...\n├── sync            # Sync directory, where smartphone camera files are copied (on QNAP, with\n|   |               #   QSync), managed by Pyphotorg (source for move/organize operation)\n|   ├── camera-XXX  # Photos \u0026 videos backed-up from smartphone XXX, managed by Pyphotorg\n|   |               #   (source for move/organize operation to '/storage/Photos/Mobile XXX')\n|   ├── camera-...  # Other smartphone dirs, managed by Pyphotorg\n|   └── ...\n├── Enfants         # Children videos\n│   ├── Films       # Children movies on NAS, managed by Radarr and published with MiniDLNA\n│   ├── Series      # Children TV shows on NAS, managed by Medusa and published with MiniDLNA\n│   └── ...\n├── Films           # Movies on NAS, managed by Radarr and published with MiniDLNA\n├── MP3             # Music on NAS, published with MiniDLNA\n├── Series          # TV shows on NAS, managed by Medusa and published with MiniDLNA\n└── Videos          # Misc videos on NAS, published with MiniDLNA\n```\n\nYou will have to map host directories to these storage container volumes before launching the Docker Torrent Factory.\n\nSee `docker-compose.yml` and `docker-compose-configurator.yml` configuration files: adapt each one to your own environment.\n\n**WARNING : the mapped host-side directories must exist before starting containers, with correct read/write access (see UID/GID).**\n\n### 4.3) Prepare environment file\n\nCopy the `template.env` file and paste it as the `.env` file. This file will automatically be used by the docker compose commands to replace environment variable values.\n\nConfigure the `.env` file with your own environment values: components to enable / disable, user / password to use for each service, VPN type and credentials, etc.\n\n## 5) Usage\n\nNow that your Docker Torrent Factory is prepared, you are ready to launch the containers !\n\n### 5.1) Launch for the first time\n\nBefore launching DTF services for the first time, you may launch the Configurator service and the Monitor services.\n\nRun these commands on the NAS / device, in the cloned repo dir:\n\n```bash\n# Make all scripts executables\nsudo chmod +x *.sh\n\n# Launch the one-time DTF Configurator services\n$ ./launch-configurator.sh\n\n# Launch the DTF Monitor services\n$ ./launch-monitor.sh\n```\n\nNote: the DTF configurator service will automatically be deleted and cleaned after execution.\n\n### 5.2) Launch or update DTF services\n\nTo launch or update the DTF services, run these commands on the NAS / device, in the cloned repo dir:\n\n```bash\n# Launch the DTF services\n$ ./launch-dtf.sh\n```\n\n### 5.3) Terminate DTF or Monitor services\n\nTo terminate and clean the DTF or Monitor services, run these commands on the NAS / device, in the cloned repo dir:\n\n```bash\n# Terminate the DTF services\n$ ./terminate-dtf.sh\n\n# Terminate the DTF Monitor services\n$ ./terminate-monitor.sh\n```\n\n### 5.4) Other commands\n\nRun these commands on the NAS / device, in the cloned repo dir:\n\n```bash\n# Force MiniDLNA reindexation of all medias (DTF services must be running)\n$ ./reindex-media.sh\n\n# Upgrade database on Kodi MariaDB container (DTF services must be running): to do after each MariaDB version upgrade !\n$ ./kodi-upgrade-db.sh\n\n# Copy a database on Kodi MariaDB container (DTF services must be running): for backup/restore operations\n$ ./kodi-copy-db.sh SOURCE_DB DEST_DB\n```\n\n## 6) Additional configuration\n\nAfter the DTF is launched, you may connect to each Web UI to finalize the configuration of each component.\n\nFollow configuration tips from the `docker-compose.yml` file (see comment at the beginning of each component configuration in YAML).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fahuh%2Fdocker-torrent-factory","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fahuh%2Fdocker-torrent-factory","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fahuh%2Fdocker-torrent-factory/lists"}