Setting up a Seedbox on DigitalOcean

Sharing files shouldn’t be this slow.

When some people think of torrents, they think of illegal file transmission, a way to receive and share pirated music, movies, and software. But that quick judgement overlooks the many legitimate uses for torrenting, especially in the open source community.

The peer-to-peer nature of these files lowers download server costs for many organizations willing to use them, including large entities including Canonical (Ubuntu), Blizzard Entertainment, NASA, and The Internet Archive, even Facebook and Twitter use it internally to share files between employees. The way these downloads are distributed usually increase download speeds as opposed to downloading from a single source. But with some ISPs (Comcast…) throttling torrent connections, utilizing these files can be slow, and you aren’t helping anybody else with your uploads. Whether you just want the fastest downloads available, don’t want to advertise your personal IP to everybody else using your torrents, or just want to give back to the aforementioned organizations by boosting their downloads for everybody else, a seedbox is a cheap and easy way to Torrent quickly and securely. This tutorial was not sponsored by DigitalOcean or anything, by the way. I just rather like their services 😉


All you’ll need is a DigitalOcean account (aff. link) and a few torrents you want downloaded, and you should be set! Of course, you’ll also need a computer that can SSH into your Droplet. This tutorial will technically work on any VPS running Ubuntu 16.04, I personally chose DigitalOcean because of their network speed and reliability, as well as their new Block Storage system for adding fairly cheap additional storage for your downloaded files. If you’re interested in downloading… less-than-legal files, that would be against their ToS (and of course, the law) and you should look for a host elsewhere.

Creating your Droplet

If you already have an Ubuntu server at DigitalOcean or elsewhere, skip to the next section 🙂 Once you’ve signed up, create a new Droplet with the following configuration:

  • Distribution: Ubuntu 16.04 x64
  • $5/mo Server (Any size will work of course, but this will function fine on even the lowest specs)
  • Datacenter region: NYC1 or SFO2. Usually you would choose the location physically closest to you, but these are the only two locations that support Block Storage at the time of writing. If you know you won’t be interested in expanding to additional storage you can choose a different location.
  • Add your SSH keys if you have them, to make connections more secure.
  • Set your hostname to anything really, for example ‘seedbox’

Connecting to your server

If you’re on Linux (Ubuntu, Fedora, etc.) or macOS, this is easy. Just open a terminal and enter:

ssh [email protected]

Of course, replacing with your server’s IP address. If you’re on Windows this is a little trickier, but you can use a program like Bitvise to connect. That has the benefit of including a file explorer for the server as well to make downloading your torrents easier.

Installing Transmission

Once you’re connected in a Terminal, or with Bitvise, run the following commands:

sudo add-apt-repository ppa:transmissionbt/ppa sudo apt-get update sudo apt-get upgrade

This will update packages on your Droplet and add the Transmission PPA, always best to do this first. Then install the Transmission daemon:

sudo apt-get install transmission-cli transmission-common transmission-daemon

Now stop the service so we can edit some Transmission settings:

sudo systemctl stop transmission-daemon

Now that it’s stopped, run the following to open the configuration file:

sudo nano /etc/transmission-daemon/settings.json

Look through these settings and change what you’d like, but most of these can stay as their default. First, we need to enable the web service itself, change

. . .
"rpc-enabled": false;
. . .


. . .
"rpc-enabled": true;
. . .

Then change the login credentials to access the web client:

. . .
"rpc-password": "{253519fea2e9c12ad16b4aaad1f6b2a18b1cfe49DJ0vAmP4",
. . .
"rpc-username": "transmission",
. . .

Replace rpc-username with whatever username you’d like, and rpc-password with a password. You can type the password in plain text here, when we restart Transmission it will automatically change to an encrypted version like how it looks now. (The default password is ‘transmission’ by the way, if you don’t want to change it, however that is very insecure for a public facing webserver). Next you’ll need to disable the IP whitelist (in this same file), change the following setting from:

"rpc-whitelist-enabled": true,


"rpc-whitelist-enabled": false

Alternatively, you could add your home’s IP address to the rpc-whitelist setting and leave it enabled, like so:

"rpc-whitelist": ",",

Replacing with your home’s IP, but most homes have dynamic IP addresses making it difficult to keep this configuration file updated with IP address changes. Once we have the whitelist configured and credentials set, start Transmission for your settings to take effect.

sudo systemctl start transmission-daemon

Connecting to your seedbox

All it takes now is opening a web browser and going to (replacing with your Droplet’s IP address again) and logging in with your credentials. Once you have that done you should be met with a screen like this. 2016-07-25 21_50_53-Video (__LITHIUM) (V_) Obviously this is looking a little bare, assuming you have some .torrent files already, you can add them by pressing the blue folder “Upload” button in the top left corner. Once you add and upload a torrent, it’ll start downloading right away! Assuming all went well, everything should be functioning perfectly!

Bonus Section: Block Storage Configuration

If you set this up with DigitalOcean and you need more space for your library of downloaded files, you can easily add another drive to your server. Click your Droplet from the menu in the DigitalOcean control panel and find the “Volumes” option in the sidebar. Now click “Attach a Volume” and choose a size for your disk. Every GB is $0.10/month so we can easily add a small 10GB drive for $1. As long as you keep the “Attach this volume to seedbox” option checked, it should automatically attach itself to your server in moments. Very soon you should see some instructions to attach the storage to your Droplet, that look similar to this:

sudo mkfs.ext4 -F /dev/disk/by-id/scsi-0DO_Volume_[VOLUMENAME]
sudo mkdir -p /mnt/[VOLUMENAME]
sudo mount -o discard,defaults /dev/disk/by-id/scsi-0DO_Volume_[VOLUMENAME] /mnt/[VOLUMENAME]
echo /dev/disk/by-id/scsi-0DO_Volume_[VOLUMENAME] /mnt/[VOLUMENAME] ext4 defaults,nofail,discard 0 0 | sudo tee -a /etc/fstab

These commands will vary depending on the volume name you chose, so it would be best to follow the commands DigitalOcean gives you in your browser. Once you have that completed you should have a new volume mounted at a point similar to /mnt/volume-nyc1-02/. Now you can open Transmission in your browser, and we’ll set that as the new default download location for any new torrents. Simply click the wrench icon and change “Download Location” to your new mount point, and it should be set! If you had old torrents already loaded in, they will still work from the old directory, but they will not automatically be moved. New torrent files however will download directly to that new file. Once you change it, simply press the ‘X’ on the settings box and it’s set!


By now you should have a working seedbox with expandable storage safely setup! I hope you enjoyed this tutorial, I will be working on posting more in the future, if you have a request for future tutorials, let me know on Twitter and I’ll look into it!

BTC: 1E2SSJCVp5zsp2PcayM6tdFFTSNcj89fCm

Leave a Reply

Your email address will not be published. Required fields are marked *

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    Markdown is turned off in code blocks:
     [This is not a link](

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see