For the past few weeks, and over the next few weeks, I have been playing with my local network setup and am hoping to migrate most of the self-hosted services I use and have scattered throughout the various server providers to my local network. Except of those that should be on the web obviously (Mastodon instance, Email server, and similar).
This is a slow effort that I do in-between job and personal duties so some days I might do a lot, and others not so much. But I don’t stress about it, it is a passion project and not something that has to be done by a certain date.
Few years back I had much more of the self-hosted services and have successfully maintained them all. Usually, folks struggle with maintaining or keeping up-to-date but I had no such issues as everything was pretty well configured and most of the actions were scripted and automated.
Some time ago
Few years back I was much more into self-hosting things so it will not come as a surprise that most of the things I used were self-hosted indeed. Throughout the years, this decision really helped me to learn a lot about the technology and helped me progress in my career. It is quite different when you learn something by following the course versus when you really go knee deep and use them in production. And when you center yourself around the usage of self-hosted services, well, if something breaks, you better fix it because no one else will.
Some of the services I had running were:
- DNS servers powering all of my domains (and few others). Servers used Bind, first in cPanel DNSOnly installation, and then manually configured
- one cPanel server running LAMP stack and email service for few of my friends and their companies/projects.
- Personal Email server running Postfix, manually configured by me.
- Mastodon instance as the go-to social network. Throughout the years I have shut down and provisioned few of those though
- AWX/Ansible Tower instance for managing all of the servers using Ansible
- Nextcloud instance for my personal (and family) file sync, calendar sync, and contacts sync needs.
- TinyTinyRSS instance to subscribe to the various RSS feeds (news, blogs, software releases, security bulletins etc.) and reading them or syncing using mobile/desktop apps.
- Wordpress based website - this blog in its previous form was Wordpress based :-)
- Wallabag instance as my “Read it later” service
- R1Soft/Idera CDP backup instance for keeping everything backed up
- ZNC IRC bouncer for staying connected to the miscelaneous IRC servers and channels, and also syncing messages across the connected clients (I had multiple devices and wanted to sync the messages between them)
- Bookstack for my personal Wiki - and before Bookstack I honestly don’t remember what exactly did I use, but I do remember having some self-hosted service
- Minecraft server for when I used to play a bit, but mostly for my little (literally at the time) sister and brother.
- Gitlab for hosting all of my code repositories and also certain build pipelines
- Wireguard for getting IP from the Germany in order to avoid some content restrictions on Youtube
And most likely I forgot a few.
For one reason or the other, I have replaced many of those from the list with either SaaS offerings or some Cloud service. I still have certain services hosted by myself because I just prefer those particular services over the SaaS offerings. So in the current form I have:
- for my DNS management needs I use Route53 on AWS
- Mail server is still self-hosted and powered by Postfix. But it changed the OS few times though: CentOS -> Debian -> CentOS -> FreeBSD -> Debian -> Ubuntu , and most likely it will end up on Debian again once the current Ubuntu LTS goes EoL.
- Mastodon instance has been deployed again (Feel free to follow me @firstname.lastname@example.org)
- website is now statically generated with Hugo, uploaded to S3 and distributed by Cloudfront
- since the website is static, I had to figure out how to host article comments so I also self-host Commento system, although, I might reconsider that choice in the near future
- HashiCorp Vault
- Bookstack is still my personal wiki tool
- for managing RSS feeds, instead of the TTRSS, I use Miniflux these days
- Wallabag has been replaced with Pocket
- Nextcloud has been shut down and I have migrated my (and family member) data to a of Microsoft OneDrive and iCloud as they were quite cheap for the storage they provided
- As I’m not so active on IRC these days, I had no need for ZNC so it got shut down
- Minecraft has also been decomissioned
- I switched all of my private repositories to Github since for personal use that’s free now
- No need for Wireguard at this moment so it also got shut down
- And since the number of servers has been drastically reduced I no longer needed CDP for backup (it was overkill anyhow) or AWX/Ansible Tower instance for managing those instances
This being said, I started experimenting and playing with things a bit more lately, so I have decided to move as much as possible to the Local machines again.
Local setup and plans
You have to start somewhere, so I have set up one spare Intel NUC I had laying around as a host for hosting some of these services (and perhaps a few new ones). Machine is nothing special, I believe it is an 8th gen Intel i5 with 16GB of DDR4 RAM (SODIMM) and an 128GB M.2 SSD with 2.5" SATA slot currently being unpopulated.
As the number and criticality of the services hosted locally grows, I plan on adding few more NUCs and most likely tying them up in a K8s cluster. Until then, “low hanging fruit” types of services, and those that I can easily rebuild or restore have the priority in migration to the local setup.
This Intel NUC has its place in a separate network configured on my Mikrotik router. Firewalled in a way that I can get from my local network to it. There’s also a configuration which allows it to communicate with the IoT network (so it can connect to misc “smart devices” I have at home). At some point in the future I’ll describe this setup more closely.
At this moment though, instead of the fancy K8s based setup, I have decided to go with a simple Debian installation on the host and running all of my services in containers. Except of the HAProxy which I am using for routing to the particular service, TLS termination, etc. HAProxy is running on the host directly, installed from the default Debian repository.
Since this is purely for pleasure I have also decided to not think about this project as a task with some due date (eg. you have to migrate service a, b, and c by date x), instead, I am playing around and enjoying myself as I have time. Trying out new things, configuring them and simply do whatever I want to do at that moment. It is really nice I have to say.
For now I have moved or provisioned following services:
- Home Assistant
As the time goes, I’ll start documenting each service and publishing my progress here on the blog, so stay tuned for that.