Just a few days ago, somebody reached out to me and asked: Daniel, how do you do your home server? Since this question is not really easy to answer, I will provide a series of articles, that will enable you to set up your own home server.
A home and lab server can be useful for all kinds of stuff and enable you to self-host, experiment, learn and much more.
The series will explain what we will do and how we are doing it. We will start with the basics and end up with a usable home & lab environment. The below list will be updated and linked, so you can follow along.
- Intro & Concept
- Hardware & OS
- Time, DHCP, DNS Server
- Git Server
- File, Calendar, Contact Sync
- Application Dashboard
- Kubernetes testing ground
Afterwards, you will be able to deploy more services that might be helpful for you. You can also adapt some other articles, that I will publish in parallel and afterwards or that are already published.
It's just a lab and home server environment, that can be used however you want. ;)
You may wonder why I have chosen Fedora Server as the base. The reasoning behind this is quite opinionated, but let me explain.
Fedora provides a stable enough base for personal use, but also provides tons of useful features. Cockpit and Performance Co-Pilot work out of the box and provide a nice management option. With firewalld and SELinux you will also get some delightful security tools. Furthermore, you will have full support for Containers (Podman) and virtual machines (KVM).
This is a wonderful base for a home server, like I desire it. Furthermore, we can add auto-updates, including reboots and even have some kind of "desired state configuration" with Ansible.
On top of this, we will have very recent software and in-place upgrades available.
You might ask: "What are we building now?" or "How can I image the final setup?" I am glad you asked. Let's dig onto this. There are some things, I really want to get out of the way and that should be addressed before choosing hardware or discussing the services on the home server.
The goal is: To get you started with some examples that help to understand the basics and enable you to build on top. You will end up with a fully working home server, that may lead you to new problems and ideas of how to use it.
Many topics will not be addressed, but may or may not be discussed in other articles. At least, the below list will not be included in this series:
- security and hardening
- backup, raid or snapshots
- access from internet
- each and every tool that may also "do the job"
- many other little details
You can see, this is quite a lot. And most of the topics cannot be addressed in a "standard way", since you have to configure other machines, routers and take care of many things. Nevertheless, I encourage you to come up with your own learnings and solutions to push the barebone machine we are building to the next level.
A first picture
It's always nice to read about features and goals, but having a first look at the architecture is may way to get a good understanding, first. So, here is a first scribble of the "thing", I want to build with you.
And here is the first idea of the Web UI.
Sooo, what will you get after going through this series? Let's check some core features, possibilities and services.
The base setup will be quite minimal, but provide features we will need to deploy services on top.
- Graphical web interface via Cockpit (yes, for containers and VMs, too)
- metric gathering via Performance Co-Pilot
- basic security (SELinux, firewalld, usbguard)
- virtualization via KVM (with different networking options)
- containers via Podman (including auto updates)
- configuration via Ansible (of course ^^)
On top of the above, we will deploy some useful services in containers. Of course, we will automate the deployments.
- Git server, based on Gitea
- Time, DHCP and DNS server capabilities based on Pi-hole
- File, Calendar and Contact Sync via Nextcloud
- minimal application dashboard
- a Kubernetes instance to get started with Kubernetes based on k3s
After the setup, we will have some impressive tools, that allow us to get things done. Below, I will list a couple of them.
- Automated container provisioning
- Automated VM provisioning
- Automated configuration of the home server
- Capabilities to set up 100s of services
- Automated Kubernetes setup
A little home lab / home server can be used for all kind of things. Having a well-designed web interface and the option to run automatically updating containers is also a huge benefit for me, since I don't need to take care of maintenance very often, but can focus on my work.
Which kind of workload do you have on your home server, or do you intend to have?