Home · Volume 4 · Chapter 10

📖 Chapter 10 — Cloud Services

The cloud as part of the system. Not instead of the NAS — alongside it.

v0.1 · draft Vol 4 · Ch 10
~14 min

Learning Objectives

Introduction

The conversation was clear: the home lab is the primary platform, but the cloud is part of the system. The cloud isn't a replacement for the NAS; it's a complement. Specific workloads belong in the cloud (cold archive, public services, GPU training). Specific workloads belong on the NAS (active projects, family data, low-latency access). The chapter is about which is which, and how to wire them together.

The hybrid model

For TK's build, the architecture is hybrid: the NAS is the source of truth, the cloud is the offsite backup, the public face, and the burst-compute extension. The split:

The pattern: local is the working copy, cloud is the safety net and the public face. Never the other way around (no "the cloud is the primary, the NAS is the cache" — the latency and the cost rule that out for family-sized use).

When to use cloud

Use the cloud for:

When NOT to use cloud

Don't use the cloud for:

The principle: the data you can lose is fine in the cloud; the data you can't lose is local-first. The cloud is a copy, not the source.

Cloudflare Tunnel (the public face)

From Volume 1, Chapter 8: Tailscale is the right way to access the NAS remotely. But for public-facing services (a project website, a public Jellyfin for a friend, a personal blog), Cloudflare Tunnel is the right answer.

The setup:

  1. Sign up at cloudflare.com. Add your domain (e.g., aidalee.com).
  2. Install cloudflared on the NAS (or on a small VPS).
  3. Authenticate: cloudflared tunnel login.
  4. Create a tunnel: cloudflared tunnel create homelab.
  5. Configure the tunnel to route traffic: cloudflared tunnel route dns homelab project.aidalee.com.
  6. Add the tunnel as a service: a config file that maps public hostnames to local services.

The pattern: a YAML config file that looks like:

tunnel: homelab
credentials-file: /root/.cloudflared/<tunnel-id>.json

ingress:
  - hostname: project.aidalee.com
    service: http://localhost:8080
  - hostname: dashboard.aidalee.com
    service: http://localhost:3001
  - service: http_status:404

Each public hostname is routed to a local service. Cloudflare handles TLS, DDoS protection, and the public DNS. The NAS doesn't need any ports open to the internet.

Cloudflare Access (authentication)

For services you want public but authenticated (a family blog with login, a private dashboard, an internal tool), Cloudflare Access adds a login wall. Free for up to 50 users.

The setup: in the Cloudflare Zero Trust dashboard, add an application, configure the access policy (which emails, which identity providers — Google, GitHub, etc.), and the service is wrapped in a login.

Use case: TK's data science dashboard, the Immich admin panel, a personal Grafana instance. The dashboard is reachable at a public URL, but you have to log in with your Google account first.

Cold archive in Backblaze B2

From Volume 6, Chapter 1: the offsite backup. For the Media/Archive (creator's cold archive), the right answer is Backblaze B2. The setup:

  1. Sign up at backblaze.com. Create a B2 bucket.
  2. Generate an application key (the credentials for rclone or the TrueNAS cloud sync task).
  3. Configure a TrueNAS Cloud Sync Task: source tank/Media/Archive, destination the B2 bucket, schedule weekly or monthly.
  4. Enable B2's "Lifecycle Rules" to move files older than 90 days to a cheaper storage class (if you don't need fast access).

Cost: $6/TB/month for hot storage, $1.50/TB/month for cold. For 5 TB of media archive, $30/month hot or $7.50/month cold. The recovery time is minutes from hot, hours from cold.

For TK's archive, hot is fine; the family might want to retrieve an old project. The $30/month is worth the fast recovery.

The "S3-compatible" pattern

Backblaze B2, Wasabi, AWS S3, MinIO (self-hosted) all speak the S3 API. The tools that work with one work with all. The pattern:

For most home labs, the S3-compatible tools are enough; you don't need to learn the cloud-specific APIs.

Burst GPU in the cloud

For AI/ML training that needs a GPU, the cloud is the right answer for occasional workloads. The pattern:

  1. Set up a training script that runs in a container.
  2. Push the container to Docker Hub (or GHCR).
  3. Sign up at Vast.ai, RunPod, or Lambda Labs.
  4. Spin up a GPU instance (RTX 4090, A100, H100) for the duration of the training.
  5. Pull the data from B2 (or from the NAS via Tailscale), run the training, push the results back.
  6. Shut down the instance.

Cost: $0.50-2/hour for a mid-range GPU, more for the high-end. For a 4-hour training run on an RTX 4090, ~$5. The cost of the same training on a $2000 GPU you'd use 10 hours a year: $200 amortized over 10 hours = $20/hour. The cloud is cheaper for occasional use.

The "what about a VPS" question

A VPS (Virtual Private Server) is a small cloud machine. The use cases for a home lab:

For most home labs, a single small VPS is enough. Oracle Cloud's free tier (4 vCPU, 24 GB RAM, forever) is a popular choice. Hetzner, DigitalOcean, Vultr are the standard providers.

Cost budgeting

For TK's hybrid setup, a realistic monthly budget:

ServiceProviderCost
Offsite backup (10 TB)Backblaze B2$60
Domain DNSCloudflare$0 (free tier)
Public services tunnelCloudflare$0 (free tier)
Cloudflare Access (50 users)Cloudflare$0 (free tier)
Tailscale coordinationTailscale$0 (free for personal)
Burst GPU (occasional)Vast.ai / RunPod$5-20/month avg
VPS (optional)Hetzner / Oracle$0-5
Total$65-85/month

For a hybrid home lab that includes offsite backup, public services, and burst GPU, $65-85/month is the realistic cost. The trade-off: cheaper than the equivalent on-premises hardware, with the cloud's flexibility.

The "lock-in" question

Cloud services have lock-in: the data, the tools, the integrations are easier to keep on the same cloud than to move. The mitigations:

The principle: use the cloud for what it's good at (offsite, public, burst); self-host for what you can. Don't outsource the things you can do at home; do outsource the things you can't.

Engineering Note

The cloud is part of the system, not the system. The NAS is the system. The cloud is the offsite, the public face, the burst. Treating the cloud as a primary is expensive and slow; treating it as a complement is cheap and powerful. The discipline: keep the primary data local; use the cloud for the things that genuinely benefit from being there. The 30 minutes a month to review the cloud usage is the price of not letting the bill grow without you noticing.

Summary

The cloud as part of the system. Hybrid architecture: local is primary, cloud is offsite and public. Cloudflare for DNS, Tunnel, and Access. Backblaze B2 for cold archive. Vast.ai or RunPod for burst GPU. A small VPS for out-of-band access. Budget $65-85/month for the realistic hybrid setup. Use S3-compatible storage and open standards to avoid lock-in. The cloud is a complement, not a replacement.

Checklist

Volume 4 is complete

The lab as a system, networking, virtualization, Docker, VMs, reverse proxies, monitoring, home automation, when to expand, cloud services. The home lab is now a complete platform. Volume 5 is the data scientist's perspective on the same infrastructure: Jupyter, data formats, pipelines, ML, sharing, remote development, reproducibility.

Ch 10 · v0.1 · drafted from the original ChatGPT conversation, July 2026