Self Hosting
Self Hosting
This article is intended to be an ever-evolving guide to setting up a self-hosting solution, put together as I try out and learn various steps myself.
Location
I want to host with my own hardware where feasible, mostly so I have control over costs but general control and independence reasons are appealing also.
I don't have a static IP and don't really want the fuss of getting one, nor making my home IP publically visible. For this reason I've opted to run a small VPS on an external hosting provider to act as a public gateway to locally hosted content. I also want to run a VPN on this VPS, so I can access services only visible to my home network while away from it. For the external provider I went with Hetzner for reasons of price, reputation and that they are based in Europe. I wasn't too happy with the extent of personal data they collect during registration but understand why they do it.
Hardware
I have a hodge-podge of old hardware laying around and where possible am trying to use that over buying anything new. That said, my Raspberry Pi was ancient and I don't think it was up to the task of running my planned services, so I grabbed a Raspberry Pi 5 with 8 GB RAM. I had a couple of old SSDs - one 256 GB and one 2 TB, so hooked them up via PCIe to USB connectors. The Pi is running on WiFi at the moment, although I could attach it to Ethernet over the house wiring if there is a performance issue.
Public Host
I'm running a Debian image on a small Hetzner VPS. This hosts public facing services, such as my personal website and Forgejo code repository.
Home Network
My home network just consists of a Raspberry Pi based server for now - with access from various laptops, mobile clients and a Smart Tv. I don't have any short term plans to add to that. It isn't exposed to the public internet but is planned to be accessible by VPN.
Operating System
For now, I've gone with the default Debian image for the Raspberry Pi. I wasn't too careful setting it up so have ended up with a full blown desktop installation. Hopefully in future I can eventually get Guix running on there, which I'm currently happily using on my laptop.
Core Services
These are the core services that support access, monitoring and security on my system.
DNS
I'm using pi-hole for ad blocking and am planning to also use it for internal DHCP/DNS management on my home network.
For starters I set it up to act as a DHCP server. Before starting I needed to configure the pi to get a static IP, this is through /etc/network/interfaces.
Then I followed option 'Alternative 1' on the pi-hole getting started docs:
git clone --depth 1 https://github.com/pi-hole/pi-hole.git Pi-hole
cd "Pi-hole/automated install/"
sudo bash basic-install.sh
Finally I forced my router's DHCP server to only assign one IP, a fixed one to the pi and then enabled DHCP serving on the Pi.
VPN: Wireguard
I want to use Wireguard to allow access to services on my home network that are not intended to be public. It will also allow serving of services that are meant to be public via the VPS and reverse proxy.
https://www.digitalocean.com/community/tutorials/how-to-set-up-wireguard-on-ubuntu-20-04
Backup
Considering rsync or BorgBackup
Updates
Manual or watchtower
Monitoring
Undecided
Services
Credentials
Vaultwarden
Custom self host for receive with, custom and gmail for sending
Photos
Immich
Music
Navidrome
Documents
Nextcloud
Calendar, Contacts, Notes
Nextcloud
Code
Forgejo
Personal Site
Proxied through VPN and reverse proxy
Social
Self host Mastodon or GoToSocial