{"id":22317524,"url":"https://github.com/k44sh/rutorrent","last_synced_at":"2025-08-22T13:43:05.097Z","repository":{"id":58264518,"uuid":"455895477","full_name":"k44sh/rutorrent","owner":"k44sh","description":"rTorrent/ruTorrent Docker compatible with Radarr/Sonarr","archived":false,"fork":false,"pushed_at":"2025-05-30T13:42:58.000Z","size":640,"stargazers_count":45,"open_issues_count":0,"forks_count":7,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-05-30T18:49:30.111Z","etag":null,"topics":["alpine","docker","p2p","radarr","rtorrent","rutorrent","seedbox","sonarr"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/k44sh.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":"k44sh","custom":"https://www.paypal.me/k4sh"}},"created_at":"2022-02-05T14:42:15.000Z","updated_at":"2025-05-30T13:40:47.000Z","dependencies_parsed_at":"2023-12-09T13:23:11.979Z","dependency_job_id":"861ae77d-3040-49b4-88c5-9990d47ec325","html_url":"https://github.com/k44sh/rutorrent","commit_stats":null,"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/k44sh/rutorrent","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/k44sh%2Frutorrent","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/k44sh%2Frutorrent/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/k44sh%2Frutorrent/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/k44sh%2Frutorrent/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/k44sh","download_url":"https://codeload.github.com/k44sh/rutorrent/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/k44sh%2Frutorrent/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267686337,"owners_count":24127715,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-29T02:00:12.549Z","response_time":2574,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["alpine","docker","p2p","radarr","rtorrent","rutorrent","seedbox","sonarr"],"created_at":"2024-12-03T23:09:56.182Z","updated_at":"2025-07-29T12:31:01.516Z","avatar_url":"https://github.com/k44sh.png","language":"Shell","funding_links":["https://github.com/sponsors/k44sh","https://www.paypal.me/k4sh"],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\u003ca href=\"https://gitlab.com/cyberpnkz/rutorrent\" target=\"_blank\"\u003e\u003cimg width=\"1536\" src=\".rutorrent.gif\"\u003e\u003c/a\u003e\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://hub.docker.com/r/k44sh/rutorrent/tags?page=1\u0026ordering=last_updated\"\u003e\n    \u003cimg src=\"https://img.shields.io/docker/v/k44sh/rutorrent/latest?logo=docker\" alt=\"Latest Version\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://hub.docker.com/r/k44sh/rutorrent/\"\u003e\n    \u003cimg src=\"https://img.shields.io/docker/image-size/k44sh/rutorrent/latest?logo=docker\" alt=\"Docker Size\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://hub.docker.com/r/k44sh/rutorrent/\"\u003e\n    \u003cimg src=\"https://img.shields.io/docker/pulls/k44sh/rutorrent?logo=docker\" alt=\"Docker Pulls\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://gitlab.com/cyberpnkz/rutorrent/-/pipelines/main/latest\"\u003e\n    \u003cimg src=\"https://img.shields.io/gitlab/pipeline-status/cyberpnkz%2Frutorrent?branch=main\u0026label=build%20(main)\u0026logo=gitlab\" alt=\"Build Main\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://gitlab.com/cyberpnkz/rutorrent/-/pipelines/dev/latest\"\u003e\n    \u003cimg src=\"https://img.shields.io/gitlab/pipeline-status/cyberpnkz%2Frutorrent?branch=dev\u0026label=build%20(dev)\u0026logo=gitlab\" alt=\"Build Dev\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/k44sh/rutorrent\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/stars/k44sh/rutorrent?logo=github\" alt=\"Github Stars\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/k44sh/rutorrent/network/members\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/forks/k44sh/rutorrent?logo=github\" alt=\"Forks\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/k44sh/rutorrent/blob/main/LICENSE\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/license/k44sh/rutorrent\" alt=\"License\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n## About\n\n[rTorrent](https://github.com/rakshasa/rtorrent) and [ruTorrent](https://github.com/Novik/ruTorrent) Docker image based on [Alpine Linux](https://alpinelinux.org/).\u003cbr /\u003e\n___\n\n## Features\n\n* Run as non-root user\n* Multi-platform image\n* [NGINX](https://nginx.org/download) with [PHP 8.4](https://www.php.net/releases/8.4/en.php)\n* [GeoIP2](https://www.maxmind.com/en/geoip-databases) database by [MaxMind](https://www.maxmind.com) (_Update with your own key_)\n* [geoipupdate](https://github.com/maxmind/geoipupdate) to update MaxMind's GeoIP2 databases\n* [Cloudflare](https://www.cloudflare.com/ips/) trusted addresses for NGINX Real IP (_not enable by default_)\n* [libTorrent](https://github.com/rakshasa/libtorrent) (`0.15.3`) / [rTorrent](https://github.com/rakshasa/rtorrent) (`0.15.3`) compiled from source\n* [ruTorrent](https://github.com/Novik/ruTorrent) release (`v5.2.8`)\n* [c-ares](https://github.com/rakshasa/rtorrent/wiki/Performance-Tuning#rtrorrent-with-c-ares) and [UDNS](https://www.corpit.ru/mjt/udns.html) for asynchronous DNS requests\n* [mktorrent](https://github.com/Rudde/mktorrent) installed for ruTorrent create plugin\n* [Radarr](https://radarr.video) / [Sonarr](https://sonarr.tv) hardlinks compliance\n* ruTorrent [GeoIP2](https://github.com/Micdu70/geoip2-rutorrent) plugin\n* ruTorrent [Filemanager](https://github.com/nelu/rutorrent-filemanager) plugin\n* ruTorrent [Ratiocolors](https://github.com/Gyran/rutorrent-ratiocolor) plugin\n* ruTorrent [QuickBox](https://github.com/TrimmingFool/club-QuickBox) theme\n* `WAN IP` address automatically resolved for reporting to the tracker\n* `XMLRPC` through nginx over SCGI socket (basic auth optional)\n* `WebDAV` on completed downloads (basic auth optional)\n* Ability to add a custom ruTorrent `plugin` / `theme`\n* Allow specific configuration for `data` folder\n* Allow specific configuration for `config` folder\n\n## Volume Overview\n\n| **Volume** | **Description**                                      |\n| ---------- | ---------------------------------------------------- |\n| `/config`  | Stores rTorrent, ruTorrent, and other configurations |\n| `/data`    | Main storage for downloaded torrent files            |\n| `/passwd`  | Holds `.htpasswd` files for HTTP authentication      |\n\n\u003e :information_source: **Note:** Volumes should be owned by the user/group matching the specified `PUID` and `PGID`.  \n\n## Radarr / Sonarr Users\n\nIt is recommended to use the same `data` volume for `ruTorrent` and `Radarr`/`Sonarr`, in order to have a structure similar to this :\n\n```shell\ndata\n├── downloads\n└── media\n   ├── movies\n   ├── music\n   └── tv\n```\n\n:information_source: More informations here : [TRaSH Guide](https://trash-guides.info/Hardlinks/How-to-setup-for/Docker/)\n\n## Multi Platform Images\n\n* linux/amd64\n* linux/arm64\n* linux/arm/v7\n\n## Usage\n\n### Docker Compose\n\nDocker compose is the recommended way to run this image. Edit the compose file with your preferences and run the following command:\n\n```shell\nmkdir $(pwd)/{config,data,passwd}\nchown ${PUID}:${PGID} $(pwd)/{config,data,passwd}\ndocker compose up -d\ndocker compose logs -f\n```\n\n### Upgrade\n\nTo upgrade, pull the newer image and launch the container:\n\n```shell\ndocker compose pull\ndocker compose up -d\n```\n\n### Cleanup\n\n```shell\ndocker compose down -v\nrm -rf $(pwd)/{config,data,passwd}\n```\n\n### Command line\n\nYou can also use the following minimal command:\n\n```shell\nmkdir $(pwd)/{config,data,passwd}\nchown ${PUID}:${PGID} $(pwd)/{config,data,passwd}\ndocker run -d --name rutorrent \\\n  --ulimit nproc=65535 \\\n  --ulimit nofile=32000:40000 \\\n  -p 6881:6881/udp \\\n  -p 8000:8000 \\\n  -p 8080:8080 \\\n  -p 9000:9000 \\\n  -p 50000:50000 \\\n  -v $(pwd)/config:/config \\\n  -v $(pwd)/data:/data \\\n  -v $(pwd)/passwd:/passwd \\\n  k44sh/rutorrent:latest \u0026\u0026 \\\n  docker logs -f rutorrent\n```\n\n## Environment variables\n\n### General\n\n| **Variable**                 | **Description**                                           | **Default**                         |\n| ---------------------------- | --------------------------------------------------------- | ----------------------------------- |\n| `TZ`                         | The timezone assigned to the container                    | `UTC`                               |\n| `PUID`                       | rTorrent user ID                                          | `1000`                              |\n| `PGID`                       | rTorrent group ID                                         | `1000`                              |\n| `CONFIG_PATH`                | ruTorrent configuration path                              | `/config`                           |\n| `TOPDIR_PATH`                | ruTorrent top directory                                   | `/data`                             |\n| `DOWNLOAD_PATH`              | Path for downloaded files                                 | `/data/downloads`                   |\n| `MM_ACCOUNT`                 | Your MaxMind account ID                                   | _(required for auto update)_        |\n| `MM_LICENSE`                 | Your MaxMind license key                                  | _(required auto update)_            |\n| `WAN_IP`                     | Public IP address reported to the tracker                 | Auto resolved                       |\n| `MEMORY_LIMIT`               | PHP memory limit                                          | `512M`                              |\n| `UPLOAD_MAX_SIZE`            | Max upload size                                           | `16M`                               |\n| `CLEAR_ENV`                  | Clear environment in PHP-FPM workers                      | `yes`                               |\n| `OPCACHE_MEM_SIZE`           | PHP OpCache memory size                                   | `256`                               |\n| `MAX_FILE_UPLOADS`           | Max number of files allowed to be uploaded simultaneously | `50`                                |\n| `AUTH_DELAY`                 | Delay before HTTP Basic Auth is enforced                  | `0s`                                |\n| `REAL_IP_FROM`               | Trusted CIDR ranges that can set real client IPs          | `false`                             |\n| `REAL_IP_CF`                 | Trusted Cloudflare IP ranges that can set real client IPs | `false`                             |\n| `REAL_IP_HEADER`             | Header containing the real client IP                      | `X-Forwarded-For`                   |\n| `LOG_IP_VAR`                 | Variable used in Nginx logs for remote IP                 | `remote_addr`                       |\n| `XMLRPC_AUTHBASIC_STRING`    | Message shown for XMLRPC Basic Auth                       | `rTorrent XMLRPC restricted access` |\n| `XMLRPC_PORT`                | XMLRPC port through Nginx (over SCGI socket)              | `8000`                              |\n| `XMLRPC_SIZE_LIMIT`          | Max body size of XMLRPC calls                             | `2M`                                |\n| `RUTORRENT_AUTHBASIC_STRING` | Message shown for ruTorrent Basic Auth                    | `ruTorrent restricted access`       |\n| `RUTORRENT_PORT`             | HTTP port used by ruTorrent                               | `8080`                              |\n| `WEBDAV_AUTHBASIC_STRING`    | Message shown for WebDAV Basic Auth                       | `WebDAV restricted access`          |\n| `WEBDAV_PORT`                | WebDAV port for accessing completed downloads             | `9000`                              |\n\n### rTorrent\n\n| **Variable**              | **Description**                                             | **Default** |\n| ------------------------- | ----------------------------------------------------------- | ----------- |\n| `RT_LOG_LEVEL`            | rTorrent log level                                          | `info`      |\n| `RT_LOG_EXECUTE`          | Log executed commands to `/config/rtorrent/log/execute.log` | `false`     |\n| `RT_LOG_XMLRPC`           | Log XMLRPC queries to `/config/rtorrent/log/xmlrpc.log`     | `false`     |\n| `RT_SESSION_SAVE_SECONDS` | Interval (in seconds) between saving session data to disk   | `3600`      |\n| `RT_TRACKER_DELAY_SCRAPE` | Delay tracker announces at startup                          | `true`      |\n| `RT_RECEIVE_BUFFER_SIZE`  | TCP receive buffer size (`network.receive_buffer.size.set`) | `16M`       |\n| `RT_SEND_BUFFER_SIZE`     | TCP send buffer size (`network.send_buffer.size.set`)       | `16M`       |\n| `RT_PREALLOCATE_TYPE`     | Disk space preallocation type                               | `0`         |\n| `RT_DHT_PORT`             | DHT UDP port (`dht.port.set`)                               | `6881`      |\n| `RT_INC_PORT`             | Incoming port range (`network.port_range.set`)              | `50000`     |\n\n### ruTorrent\n\n| **Variable**                     | **Description**                                                   | **Default**                       |\n| -------------------------------- | ----------------------------------------------------------------- | --------------------------------- |\n| `RU_REMOVE_CORE_PLUGINS`         | Remove ruTorrent core plugins; comma-separated                    | `false`                           |\n| `RU_HTTP_USER_AGENT`             | ruTorrent HTTP user agent                                         | `Mozilla Firefox`                 |\n| `RU_HTTP_TIME_OUT`               | ruTorrent HTTP timeout in seconds                                 | `30`                              |\n| `RU_HTTP_USE_GZIP`               | Use HTTP Gzip compression                                         | `true`                            |\n| `RU_RPC_TIME_OUT`                | ruTorrent RPC timeout in seconds                                  | `5`                               |\n| `RU_LOG_RPC_CALLS`               | Log ruTorrent RPC calls                                           | `false`                           |\n| `RU_LOG_RPC_FAULTS`              | Log ruTorrent RPC faults                                          | `true`                            |\n| `RU_PHP_USE_GZIP`                | Use PHP Gzip compression                                          | `false`                           |\n| `RU_PHP_GZIP_LEVEL`              | PHP Gzip compression level                                        | `2`                               |\n| `RU_SCHEDULE_RAND`               | Random delay (0 to X seconds) for scheduler start                 | `10`                              |\n| `RU_LOG_FILE`                    | ruTorrent log file path for error messages                        | `/config/rutorrent/rutorrent.log` |\n| `RU_DO_DIAGNOSTIC`               | ruTorrent diagnostics (e.g., permission checks)                   | `true`                            |\n| `RU_CACHED_PLUGIN_LOADING`       | Enable rapid cached loading of ruTorrent plugins                  | `false`                           |\n| `RU_SAVE_UPLOADED_TORRENTS`      | Save uploaded torrent files to `/config/rutorrent/share/torrents` | `true`                            |\n| `RU_OVERWRITE_UPLOADED_TORRENTS` | Overwrite existing `.torrent` files                               | `false`                           |\n| `RU_FORBID_USER_SETTINGS`        | Enforce global settings, even with HTTP auth                      | `false`                           |\n| `RU_LOCALE`                      | Default locale for ruTorrent                                      | `UTF8`                            |\n\n## Ports\n\n| **Port** | **Variable**     | **Description**                                 |\n| -------- | ---------------- | ----------------------------------------------- |\n| `6881`   | `RT_DHT_PORT`    | DHT UDP port (`dht.port.set`)                   |\n| `50000`  | `RT_INC_PORT`    | Incoming connections (`network.port_range.set`) |\n| `8000`   | `XMLRPC_PORT`    | XMLRPC port through Nginx over SCGI socket      |\n| `8080`   | `RUTORRENT_PORT` | ruTorrent HTTP port                             |\n| `9000`   | `WEBDAV_PORT`    | WebDAV port for completed downloads             |\n\n## Notes\n\n### WebDAV\n\nWebDAV allows you to retrieve your completed torrent files in `/data` on port `9000`. Like XMLRPC, these\nrequests can be secured with basic authentication through the `/passwd/webdav.htpasswd` file in which you will need to\nadd a username with his password. See below to populate this file with a user / password.\n\n### Populate .htpasswd files\n\nFor ruTorrent basic auth, XMLRPC through nginx and WebDAV on completed downloads, you can populate `.htpasswd`\nfiles with the following command:\n\n```bash\ndocker run --rm -it httpd:2.4-alpine htpasswd -Bbn \u003cusername\u003e \u003cpassword\u003e \u003e\u003e $(pwd)/passwd/webdav.htpasswd\n```\n\nHtpasswd files used:\n\n* `rpc.htpasswd`: XMLRPC through nginx\n* `rutorrent.htpasswd`: ruTorrent basic auth\n* `webdav.htpasswd`: WebDAV on completed downloads\n\n### Override or add a ruTorrent plugin/theme\n\nYou can add a plugin for ruTorrent in `/config/rutorrent/plugins/`.\n\nIf you add a plugin that already exists in ruTorrent,\nit will be removed from ruTorrent core plugins and yours will be used. And you can also add a theme in\n`/config/rutorrent/themes/`. The same principle as for plugins will be used if you want to override one.\n\n\u003e :information_source: Container has to be restarted to propagate changes\n\n### Edit a ruTorrent plugin configuration\n\nAs you probably know, plugin configuration is not outsourced in ruTorrent. Loading the configuration of a plugin is\ndone via a `conf.php` file placed at the root of the plugin folder. To solve this issue with Docker, a special folder\nhas been created in `/config/rutorrent/plugins-conf` to allow you to configure plugins. For example to configure the\n`diskspace` plugin, you will need to create the `/config/rutorrent/plugins-conf/diskspace.php` file with your\nconfiguration:\n\n```php\n\u003c?php\n$diskUpdateInterval = 10;\t// in seconds\n$notifySpaceLimit = 512;\t// in Mb\n$partitionDirectory = null;\t// if null, then we will check rtorrent download directory \n```\n\n\u003e :information_source: Container has to be restarted to propagate changes\n\nFork based on the version of [CrazyMax](https://github.com/crazy-max/docker-rtorrent-rutorrent)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fk44sh%2Frutorrent","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fk44sh%2Frutorrent","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fk44sh%2Frutorrent/lists"}