seedpod "Dockerizes" rTorrent, ruTorrent, Irssi, autodl-irssi and autodl-rutorrent to provide the typical functionality of a seedbox.
I needed a "seedbox-like" setup for a private project but as the setup grew I decided to migrate everyting to it's own repository and make it public. My ambition is to keep it as minimal and functional as possible.
Some notable differences to similar projects (for better or worse) may be:
- Minimal bloat and ready-to-go default configuration
- Configuration files are stored on the host machine
- All processes within the container are unprivileged
- HTTP and HTTPS are supported on the same TCP port
- HTTP/2 and Basic Authentication are enabled by default
- Use of UNIX sockets rather than TCP (and thus no need to expose /RPC2)
- Debian (testing) repository used as much as possible, no patching or compilation required
Clone Github repository:
git clone https://github.com/thomasedoff/seedpod.git ~/seedpod.git
Build Docker image from Dockerfile:
cd ~/seedpod.git
docker build --rm -t seedpod .
Create source bind mount directory (this is where all configuration and your data will be stored):
mkdir ~/seedpod-data
Run Docker container (with example bind mount source path, Nginx- and rTorrent host machine ports):
docker run -it --rm \
-p8000:8000 -p50000:50000 \
--mount type=bind,source=${HOME}/seedpod-data,target=/home/seedpod \
seedpod
A pseudo-random password will be generated and output to the terminal. Use it to authenticate to ruTorrent. Finally, visit ruTorrent (on whatever TCP port you exposed for Nginx on the host machine).
For example: https://localhost:8000/rutorrent/
By default, Nginx/ruTorrent binds to 8000/tcp and rTorrent to 50000/tcp within the container. All other settings - with a few exceptions (see below) - should be according to default templates and project recommendations.
On the first run, all configuration files will be copied from the container to the host machine via the shared bind mount. In order to change (any) configuration, simply edit the files that were created in seedpod-data/conf
and restart the container. The SSL certificate and RSA key used by Nginx can be found in seedpod-data/ssl
. Existing/changed files on the host machine will NOT be overwritten by the container.
Overview of the configuration files:
File | Description |
---|---|
supervisord.conf | Supervisord |
nginx.conf | Nginx main |
htpasswd | Nginx authentication |
php-fpm.conf | PHP-FPM |
rtorrent.rc | rTorrent main |
config.php | ruTorrent main |
access.ini | ruTorrent user access |
plugins.ini | ruTorrent plugin control |
autodl.cfg | autodl-irssi |
config | Irssi |
conf.php | autodl-rutorrent |
I prefer keeping configuration secure-ish by default. Here's some settings you might want to have a look at:
- List of enabled ruTorrent plugins in
plugins.ini
forbidUserSettings
andprofileMask
inconfig.php
auth_basic
andauth_basic_user_file
innginx.conf
, as well asconf/htpasswd
protocol.encryption.set
andsystem.umask.set
inrtorrent.rc
- Debian (Testing)
- Supervisord
- Nginx
- PHP-FPM
- rTorrent
- ruTorrent
- Irssi
- autodl-irssi
- autodl-rutorrent
- Some tools (like curl, screen, etc) and a single shell script.
- Make sure everything actually works! :)
- prerequisite section?
- Generate htpasswd-oneliner in README?
- Dockerfile LABEL? HEALTHCHECK?
- Docker restart-policy?
- useradd -u, Docker USER and --user?
- VPN/Wireguard?
- Other self-hosted options (Ansible, .vdi)?