<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/rebuilding-my-homelab-with-compose-ruby-ipv6-and-no-kubernetes-tu8vhdqzn" -->

---
title: Rebuilding My Homelab with Compose, Ruby, IPv6, and No...
description: A homelab operator shares how they rebuilt their self-hosted infrastructure after abandoning Kubernetes and dealing with unreliable hardware. The new setup...
canonical: https://daily.dev/posts/rebuilding-my-homelab-with-compose-ruby-ipv6-and-no-kubernetes-tu8vhdqzn
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Rebuilding My Homelab with Compose, Ruby, IPv6, and No Kubernetes | daily.dev
og:description: A homelab operator shares how they rebuilt their self-hosted infrastructure after abandoning Kubernetes and dealing with unreliable hardware. The new setup...
og:url: https://daily.dev/posts/rebuilding-my-homelab-with-compose-ruby-ipv6-and-no-kubernetes-tu8vhdqzn
og:image: https://api.daily.dev/og/posts/tU8VHdqzn.png
og:image:alt: Rebuilding My Homelab with Compose, Ruby, IPv6, and No Kubernetes
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Rebuilding My Homelab with Compose, Ruby, IPv6, and No Kubernetes

**[Hacker News](https://daily.dev/sources/hn)** · 9 min read · 1 upvotes · 0 comments

## Summary

A homelab operator shares how they rebuilt their self-hosted infrastructure after abandoning Kubernetes and dealing with unreliable hardware. The new setup uses Docker Compose as the core deployment mechanism, enhanced with custom Ruby libraries and a Rakefile to handle secrets, ingress via Caddy, backups, monitoring, and cross-stack dependencies. A key architectural decision is using deterministic IPv6 ULA addressing to isolate container stacks without shared bridge networks, preserving security boundaries between services. The fleet spans a Proxmox host for critical services, a rebuilt 'nibbler' machine for everything else, a TrueNAS box for storage, and a Chicago datacenter VM for public ingress via Tailscale backhaul. The author concludes that full control over a simpler system beats the operational complexity of Kubernetes for a homelab context.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://www.petekeen.net/homelab-resolved>

## Questions this post answers

### How can I assign a deterministic IPv6 address to every Docker container in a homelab without a shared bridge network?

Derive the address deterministically by hashing identifiers into each segment of a /48 IPv6 ULA prefix: the host gets a /64 by hashing hostname plus salt for 16 bits, the compose stack gets a /96 by hashing the stack name plus salt for 32 bits, and each container gets a /128 by hashing the container name plus salt for the final 32 bits. Caddy then runs with network_mode host and points upstreams directly at these addresses.

_See how other self-hosters solve container networking and ingress isolation through daily.dev._

### Why might running Kubernetes be too complicated for a small homelab setup?

Kubernetes requires ongoing operational knowledge to fix problems like etcd or Raft consensus issues, and when the most powerful machine in a small cluster becomes unreliable, debugging a distributed system under those conditions becomes unmanageable. Reverting to plain docker compose removed that runtime complexity entirely, since everything becomes statically determined at deploy time with linters and tests instead of live cluster state.

_Compare homelab orchestration tradeoffs like this one on daily.dev before committing to kubernetes._

## Similar posts on daily.dev

- [Every home lab I build now starts with the same 4 Docker containers](https://daily.dev/posts/every-home-lab-i-build-now-starts-with-the-same-4-docker-containers-6az1qda9d) · XDA Developers · 0 upvotes · 0 comments
- [Tailscale’d Into Homelabbing](https://daily.dev/posts/tailscale-d-into-homelabbing-vyztndhi7) · Lobsters · 6 upvotes · 0 comments
- [How I Built My Own Home-Lab: A Single-Node Kubernetes Platform](https://daily.dev/posts/how-i-built-my-own-home-lab-a-single-node-kubernetes-platform-rdjpb0cgw) · Medium · 3 upvotes · 0 comments

---

Tags: [#kubernetes](https://daily.dev/tags/kubernetes), [#ruby](https://daily.dev/tags/ruby), [#homelab](https://daily.dev/tags/homelab), [#docker-compose](https://daily.dev/tags/docker-compose)

[View this post on daily.dev](https://daily.dev/posts/rebuilding-my-homelab-with-compose-ruby-ipv6-and-no-kubernetes-tu8vhdqzn)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Rebuilding My Homelab with Compose, Ruby, IPv6, and No Kubernetes","url":"https://daily.dev/posts/rebuilding-my-homelab-with-compose-ruby-ipv6-and-no-kubernetes-tu8vhdqzn","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/rebuilding-my-homelab-with-compose-ruby-ipv6-and-no-kubernetes-tu8vhdqzn"},"datePublished":"2026-07-16T07:55:52.570Z","dateModified":"2026-09-13T18:27:02.347Z","description":"A homelab operator shares how they rebuilt their self-hosted infrastructure after abandoning Kubernetes and dealing with unreliable hardware. The new setup...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/a770ae091c07bed579c6de22952b89d9?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/a770ae091c07bed579c6de22952b89d9?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Hacker News","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Hacker News","logo":"https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/hn","url":"https://daily.dev/sources/hn"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/rebuilding-my-homelab-with-compose-ruby-ipv6-and-no-kubernetes-tu8vhdqzn","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":1},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"kubernetes,ruby,homelab,docker-compose","timeRequired":"PT9M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Hacker News","item":"https://daily.dev/sources/hn"},{"@type":"ListItem","position":3,"name":"Rebuilding My Homelab with Compose, Ruby, IPv6, and No Kubernetes"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/rebuilding-my-homelab-with-compose-ruby-ipv6-and-no-kubernetes-tu8vhdqzn#faq","mainEntity":[{"@type":"Question","name":"How can I assign a deterministic IPv6 address to every Docker container in a homelab without a shared bridge network?","acceptedAnswer":{"@type":"Answer","text":"Derive the address deterministically by hashing identifiers into each segment of a /48 IPv6 ULA prefix: the host gets a /64 by hashing hostname plus salt for 16 bits, the compose stack gets a /96 by hashing the stack name plus salt for 32 bits, and each container gets a /128 by hashing the container name plus salt for the final 32 bits. Caddy then runs with network_mode host and points upstreams directly at these addresses. See how other self-hosters solve container networking and ingress isolation through daily.dev."}},{"@type":"Question","name":"Why might running Kubernetes be too complicated for a small homelab setup?","acceptedAnswer":{"@type":"Answer","text":"Kubernetes requires ongoing operational knowledge to fix problems like etcd or Raft consensus issues, and when the most powerful machine in a small cluster becomes unreliable, debugging a distributed system under those conditions becomes unmanageable. Reverting to plain docker compose removed that runtime complexity entirely, since everything becomes statically determined at deploy time with linters and tests instead of live cluster state. Compare homelab orchestration tradeoffs like this one on daily.dev before committing to kubernetes."}}]}
```

