[All work](/work?type=work)

# Home Lab

What would happen if I lost the machine running my home services? I built a small server around that question, then tested a full recovery.

I designed it and keep it running.

A single 8GB Raspberry Pi reached by two paths: a Cloudflare Tunnel for public services and Tailscale for admin. A recovery restore was measured at 1 hour 45 minutes against a 2 hour target.

One 5W host, two doors

Raspberry Pi 4 · 8GB

- Public

  **Cloudflare Tunnel** Photos · files · calendar

- Admin

  **Tailscale** SSH · Postgres · SMB

- Memory

  **7.26 GB allocated** 9.25% headroom

- Restore tested

  **1h 45m** Under a 2h target

## One Raspberry Pi, real responsibilities

The lab hosted public and private services on a Raspberry Pi 4 with 8GB RAM, a 1TB external drive, consumer internet, and no available port forwarding.

## 8GB, no port forwarding, small budget

The design had to preserve operating-system headroom, remain below a small external-service budget, and recover without depending on the failed node.

## Compose, not Kubernetes

I used Docker Compose as Kubernetes would add overhead to a machine that only had 8GB of RAM. Cloudflare Tunnel and Caddy handled public traffic, Tailscale handled administration, and I set memory limits on the containers so I could see what fitted.

## I actually ran the restore

I backed it up to Backblaze B2 with rclone encryption, then ran through the restore playbook. The full test took 1 hour 45 minutes on 15 August 2025. At the time, 96GB of backup storage cost $2.82 a month.

## Outcome

A full restore completed in 1 hour 45 minutes; 96GB of backup storage cost $2.82 per month at the recorded point in time.

## From this project

- [Home Lab Architectural Study](/reports/home-lab-architectural-study)

[All work](/work?type=work)
