• server
  • admin
  • homelab
  • docker
  • terraform

My Homelab


For many years, I’ve been transitioning my digital life onto servers (mostly) under my control. I manage two servers: a Droplet on Digital Ocean and another hosted in my basement.

When I began my self-hosting journey, my home internet was cable with slow upload speeds. This led me to set up a Droplet on Digital Ocean. I used the old standard of a single Nginx/Apache server with various virtual hosts. Keeping things updated and configuration managed was a pain.

I discovered Terraform at work and really fell for infrastructure as code. I did some digging and discovered that you could manage Docker with Terraform. I messed around with things a bit and then spent a weekend moving all my services into separate containers, all managed by Terraform. Adding a new one, updating a current service, or removing a service is all done in configuration files that I can keep locally. I really like this setup for several reasons.

  • Better Service Isolation: Each service runs in its own container, allowing for precise resource allocation.
  • Easier Updates: Updates are streamlined; I just change the image tag in Terraform and apply the update. Rollbacks are nearly as simple.
  • Version Control for System Decisions: Enables tracking changes and decision history.
  • Centralized Configuration Files: I keep each service’s configuration in a single zfs dataset, backing this up is trivial.
  • Auto Provisioning of Certificates: Utilizes the nginx LetsEncrypt proxy companion for hassle-free certificate management.

The installation of Fiber internet a year ago allowed me to migrate a bunch of services to my in-home server. I simply updated the Route53 Terraform entry, transferred the data, and replicated the Terraform configurations from Digital Ocean. Running identical Docker images meant most things worked seamlessly.

Here’s a rundown of most of the services I currently run on each server:

In-Home Server

  1. Frigate - A ML enhanced NVR. This collects the video streams from multiple cameras and does object and motion detection.
  2. Home Assistant - Home automation software.
  3. Kimai - Time tracking software.
  4. Nextcloud - Data hub, primarily used as a Dropbox alternative.
  5. Node Red - Programming tool for IoT devices.
  6. A Personal API - A little go service I randomly add to.
  7. Photoprism - A ML photo collection service. Slowly replacing Google Photos with this.
  8. PiHole - DNS with ad and malicious site blocking.
  9. Plex - TV, Movie, and Music library.
  10. Christmas Community - A little wishlist site that I set up for my family.
  11. Linkding - A link collection service.
  12. Syncthing - Makes syncing data easy. I use this on my desktop, laptop, and phone as well.
  13. Stirling PDF - A collection of PDF tools. Self-hosted so I can use it on things with PII.

Digital Ocean

  1. Gitea - Self-hosted GitHub alternative.
  2. Grafana - Metrics and Dashboards. Not using this much lately.
  3. Monica CRM - A personal CRM. The goal is to keep track of personal relationships. I am still not good at using this.
  4. Nextcloud - This was my original location, slowly migrating to my home server.
  5. One-Time Secret - Secret Sharing. Self-hosting this mostly for fun. I mostly trust the official version.
  6. Syncthing

How to reply to this post