Skip to content
This repository has been archived by the owner on Mar 29, 2023. It is now read-only.

thomasedoff/seedpod-legacy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

seedpod

seedpod "Dockerizes" rTorrent, ruTorrent, Irssi, autodl-irssi and autodl-rutorrent to provide the typical functionality of a seedbox.

seedpod

Introduction

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

Instructions

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/

Configuration

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.

Configuration file overview

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

Some noteable configurations to (re)consider

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 and profileMask in config.php
  • auth_basic and auth_basic_user_file in nginx.conf, as well as conf/htpasswd
  • protocol.encryption.set and system.umask.set in rtorrent.rc

Software stack

Future plans

  • 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)?