Self-Hosted

As I've spent quite a considerable amount of time regarding self-hosting, let's go in depth about what I'm running and why!

Why & how?

After realising that trying to run everything I wanted on one (logically speaking) OS was going to be a huge pain, I looked for alternatives. Using Virtual Machines was obviously one way of going about it, but that would require a fair bit of power (which at the time my home server didn't have a lot of). Eventually I came across Docker, which long story short, has been working fantastically for me. I've been using docker-compose to manage my containers in such a way that if I needed to migrate them, it would be very straightforward (utilising volumes).

Accessing anything from the public internet required a bit of research as my ISP has put me in a CGNAT, meaning that I'm unable to do any sort of port forwarding which is what would usually be done to access resources from other networks. To get around this restriction, I have an AWS instance with an Elastic IP running under free-tier which has a reverse SSH tunnel to my server. A nginx reverse proxy is then used to serve the required services to myself while I'm not on my local network. Using both AWS Security Groups and UFW, access for most services is restricted to a select few subnets to decrease the risk of any attacks.

What am I hosting?

Short story, a lot. Long story, read on! Everything below is running in a docker container, unless otherwise specified.

GitLab CE + GitLab Runner

GitLab offers the ability to host your own instance for free. As a self-proclaimed software developer, having a private git instance is pretty dang useful. I'm using it to host all of my personal projects that actually get created so that I can both access them from pretty much anywhere, and have them managed with version control. I also recently setup CI/CD for one of my projects, which included deploying GitLab Runner to run those CI/CD jobs. Needless to say, GitLab works like a charm!

Unifi Controller

As I own a Unifi Access Point, the Unifi Controller software is a necessity to have. Admittedly, I haven't done much outside of the initial setup of the AP and creating a guest wireless network, however as more Unifi hardware is eventually introduced into my network the controller will become much more valuable. Nevertheless, it's a huge step up from our ISP issued all-in-one.

Bitwarden

Bitwarden is a password manager. Need I say more? I originally used KeePass however I wanted something that was more accessible but didn't compromise on security. I believe Bitwarden fills that requirement, offering a web interface and an official app. Bitwarden have completed third-party security audits, which is always a good sign for a service that handles passwords and other sensitive information. As I'm hosting it myself, all of my passwords are stored on my server instead of on Bitwarden's infrastructure. Not that I don't trust them, but having control of my own data is one of the reasons I used KeePass in the first place. As a bonus, they also support U2F as a form of 2FA!

Pi-Hole

Pi-Hole is a "black hole for Internet advertisements". Effectively it's a DNS server that sinkholes queries with specific URLs based on your blacklists. While not having any ads is pretty cool, I do whitelist certain websites that do deserve to serve ads to me. I also use it to increase my privacy online, by sinking any queries to Facebook URLs. This also blocks Instagram, WhatsApp, etc, but I don't use those so it doesn't bother me (just a side effect to be aware of).

I also have Pi-Hole hosted on my VPN server, which is used exclusively for VPN clients (no open resolvers here!).

Heimdall

Heimdall is an application dashboard which I use to quickly get access to services that I host or are on my local network. Not much else to say other than it does it's job.

Ouroboros

Another short one, Ouroboros keeps all of my containers up to date.

ZNC

I'm one of those people that still use IRC, so ZNC is pretty much required. I use it to stay connected to the servers that I frequent so that I get some message history, and I don't spam every channel with join and leave messages.

Wireguard

Technically not self-hosted, but I figured I would include it in the list as it supports the ability of being able to access my hosted services from the public internet. It's in a standard Client-Server configuration, with the Server being the AWS instance. No substantial amount traffic goes through it, meaning that I rarely go over the free-tier data limit.

Minecraft Servers

From time to time, my friends and I hop on to play some Minecraft. Obviously to do this, we need to connect to a server, and hosting one myself gives us the freedom to do whatever we want with it. I also use my own script to automatically update my servers. The servers aren't running in Docker containers, but I plan to have them do so in the future.

Plex Media Server

I'm a bit of a content hoarder, so Plex makes it super easy to consume that content wherever I am. Plex is another one instance where I could be hosting it in a container, but I haven't felt a need to as I set it up way before discovering the benefits of Docker.