About
rTorrent and ruTorrent Docker image based on Alpine Linux.
If you are interested, check out my other Docker images!
💡 Want to be notified of new releases? Check out 🔔 Diun (Docker Image Update Notifier) project!
- Features
- Build locally
- Image
- Environment variables
- Volumes
- Ports
- Usage
- Notes
- Upgrade
- Contributing
- License
Features
- Run as non-root user
- Multi-platform image
- Latest rTorrent / libTorrent release compiled from source
- Latest ruTorrent release
- Name resolving enhancements with c-ares for asynchronous DNS requests (including name resolves)
- Enhanced rTorrent config and bootstraping with a local config
- WAN IP address automatically resolved for reporting to the tracker
- XMLRPC through nginx over SCGI socket (basic auth optional)
- WebDAV on completed downloads (basic auth optional)
- Ability to add a custom ruTorrent plugin / theme
- Allow persisting specific configuration for ruTorrent plugins
- ruTorrent GeoIP2 plugin
- mktorrent installed for ruTorrent create plugin
- Traefik Docker image as reverse proxy and creation/renewal of Let's Encrypt certificates (see this template)
- geoip-updater Docker image to download MaxMind's GeoIP2 databases on a time-based schedule for geolocation
Build locally
git clone https://github.com/crazy-max/docker-rtorrent-rutorrent.git
cd docker-rtorrent-rutorrent
# Build image and output to docker (default)
docker buildx bake
# Build image
docker buildx bake image
# Build multi-platform image
docker buildx bake image-all
Image
Registry | Image |
---|---|
Docker Hub | crazymax/rtorrent-rutorrent |
GitHub Container Registry | ghcr.io/crazy-max/rtorrent-rutorrent |
Following platforms for this image are available:
$ docker run --rm mplatform/mquery crazymax/rtorrent-rutorrent:latest
Image: crazymax/rtorrent-rutorrent:latest
* Manifest List: Yes
* Supported platforms:
- linux/amd64
- linux/arm/v6
- linux/arm/v7
- linux/arm64
Environment variables
General
TZ
: The timezone assigned to the container (defaultUTC
)PUID
: rTorrent user id (default1000
)PGID
: rTorrent group id (default1000
)WAN_IP
: Public IP address reported to the tracker (default auto resolved withdig +short myip.opendns.com @resolver1.opendns.com
)MEMORY_LIMIT
: PHP memory limit (default256M
)UPLOAD_MAX_SIZE
: Upload max size (default16M
)CLEAR_ENV
: Clear environment in FPM workers (defaultyes
)OPCACHE_MEM_SIZE
: PHP OpCache memory consumption (default128
)MAX_FILE_UPLOADS
: The maximum number of files allowed to be uploaded simultaneously (default50
)AUTH_DELAY
: The time in seconds to wait for Basic Auth (default0s
)REAL_IP_FROM
: Trusted addresses that are known to send correct replacement addresses (default0.0.0.0/32
)REAL_IP_HEADER
: Request header field whose value will be used to replace the client address (defaultX-Forwarded-For
)LOG_IP_VAR
: Use another variable to retrieve the remote IP address for access log_format on Nginx. (defaultremote_addr
)XMLRPC_AUTHBASIC_STRING
: Message displayed during validation of XMLRPC Basic Auth (defaultrTorrent XMLRPC restricted access
)XMLRPC_PORT
: XMLRPC port through nginx over SCGI socket (default8000
)XMLRPC_SIZE_LIMIT
: Maximum body size of XMLRPC calls (default1M
)RUTORRENT_AUTHBASIC_STRING
: Message displayed during validation of ruTorrent Basic Auth (defaultruTorrent restricted access
)RUTORRENT_PORT
: ruTorrent HTTP port (default8080
)WEBDAV_AUTHBASIC_STRING
: Message displayed during validation of WebDAV Basic Auth (defaultWebDAV restricted access
)WEBDAV_PORT
: WebDAV port on completed downloads (default9000
)
rTorrent
RT_LOG_LEVEL
: rTorrent log level (defaultinfo
)RT_LOG_EXECUTE
: Log executed commands to/data/rtorrent/log/execute.log
(defaultfalse
)RT_LOG_XMLRPC
: Log XMLRPC queries to/data/rtorrent/log/xmlrpc.log
(defaultfalse
)RT_DHT_PORT
: DHT UDP port (dht.port.set
, default6881
)RT_INC_PORT
: Incoming connections (network.port_range.set
, default50000
)
ruTorrent
RU_REMOVE_CORE_PLUGINS
: Remove ruTorrent core plugins ; comma separated (defaulterasedata,httprpc
)RU_HTTP_USER_AGENT
: ruTorrent HTTP user agent (defaultMozilla/5.0 (Windows NT 6.0; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0
)RU_HTTP_TIME_OUT
: ruTorrent HTTP timeout in seconds (default30
)RU_HTTP_USE_GZIP
: Use HTTP Gzip compression (defaulttrue
)RU_RPC_TIME_OUT
: ruTorrent RPC timeout in seconds (default5
)RU_LOG_RPC_CALLS
: Log ruTorrent RPC calls (defaultfalse
)RU_LOG_RPC_FAULTS
: Log ruTorrent RPC faults (defaulttrue
)RU_PHP_USE_GZIP
: Use PHP Gzip compression (defaultfalse
)RU_PHP_GZIP_LEVEL
: PHP Gzip compression level (default2
)RU_SCHEDULE_RAND
: Rand for schedulers start, +0..X seconds (default10
)RU_LOG_FILE
: ruTorrent log file path for errors messages (default/data/rutorrent/rutorrent.log
)RU_DO_DIAGNOSTIC
: ruTorrent diagnostics like permission checking (defaulttrue
)RU_SAVE_UPLOADED_TORRENTS
: Save torrents files added wia ruTorrent in/data/rutorrent/share/torrents
(defaulttrue
)RU_OVERWRITE_UPLOADED_TORRENTS
: Existing .torrent files will be overwritten (defaultfalse
)RU_FORBID_USER_SETTINGS
: If true, allows for single user style configuration, even with webauth (defaultfalse
)RU_LOCALE
: Set default locale for ruTorrent (defaultUTF8
)
Volumes
/data
: rTorrent / ruTorrent config, session files, log, .../downloads
: Downloaded files/passwd
: Contains htpasswd files for basic auth
⚠️ Note that the volumes should be owned by the user/group with the specifiedPUID
andPGID
. If you don't give the volumes correct permissions, the container may not start.
Ports
6881
(orRT_DHT_PORT
): DHT UDP port (dht.port.set
)8000
(orXMLRPC_PORT
): XMLRPC port through nginx over SCGI socket8080
(orRUTORRENT_PORT
): ruTorrent HTTP port9000
(orWEBDAV_PORT
): WebDAV port on completed downloads50000
(orRT_INC_PORT
): Incoming connections (network.port_range.set
)
⚠️ Port p+1 defined forXMLRPC_PORT
,RUTORRENT_PORT
andWEBDAV_PORT
will also be reserved for healthcheck. (e.g. if you defineRUTORRENT_PORT=8080
, port8081
will be reserved)
Usage
Docker Compose
Docker compose is the recommended way to run this image. Copy the content of folder examples/compose
in /var/rtorrent-rutorrent/
on your host for example. Edit the compose file with your preferences and run the
following command:
mkdir data downloads passwd
chown ${PUID}:${PGID} data downloads passwd
docker-compose up -d
docker-compose logs -f
Command line
You can also use the following minimal command:
mkdir data downloads passwd
chown ${PUID}:${PGID} data downloads passwd
docker run -d --name rtorrent_rutorrent \
--ulimit nproc=65535 \
--ulimit nofile=32000:40000 \
-p 6881:6881/udp \
-p 8000:8000 \
-p 8080:8080 \
-p 9000:9000 \
-p 50000:50000 \
-v $(pwd)/data:/data \
-v $(pwd)/downloads:/downloads \
-v $(pwd)/passwd:/passwd \
crazymax/rtorrent-rutorrent:latest
Notes
XMLRPC through nginx
rTorrent 0.9.7+ has a built-in daemon mode disabling the user interface, so you can only control it via XMLRPC. Nginx
will route XMLRPC requests to rtorrent through port 8000
. These requests can be secured with basic authentication
through the /passwd/rpc.htpasswd
file in which you will need to add a username with his password. See below to
populate this file with a user / password.
WebDAV
WebDAV allows you to retrieve your completed torrent files in /downloads/complete
on port 9000
. Like XMLRPC, these
requests can be secured with basic authentication through the /passwd/webdav.htpasswd
file in which you will need to
add a username with his password. See below to populate this file with a user / password.
Populate .htpasswd files
For ruTorrent basic auth, XMLRPC through nginx and WebDAV on completed downloads, you can populate .htpasswd
files with the following command:
docker run --rm -it httpd:2.4-alpine htpasswd -Bbn <username> <password> >> $(pwd)/passwd/webdav.htpasswd
Htpasswd files used:
rpc.htpasswd
: XMLRPC through nginxrutorrent.htpasswd
: ruTorrent basic authwebdav.htpasswd
: WebDAV on completed downloads
.rtlocal.rc
Boostrap config When rTorrent is started the bootstrap config /etc/rtorrent/.rtlocal.rc is
imported. This configuration cannot be changed unless you rebuild the image or overwrite these elements in your
.rtorrent.rc
. Here are the particular properties of this file:
system.daemon.set = true
: Launcher rTorrent as a daemon- A config layout for the rTorrent's instance you can use in your
.rtorrent.rc
:cfg.basedir
: Home directory of rtorrent (/data/rtorrent/
)cfg.download
: Download directory (/downloads/
)cfg.download_complete
: Completed downloads (/downloads/complete/
)cfg.download_temp
: Downloads in progress (/downloads/temp/
)cfg.logs
: Logs directory (/data/rtorrent/log/
)cfg.session
: Session directory (/data/rtorrent/.session/
)cfg.watch
: Watch directory for torrents (/data/rtorrent/watch/
)cfg.rundir
: Runtime data of rtorrent (/var/run/rtorrent/
)
d.data_path
: Config var to get the full path of data of a torrent (workaround for the possibly emptyd.base_path
attribute)directory.default.set
: Default directory to save the downloaded torrents (cfg.download_temp
)session.path.set
: Default session directory (cfg.session
)- PID file to
/var/run/rtorrent/rtorrent.pid
network.scgi.open_local
: SCGI local socket and make it group-writable and securenetwork.port_range.set
: Listening port for incoming peer traffic (50000-50000
)dht.port.set
: UDP port to use for DHT (6881
)log.open_file
: Default logging to/data/rtorrent/log/rtorrent.log
- Log level can be modified with the environment variable
RT_LOG_LEVEL
rpc_events
are logged be default- To log executed commands, add the environment variable
RT_LOG_EXECUTE
- To log XMLRPC queries, add the environment variable
RT_LOG_XMLRPC
- Log level can be modified with the environment variable
Override or add a ruTorrent plugin/theme
You can add a plugin for ruTorrent in /data/rutorrent/plugins/
. If you add a plugin that already exists in ruTorrent,
it will be removed from ruTorrent core plugins and yours will be used. And you can also add a theme in
/data/rutorrent/themes/
. The same principle as for plugins will be used if you want to override one.
⚠️ Container has to be restarted to propagate changes
Edit a ruTorrent plugin configuration
As you probably know, plugin configuration is not outsourced in ruTorrent. Loading the configuration of a plugin is
done via a conf.php
file placed at the root of the plugin folder. To solve this issue with Docker, a special folder
has been created in /data/rutorrent/plugins-conf
to allow you to configure plugins. For example to configure the
diskspace
plugin, you will need to create the /data/rutorrent/plugins-conf/diskspace.php
file with your
configuration:
<?php
$diskUpdateInterval = 10; // in seconds
$notifySpaceLimit = 512; // in Mb
$partitionDirectory = null; // if null, then we will check rtorrent download directory (or $topDirectory if rtorrent is unavailable)
// otherwise, set this to the absolute path for checked partition.
⚠️ Container has to be restarted to propagate changes
Upgrade
To upgrade, pull the newer image and launch the container:
docker-compose pull
docker-compose up -d
Contributing
Want to contribute? Awesome! The most basic way to show your support is to star the project, or to raise issues. You can also support this project by becoming a sponsor on GitHub or by making a Paypal donation to ensure this journey continues indefinitely!
Thanks again for your support, it is much appreciated! 🙏
License
MIT. See LICENSE
for more details.