Build Your Own Seedbox
Pulsed Media runs PMSS on 190+ production servers. The same software is open-source and free to install on your own hardware. "Build your own seedbox" means either renting a dedicated server, installing Debian and PMSS, and running it yourself, or using home hardware (an old PC, a NAS device) as a local seedbox.
Both are covered here. The dedicated server route is more capable. The home hardware route (sometimes called a NAS seedbox) is cheaper upfront but comes with real constraints, especially for private tracker ratios and sustained seeding.
Approach 1: Dedicated Server + PMSS
Rent a dedicated server, install PMSS, and you have your own managed seedbox without writing the management stack yourself. PMSS is the same software that runs on Pulsed Media's entire fleet — open-source (GPL-3.0), actively maintained since 2010, on GitHub at https://github.com/MagnaCapax/PMSS.
What PMSS gives you
A single install command turns a minimal Debian server into a complete multi-tenant seedbox host. It handles:
- Torrent clients: rTorrent with RuTorrent web interface (default), Deluge, or qBittorrent
- Web stack: nginx reverse proxy with per-user lighttpd and PHP
- File access: ProFTPD for FTP (passive ports 60000-65535), SFTP via OpenSSH
- SSL certificates: Let's Encrypt via certbot, automated
- Firewall: FireHOL, compiled from source
- Media applications: Radarr, Sonarr, Prowlarr, Jellyfin, SABnzbd via install-media-stack.sh
- VPN: WireGuard per user (10.90.90.0/24)
- Containers: rootless Docker per user
- Sync: rclone and Syncthing
- Traffic accounting: iptables-based per-user counters, checked every 5 minutes
- User isolation: hidepid=2, per-user cgroups, separate lighttpd and rTorrent process per user
The multi-tenant design means one server can host multiple users, each with their own quota, credentials, and isolated process space. If you are setting this up for personal use only, all of that still works fine with a single user.
Server requirements
| Component | Minimum | Recommended |
|---|---|---|
| OS | Debian 10, 11, or 12 | Debian 12 |
| RAM | 4 GB | 8 GB or more |
| Root partition free space | 2 GiB | 10+ GiB |
| /home filesystem | Dedicated partition, ext4, quota support | Dedicated partition |
| Hostname | Must be a fully-qualified domain name | FQDN |
| Network | Any standard ethernet interface | 1 Gbps or faster |
PMSS does not support Ubuntu. The installer expects Debian specifically: package baselines, path conventions, and service management assumptions are all Debian-oriented. Using Ubuntu will likely result in broken installs or silent failures.
The hostname requirement is worth understanding: PMSS reads /etc/hostname to configure certbot for Let's Encrypt, to set up ProFTPD's TLS certificate, and to configure nginx server name blocks. A short hostname like myserver instead of myserver.example.com will cause SSL setup to fail.
The /home partition needs ext4 with quota mount options. The fstab entry should include:
<syntaxhighlight lang="bash"> usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv1,nofail,noatime,lazytime,commit=30 </syntaxhighlight>
The installer handles this, but if you are mounting /home from a RAID array or separate drive, verify the partition exists and is formatted before running the installer.
Installing PMSS
On a fresh Debian server, as root:
<syntaxhighlight lang="bash"> wget -qO /tmp/pmss-install.sh https://github.com/MagnaCapax/PMSS/raw/main/install.sh bash /tmp/pmss-install.sh </syntaxhighlight>
To track the git main branch instead of the latest stable release:
<syntaxhighlight lang="bash"> bash /tmp/pmss-install.sh git/main </syntaxhighlight>
To pin a specific release date:
<syntaxhighlight lang="bash"> bash /tmp/pmss-install.sh release:2023-07-22 </syntaxhighlight>
The installer walks through two steps. First, it installs base tooling (PHP CLI, git, curl, build tools), configures the hostname, sets up /home fstab quota options, hardens /proc with hidepid=2, and downloads the PMSS snapshot. Then it hands off to update.php, which installs the full software stack: torrent clients, web server, firewall, SSL tools, and everything else.
Installer logs go to /var/log/pmss-install.log. Update phase logs go to /var/log/pmss/update.log.
For non-interactive installs (automation, CI):
<syntaxhighlight lang="bash"> bash /tmp/pmss-install.sh --hostname=myserver.example.com --non-interactive </syntaxhighlight>
Other useful flags:
| Flag | What it does |
|---|---|
--hostname=<fqdn> |
Set hostname without interactive prompt |
--skip-hostname |
Keep current hostname as-is |
--quota-mount=<path> |
Apply quota options to a specific fstab mount |
--skip-quota |
Skip quota configuration entirely |
--skip-upgrade |
Skip the initial apt full-upgrade |
--dry-run |
Print the plan without changing anything |
Adding users
Once PMSS is installed, you add users with:
<syntaxhighlight lang="bash"> php /scripts/addUser.php USERNAME PASSWORD MAX_RAM_MB DISK_QUOTA_IN_GB </syntaxhighlight>
For example, a user with 2 GB RAM limit, 2 TB disk quota:
<syntaxhighlight lang="bash"> php /scripts/addUser.php alice secretpassword 2048 2000 </syntaxhighlight>
An optional fifth argument sets a traffic limit in GB. Without it, traffic is tracked but not enforced.
The command creates a Unix account, an rTorrent configuration, a lighttpd configuration, and cgroup resource limits. The user then accesses their seedbox at:
<syntaxhighlight lang="bash"> https://YOURSERVER/user-USERNAME/ </syntaxhighlight>
Keeping PMSS updated
Updates use the same two-phase system as the initial install. Run as root:
<syntaxhighlight lang="bash"> php /scripts/update.php git/main </syntaxhighlight>
For scripts-only updates (skips full package management cycle):
<syntaxhighlight lang="bash"> php /scripts/update.php git/main --scripts-only </syntaxhighlight>
Do not bypass update.php by calling underlying scripts directly. The wrapper handles APT source normalization, cron backup, event logging, and the two-phase update continuation. Calling individual utility scripts manually skips all of that.
Installing the media stack
After the base install, the media stack is optional:
<syntaxhighlight lang="bash"> bash /etc/skel/install-media-stack.sh </syntaxhighlight>
This installs Radarr, Sonarr, Prowlarr, Jellyfin, and SABnzbd. For Jellyfin and media server use cases, this is the relevant step.
Choosing hardware for a dedicated server
The storage subsystem matters most for seedbox performance. BitTorrent I/O is random-write heavy: many small pieces landing in parallel from multiple peers. Hard disk drives handle this differently from NVMe drives.
For budget dedicated servers:
- SATA HDDs in a RAID array give capacity at low cost. RAID5 protects against a single drive failure. RAID0 maximizes throughput at the cost of any redundancy.
- NVMe as a caching tier (Linux page cache + NVMe swap) handles the hot working set at SSD speeds while HDDs hold bulk storage. PM uses this configuration on its own servers.
- Enterprise SAS drives have write cache disabled by default (designed for BBU RAID controllers). Enable it with
smartctl -s wcache,on /dev/sdXif you are not using a BBU controller.
Network port matters more than CPU for seedbox use. A 1 Gbps port with a slow CPU outperforms a 10 Gbps port with throttled bandwidth for most workloads. CPU usage on a seedbox is low: mostly rTorrent piece hashing and PHP serving the web interface.
RAM sizing: 4 GB is functional for a single-user install. For multi-user or when running Jellyfin transcoding, 8 GB or more is more comfortable.
Approach 2: Home Hardware (NAS Seedbox)
Running torrent clients on home hardware (an old PC, a tower server, or a NAS device) gives you hardware you own with no monthly hosting fee. This is the "NAS seedbox" setup. The tradeoffs are real, and they matter more than most DIY guides admit.
Software options for home hardware
For a single-user home setup, PMSS is more infrastructure than you need. Simpler options:
- Debian 12 + qBittorrent-nox + nginx (lightest option, no user management overhead)
- Debian 12 + Deluge with web UI
- Debian 12 + PMSS if you want watchdogs, auto-restart, Let's Encrypt, and the media stack
PMSS does work with a single user. The benefit even for home use is the watchdog scripts that restart rTorrent or other services if they crash, and the automated Let's Encrypt renewal. If you want the media stack (Sonarr, Radarr, Jellyfin) integrated, PMSS handles that consistently.
For Synology or QNAP NAS devices: Docker containers running qBittorrent or Deluge work. TrueNAS has torrent client plugins. These are reasonable for light use but NAS hardware typically has constrained RAM (2-4 GB), which limits concurrent torrents.
Home hardware minimums
| Component | Minimum for seedbox use |
|---|---|
| CPU | Any x86_64 (even a decade-old i3 works) |
| RAM | 4 GB (8 GB better, needed for Jellyfin) |
| Storage | 1 TB HDD or larger |
| Network | 100 Mbps ethernet minimum, gigabit preferred |
| OS | Debian 12 |
ARM hardware (Raspberry Pi and similar) is not recommended for seedbox use. The combination of limited RAM, slow storage I/O, and ARM architecture creates bottlenecks under real torrent loads.
The bandwidth constraint
Home internet upload speeds run 10-50 Mbps on most residential plans. A datacenter seedbox at 1 Gbps has 20-100x the upload capacity. This is the most important constraint for anyone who seeds back on private trackers.
A ratio-sensitive private tracker requires seeding back roughly what you download. With 10 Mbps upload, it takes 100 hours to seed back 450 GB. With 1 Gbps, the same job takes about 1 hour. For casual downloading this does not matter. For maintaining ratios on competitive trackers, it does.
Other practical constraints
Dynamic IP addresses are the norm on residential connections. Most home ISPs assign a new IP on router restart or after a lease expiry. Private trackers and some clients track your IP. Running a DynDNS service solves the DNS problem but not the IP change itself.
BitTorrent requires open inbound ports to accept peer connections. This means configuring port forwarding on your router. Some ISPs use CGNAT (carrier-grade NAT), where your router does not have a public IP at all. Port forwarding is impossible in that configuration.
Power cost is not zero. A machine drawing 50-100W running 24/7 costs roughly EUR 110-220 per year at EUR 0.25/kWh. A budget seedbox plan often costs less.
Home internet goes down. Router restarts, ISP outages, and maintenance windows are normal. When your connection drops, seeding stops. Private tracker ratios do not pause while you are offline.
None of this means home hardware is wrong for every case. If you want full control of your data, are seeding only on public trackers, or are primarily using the box for local Jellyfin streaming rather than ratio maintenance, the home setup works fine.
Approach 3: VPS
A VPS runs the same software as a dedicated server (Debian, PMSS or a direct client install) but on virtualized hardware shared with other VPS tenants.
The storage constraint is the main issue. Most VPS plans come with 40-100 GB of SSD storage, compared to 1-4 TB on a typical dedicated seedbox server. This limits how much content you can hold at once.
Traffic caps are another factor. VPS plans typically allow 1-20 TB per month. Seedbox plans at the same price point often allow 10-100 TB or are unmetered.
Some VPS providers prohibit torrent traffic in their terms of service. Check before setting up.
For light use (1-50 torrents, not time-sensitive, small data volumes) a VPS works. For sustained heavy seeding or large storage needs, dedicated hardware is the correct tool.
Common install issues
Most problems with a new PMSS install come from a small number of root causes. These are the ones that appear repeatedly.
Hostname is not an FQDN
If /etc/hostname contains a short name like server1 instead of server1.example.com, PMSS will install but SSL will fail. Let's Encrypt cannot issue a certificate for a bare hostname. ProFTPD TLS will also fail to configure correctly.
Fix this before running the installer:
<syntaxhighlight lang="bash"> echo "server1.example.com" > /etc/hostname hostname -F /etc/hostname </syntaxhighlight>
The domain does not have to point at the server when you install. Certbot resolves DNS at certificate issuance time. But the hostname in /etc/hostname must be the FQDN you intend to use.
/home is not a separate partition or lacks quota options
PMSS requires disk quotas for per-user storage enforcement. Quotas only work on a filesystem that was mounted with quota options. If /home is part of the root filesystem rather than a separate partition, or if the fstab entry lacks quota options, user quota enforcement will not work.
The installer can apply the correct fstab options with --quota-mount=/home. If your /home is on a separate device (common on dedicated servers with multiple drives), check that the device is listed in /etc/fstab before running the installer.
Running on Ubuntu
PMSS does not support Ubuntu. The package baseline files, APT source assumptions, and service management patterns are all specific to Debian. The installer may appear to succeed on Ubuntu but produce a broken or incomplete stack. Use Debian 10, 11, or 12.
Too little RAM
4 GB is the functional minimum. With less, rTorrent, lighttpd, and nginx compete for memory and the PHP interface becomes unresponsive under load. If you are running Jellyfin transcoding on the same machine, 4 GB is not enough. Jellyfin alone benefits from 4+ GB depending on the number of simultaneous streams. Plan for 8 GB if you are adding media server functionality.
Updating PMSS: use update.php, not the scripts directly
When updating PMSS after initial install, always run:
<syntaxhighlight lang="bash"> php /scripts/update.php git/main </syntaxhighlight>
Do not call utility scripts under /scripts/util/ directly as a shortcut. The update.php wrapper handles APT source normalization, script self-update, cron backup, and the two-phase continuation. Bypassing it skips these steps and can leave the server in a partial-update state.
When managed seedboxes make sense
The DIY path requires you to know, or learn, Debian system administration. Installing PMSS is straightforward, but what happens next requires you to handle it: drive failures, service restarts, kernel updates, certificate renewals, quota enforcement, and everything else that goes wrong on a Linux server running 24/7.
Managed seedboxes from Pulsed Media and other providers remove that overhead. What a managed plan gives you:
- No setup: the server is ready immediately after signup
- No maintenance: updates, restarts, drive replacements, and monitoring are handled
- Datacenter connectivity: 1 Gbps to 10 Gbps, sustained, in a real datacenter with redundant power and cooling
- IP privacy from day one: the datacenter IP appears in torrent swarms, not your home IP
- No ISP throttling, no port blocking, no CGNAT
- Finland jurisdiction: no graduated response copyright enforcement system
- PM's datacenters in Helsinki and Kerava, with own AS (AS203003)
PM has been running this infrastructure since 2010. The same PMSS that you can install yourself runs on every PM server. The difference is not the software. It is who handles the operations.
If you do not want to become a Linux sysadmin, managed is the right answer. If you want to understand the stack, learn server administration, or host other users, the DIY path works. The software is the same either way.
PM's seedbox plans start at 2TB with a 1Gbps shared port, running the same PMSS stack described in this article, in PM-owned Finnish datacenters.
PMSS on PM's own servers
When you use a PM seedbox, you are using the same PMSS codebase described in this article. The PM MD series comes with PMSS pre-installed. Product naming follows a convention: V-series uses RAID0 (maximum disk speed, no redundancy), M-series uses RAID5 (one drive failure tolerance). The 1000 suffix indicates a 1 Gbps network port; 10G indicates 10 Gbps.
The hardware underneath runs spinning HDDs in RAID arrays, with NVMe as a page-cache caching tier on newer servers. PM manages over 190 production servers this way across its Finnish datacenters.
See Also
- Seedbox
- PM Software Stack
- RAID
- Hard disk drive
- NVMe
- Debian
- Pulsed Media
- Pulsed Media Datacenters
- Seedbox access via FTP, SSH and SFTP
- Jellyfin
- Seedbox for Plex and Jellyfin
- Downloading from seedbox
On the blog: