Welcome to my journey in building my homelab. This will be an ongoing series of blog posts of my adventures in building my personal infrastructure.
Part 1: The Adventure Begins (You are here!)
Part 2: Configuration Management
Part 3: Internal Network
What is a Homelabđ
The primary idea behind a homelab is a place to learn about infrastructure, servers and development.
/r/homelab defines a homelab as:
Homelab [hom-lĂŚb](n): a laboratory of (usually slightly outdated) awesome in the domicile
Now by this definition a homelab should reside in a home. In my case part of my homelab will exist outside of my home, due to space and noise constraints. So my homelab is somewhere between a homelab and a "cloudlab".
The /r/homelab wiki has a more information on how to get started with a homelab.
Inventoryđ
At the time of writing here is my current inventory of servers. It will most likely grow and evolve as time goes on.
- 1 NAS
- CPU: Intel i5-6600K
- RAM: 32GB
- Disk: 2x 250GB SSD, 4x 12TB HDD
- 2 Dedicated Servers
- Dedicated Server 1
- CPU: Intel
- RAM: 64GB
- Disk: 2x 512GB SSD
- Dedicated Server 2
- CPU: Intel
- RAM: 32GB
- Disk: 2x 3TB HDD
- Dedicated Server 1
Goalsđ
- Ability to host applications easily, there is a lot of good self hosted software out there.
- Keep ongoing maintenance to a minimum.
- Automatic encrypted backups, because RAID is not a backup
- Ability to easily add and remove servers.
- An internal network between servers, some of my servers exist outside of my home network.
- Alerting and Monitoring, so I know when servers go down, failing drives, backups didn't run, etc.
The Planđ
These are the tools/software I decided on to meet each of the above goals.
The crossed out tools are things that have changed or been replaced since I wrote this in 2019.
Hosting Applicationsđ
- Docker for hosting most applications and allows me to move services around.
- Ansible for managing containers and configuration.
- Traefik provides routing and certificates for services.
Portainer for managing the docker containers on specific servers.Salt for everything else that doesn't fit into a container.
Minimizing Ongoing Maintenanceđ
- Automatic security updates will reduce some of the maintenance involved in updating.
- Watchtower will keep selected containers up to date.
Automatic Backupsđ
- restic for backups, including deduplication and encryption.
- Backblaze B2 for offsite storage of backups.
Adding and Removing Serversđ
SaltAnsible allows me to have a declarative configuration for servers.- netboot.xyz simplifies installs with PXE booting.
- dnscontrol for DNS management.
Internal Networkđ
- Zerotier is for my internal network. It's not decentralized like tinc but has some trade offs that make it easier to use, you can read more about it here.
Alerting and Monitoringđ
- Netdata will be used for metrics and basic alerting.
- Uptime Kuma will be used for custom monitoring/alerting.
Icinga2 will be used for alerting.InfluxDB is a time series database used for storage of metrics.Grafana is used for making graphs and dashboards from the data stored in influxdb.
Here we go!đ
I hope you will join me in this adventure into homelabbing. In the next post in the series we will cover configuration management.
Part 1: The Adventure Begins (You are here!)
Part 2: Configuration Management
Part 3: Internal Network