/swerpbox

SwerpBox, a seedbox and Media Center combined with the power of 🐳 Docker.

Primary LanguageShellMIT LicenseMIT

What is SwerpBox?

SwerpBox, a seedbox and media center combined with the power of 🐳 Docker.

Table of Contents

Detailed documentation for containers is located within the docs folder. Clicking the link above will take you there.

Prerequisites

To run this application you need Docker Engine 1.10.0+ and Docker Compose with a version 1.6.0 or later.

If you don't have Docker installed and are running Ubuntu or Debian, you may use the setup script, setup-docker.sh. It will install Docker and Docker Compose for you.

bash setup-docker.sh

Getting Started

Fresh OS Install

SSH into your fresh server as the root user. Clone this repository with git clone https://github.com/strues/swerpbox.git.

Edit the config.sh file in the bootstrap/lib directory and adjust the settings as you see fit, namely the following variables:

  • SERVER_IP
  • SERVER_HOSTNAME
  • USER_LOGIN
  • USER_PASS

Note: for the minimum amount of potential problems, I recommend leaving the USER_LOGIN as swerp.

Run ./bootstrap/bootstrap.sh and let it do its thing.

The script will create a mostly complete .env file for you in the home directory of the user defined by the USER_LOGIN variable. All of the SwerpBox files will be placed in the home directory as well.

See the README for detailed instructions.

Existing System

Clone this repository or upload the contents of the repository to your web server. Where you place the SwerpBox files is where all the fun happens. I recommend working out of your home directory.

Example: /home/<USER>/swerpbox

Create a copy of the environment variables file with cp env_example .env and fill in the information to match with your environment.

The variables PGID, PUID, PLEX_UID, and PLEX_GUID must be set to the ids of the user running SwerpBox. If you aren't sure what the values of your user account are, you can find them by typing id $(whoami) on your server.

The output will look like this:

uid=1000(swerp) gid=1000(swerp) groups=1000(swerp)

It is crucial to set PGID and PUID variables to the values matching the user running SwerpBox.

Note: The file buildall.sh is meant for CI services. To start everything just run, make start or docker-compose up -d

The create-user.sh script will create a user and group named swerp, set the GID and UID, and create the .env file for you.

Running make help lists all commands available to you.

Containers

Base Images

Alpine

Ubuntu

Frontend

Nginx 1.11.9 compiled from source with Brotli compression and HTTP/2 support.

The nginx default host configuration is setup for you. Located in srv/nginx/vhost.d/site.conf. See the advanced configuration below for specifics on how to setup reverse proxies for enabled services.

Available variables:

  • TZ: Your timezone. Default: America/Denver
  • PUID: User UID. Default: 1000
  • PGID: User group id. Default: 1000

Volumes:

  • ./srv/nginx:/etc/nginx: Nginx configuration.
  • ./srv/public:/var/www/public: Web root for the frontend.

rTorrent/ruTorrent

ruTorrent and rTorrent with Autodl-Irssi running on Alpine Linux. Compiled with Media Info.

Includes PHP7.

RuTorrent is accessible via http://YOUR.IP.ADDR.ESS/rutorrent/

Available variables:

  • TZ: Your timezone. Default: America/Denver
  • PUID: User UID. Default: 1000
  • PGID: User group id. Default: 1000

Volumes:

  • ./data:/data: Location of saved files.
  • ./logs:/logs: Logs for php and rTorrent.
  • ./srv/public:/var/www/public/rutorrent: ruTorrent created in this container with autodl-irssi. Actually served from frontend.
  • ./config:/config: Configs for php, rTorrent, irssi, and autodl.

Deluge

This container runs the Deluge BitTorrent daemon and the web ui. To learn more, visit the Deluge website.

Deluge is accessible via http://YOUR.IP.ADDR.ESS/deluge

Available variables:

  • TZ: Your timezone. Default: America/Denver
  • PUID: User UID. Default: 1000
  • PGID: User group id. Default: 1000

Please checkout the Deluge docs section located here for initial configuration instructions.

Plex

Uses the official Plex Docker image. Checkout the readme here

Plex is accessible via http://YOUR.IP.ADDR.ESS:3400/web

The default library location is ./media

Available variables:

  • TZ: Your timezone. Default: America/Denver
  • PLEX_CLAIM: Plex claim token. Get it from: https://plex.tv/claim
  • ADVERTISE_IP: Server IP address for Plex. Default: http://127.0.0.1:32400
  • PLEX_UID: User UID. Default: 1000
  • PLEX_GID: User group id. Default: 1000
  • CHANGE_CONFIG_DIR_OWNERSHIP: Change directory ownership. Default: false

Sonarr

The Sonarr container runs on Ubuntu 16.04 via Mono

Sonarr is accessible via http://YOUR.IP.ADDR.ESS:8989

Available variables:

  • TZ: Your timezone. Default: America/Denver
  • PUID: User UID. Default: 1000
  • PGID: User group id. Default: 1000

Volumes:

  • ./config/sonarr:/config: Where the config files are stored.
  • ./data:/data: Entire directory of all files. Used to mount the complete folder.
  • ./data/downloading:/downloads: Where downloading torrents are located
  • ./media/TV Shows:/tv: Location of media directory, where Plex reads from. Sonarr hardlinks complete files here.

SickRage

Dropped in favor of Sonarr, but still included incase you prefer it.

SickRage is accessible via http://YOUR.IP.ADDR.ESS:8081

Available variables:

  • TZ: Your timezone. Default: America/Denver
  • PUID: User UID. Default: 1000
  • PGID: User group id. Default: 1000

Resilio-Sync

Sync uses peer-to-peer technology to provide fast, private file sharing for teams and individuals. By skipping the cloud, transfers can be significantly faster because files take the shortest path between devices. Sync does not store your information on servers in the cloud, avoiding cloud privacy concerns.

Web interface visible at http://YOUR.IP.ADDR.ESS:8888

Directories mounted for sync in /data/

Available variables:

  • TZ: Your timezone. Default: America/Denver
  • PUID: User UID. Default: 1000
  • PGID: User group id. Default: 1000

Credit

I give credit where it's due and would like to give a shoutout to LinuxServer.io. Parts of their Dockerfiles were borrowed and modified for this seedbox setup.