Add homelab post
This commit is contained in:
54
_posts/2025-12-15-homelab.md
Normal file
54
_posts/2025-12-15-homelab.md
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
---
|
||||||
|
title: "My introduction to a self-hosted homelab"
|
||||||
|
layout: post
|
||||||
|
date: 2025.12.15
|
||||||
|
---
|
||||||
|
|
||||||
|
This project was a result of really good timing, as well as the right tools coming together.
|
||||||
|
|
||||||
|
## Motivations
|
||||||
|
|
||||||
|
The self-hosting experiment started with [Jellyfin](https://jellyfin.com), an open source
|
||||||
|
media server for movies and TV shows. Using [Tailscale](https://tailscale.com), I connected
|
||||||
|
my Jellyfin instance into my own personal tailnet. I originally used AWS, but moved to
|
||||||
|
Hetzner after realizing additional block storage was half the price (!!!) there.
|
||||||
|
|
||||||
|
Meanwhile, I had built a tiny monitoring service for [Interchange](https://interchange.bchen.dev) to notify
|
||||||
|
me if the server went down. Putting this up on a PaaS (I used Heroku originally)
|
||||||
|
ran me the same amount as a dedicated Hetzner server which could run many
|
||||||
|
other things at once. This was not something that needed 24/7 uptime, either.
|
||||||
|
|
||||||
|
Finally, I was also using [Actual](https://actualbudget.org), a budgeting app, originally
|
||||||
|
hosted on PikaPods. At some point, I realized that putting all of these services (Jellyfin, Actual, Interchange monitoring)
|
||||||
|
on one server would be a dream come true for my wallet.
|
||||||
|
|
||||||
|
## My setup
|
||||||
|
|
||||||
|
For those unfamiliar with Tailscale, it's a private mesh VPN that uses peer-to-peer instead of
|
||||||
|
a centralized server. This means that if I connect my server to my own private network (a "tailnet"),
|
||||||
|
I can access it from my other devices via a static Tailscale-assigned IP address.
|
||||||
|
|
||||||
|
Tailscale has some handy additional features which made it suitable for my personal setup.
|
||||||
|
Using [Tailscale Serve](https://tailscale.com/kb/1242/tailscale-serve), I could take any service mapped
|
||||||
|
to a port number and make that accessible by directly typing in a hostname.
|
||||||
|
|
||||||
|
One particular quirk of Tailscale is that you can connect a Docker container as its own
|
||||||
|
individual device, and the default Tailscale device limit is generous. Therefore, I decided
|
||||||
|
to run each service *as its own Docker Compose instance*. This way, I had separate hostnames
|
||||||
|
for each service, but in reality they were all running on the same bare metal.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## Takeaways and further experimentation
|
||||||
|
|
||||||
|
In the interest of automation, I'm currently experimenting with a GitHub Actions continuous
|
||||||
|
deployment pipeline which would let me push configuration changes directly from GitHub. It uses
|
||||||
|
Tailscale and plain old SSH.
|
||||||
|
|
||||||
|
I really, really hope to self-host more of what I use in the future. I'm interested in
|
||||||
|
[Fizzy](https://www.fizzy.do), a newly-launched Kanban software that is self-hostable,
|
||||||
|
as an alternative to GitHub Issues and Jira.
|
||||||
|
[Self-hosting a Git server](https://git-scm.com/book/en/v2/Git-on-the-Server-Getting-Git-on-a-Server) for
|
||||||
|
my personal "experimental" code is something I'm also interested in.
|
||||||
|
|
||||||
|
Eventually, I plan to self-host all my personal projects.
|
||||||
BIN
assets/2025-12-15-homelab/homelab.png
Normal file
BIN
assets/2025-12-15-homelab/homelab.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 91 KiB |
Reference in New Issue
Block a user