- server
- admin
- homelab
- docker
- terraform
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
- Frigate - A ML enhanced NVR. This collects the video streams from multiple cameras and does object and motion detection.
- Home Assistant - Home automation software.
- Kimai - Time tracking software.
- Nextcloud - Data hub, primarily used as a Dropbox alternative.
- Node Red - Programming tool for IoT devices.
- A Personal API - A little go service I randomly add to.
- Photoprism - A ML photo collection service. Slowly replacing Google Photos with this.
- PiHole - DNS with ad and malicious site blocking.
- Plex - TV, Movie, and Music library.
- Christmas Community - A little wishlist site that I set up for my family.
- Linkding - A link collection service.
- Syncthing - Makes syncing data easy. I use this on my desktop, laptop, and phone as well.
- Stirling PDF - A collection of PDF tools. Self-hosted so I can use it on things with PII.
Digital Ocean
- Gitea - Self-hosted GitHub alternative.
- Grafana - Metrics and Dashboards. Not using this much lately.
- Monica CRM - A personal CRM. The goal is to keep track of personal relationships. I am still not good at using this.
- Nextcloud - This was my original location, slowly migrating to my home server.
- One-Time Secret - Secret Sharing. Self-hosting this mostly for fun. I mostly trust the official version.
- Syncthing