One of the things that excited me about moving out on my own was being able to run a home server. I probably could have done it before, but I would have felt bad about hogging all the Internet bandwidth. Anyways, I’m free to do it now and so I did it. Here’s what I use it for!
The Host
#The server itself is a mini PC with a Ryzen 7 laptop chip. It’s massively overpowered for what I’m using it for, but better safe than sorry.
I’d planned to get fiber Internet service, but my apartment building turned out to not be wired for it, so I’m stuck with just 10Mbps up. The download speed is good, though; I get a consistent 350Mbps1 and I can upgrade to 1Gbps if I want—but I haven’t felt the need.
For storage, I have a 1TB NVMe drive running the OS, and a 4TB external HDD. The big disk is already full, so eventually I’ll get a multi-bay enclosure and another drive or two.
Docker
#Everything listed below runs in a big Docker Compose stack, defined in a Git repo. When possible, I use images from linuxserver.io.
I also use the server as a Docker host, so Docker commands that I run on my MacBook actually run on the server.
Torrents
#I download a lot of… Ubuntu ISOs.
To do so safely, I run WireGuard with Mullvad, and my torrent client is qBittorrent.
To make sure that the BitTorrent traffic is always running through the VPN, I set the network_mode
to service:wireguard
.
As far as I know, this makes it so that the qBittorrent container can only send network data through the WireGuard container.
TV/Movies
#To watch my extensive library of legally-obtained media, I run Plex. That is basically all that there is to it. Plex is magical.
Books
#I read almost exclusively on my e-reader, and I manage my book library (also all legally-obtained) with Calibre. Calibre is a desktop application, so it needs Guacamole to be running so that it can be accessed through a web browser.
I also run Calibre-Web. Mostly it’s for sharing books with my friends and family, but I’m about to swap out my Kindle for a Kobo and I’m looking forward to using the wireless sync feature (now that I run Calibre itself in Docker, I can’t plug in via USB).2
Management
#I recently set up Portainer to keep track of my containers. I’m not sure how much value I actually get out of it, but maybe one day I’ll need to restart a container from my phone…
External Access
#I use Caddy as a web server to expose Plex, Calibre-Web, and Portainer to the Internet. If I had better upload speed, I’d love to share my Plex server with my friends and family, but as-is, only the book library gets used by anyone but me.
TODO
#I still have some stuff running on EC2, which ideally I would like to get moved over:
- Commento: Comments for my blog
- Plausible: Analytics for my blog
- Gitea: A Git server where I mirror my repositories
- Drone CI: A CI server/runner that I set up for the Julia Lab, and should probably move to an MIT server and forget about
- osu!bot: A Reddit bot
- osr2mp4-bot: A video rendering/uploading bot (but this needs better upload speeds)
Regrettably, I pre-paid for an EC2 instance last year and there’s still about 18 months left, but oh well. In any case, self-hosting stuff is fun. It all seems pretty simple when I lay it out like this, but it’s infinitely useful!