Self-Hosting · Families · Accessible Design

Digital Sovereignty for Families

How to build a private family cloud that your partner, kids, and parents can use — without learning what a Docker container is.

⏱ 30 min📊 Intermediate admin / Beginner users📅 May 4, 2026

The problem this guide solves

You've set up Nextcloud, Immich, or a home server. It works for you. But your partner still sends photos through WhatsApp "because it's easier." Your parents still use Gmail. Your kids' photos are scattered across five platforms. You want the family on your private infrastructure, but you can't ask them to open a terminal. This guide is about making self-hosted services as easy to use as the apps they replace — for everyone in your household, regardless of technical comfort.

Who this guide is for

There are two roles in a family cloud, and they're different people:

🛠

The Administrator

That's you. You set up the server, install the services, configure backups, and fix things when they break. You're comfortable with a terminal but you don't want to be on-call 24/7 for "the photos app isn't working." Your job is to make the infrastructure disappear behind apps that just work.

👨‍👩‍👧‍👦

The Users

Your family members. They don't know (or need to know) that their photos live on a Pi in the closet. They open an app, take a picture, and it's backed up — same as Google Photos. Their calendar syncs to their phone. The files they need are in a folder on their desktop. If they need to ask "how does this work," the design has already failed.

The Architecture: Three Layers of a Family Cloud

A successful family cloud separates who uses what from what runs where from how it stays running. Here's the stack I recommend:

👤

Layer 3 — The User Experience

Native mobile apps, desktop sync clients, shared album links, automatic camera upload. No web UIs for daily use. No URLs to bookmark. Apps only.

📦

Layer 2 — The Services

Immich (photos), Nextcloud (files + calendar + contacts), Jellyfin (media), Vaultwarden (passwords), Tailscale (access). Each serves one clear purpose with a dedicated mobile app.

⚙️

Layer 1 — The Infrastructure

Raspberry Pi 5 (8GB) + 1TB SSD, Docker Compose for service management, Tailscale for remote access, cron for automated backups, Uptime Kuma for monitoring. This layer exists for you alone.

The key insight: Layers 1 and 2 are your responsibility. Layer 3 is the only layer your family ever touches. Design Layer 3 well, and they'll never need to know Layers 1 and 2 exist.

The One-App-Per-Service Rule

Every service you run must have a native mobile app (iOS and Android) that the user installs once and never configures again. If a service requires logging into a web browser on a phone, it fails the family test. The bar is "my 65-year-old mother can use this without calling me."

Service 1: Photos — Immich

Photos are the emotional core of a family cloud. They're what your relatives care about most, and they're the service where failure is least acceptable. Immich is the right choice because its mobile app is genuinely good — it feels like Google Photos, not like a self-hosted project.

Setup for the Administrator

Immich — Docker Compose (admin only)
# 1. Create directories
mkdir -p /mnt/ssd/immich/{library,upload,thumbs,encoded-video}

# 2. Download docker-compose.yml and .env from immich.app
wget https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
wget -O .env https://github.com/immich-app/immich/releases/latest/download/example.env

# 3. Edit .env — set UPLOAD_LOCATION=/mnt/ssd/immich/library
# 4. Start Immich
docker compose up -d
Immich running on http://your-pi:2283

Setup for the User (5 minutes per person)

  1. Install the Immich app from the App Store or Google Play.
  2. Enter the server URL — this is the only "technical" step and you should do it for them. It's their Tailscale IP + port: http://100.X.Y.Z:2283. Type it once, it's saved forever.
  3. Log in with the account you created for them (do this in the Immich admin panel first).
  4. Tap "Backup" and toggle it on. Set to Wi-Fi only.

That's it. From this point forward, every photo they take on their phone automatically appears in their Immich library. They can browse by date, person, or location. They can create shared albums. They can search "dog at the park" and Immich's ML will find it. They never see the server URL again.

Set upload to Wi-Fi only

This prevents Immich from consuming mobile data. For family members who take a lot of photos, encourage them to open the app at home occasionally — it'll catch up on any pending uploads. iOS users: iOS may pause background uploads after a while. Opening the app once a day keeps the backup current.

Service 2: Files — Nextcloud

Nextcloud serves triple duty in the family cloud: files, calendar, and contacts. It's the Swiss Army knife of self-hosting. For family users, the desktop sync client is what matters most — they save a file to their Nextcloud folder and it appears everywhere, exactly like Dropbox or Google Drive.

Setup for the User

  1. Install Nextcloud desktop client on their laptop/desktop from nextcloud.com/install.
  2. Enter the server addresshttp://100.X.Y.Z (their Tailscale IP for your Pi). Do this for them.
  3. Log in with the account you created.
  4. Choose what to sync. By default, everything syncs. Most family users can leave this alone.

The Nextcloud folder now appears in their file manager — Finder on Mac, File Explorer on Windows, Files on Linux. They save files there. They appear on every device. They never think about it again.

Bonus: Calendar & Contacts Sync

This is the part where you do 10 minutes of setup and your family gets iPhone/Android calendar and contacts sync for free. Nextcloud exposes CalDAV and CardDAV endpoints:

DeviceHow to Connect
iPhone / iPadSettings → Calendar → Accounts → Add Account → Other → Add CalDAV Account. Server: your-pi-tailscale-ip, username/password. Repeat for CardDAV (contacts).
AndroidInstall DAVx⁵ (from F-Droid or Play Store). Add account: URL is http://your-pi/remote.php/dav/. It auto-detects calendars and contacts.
Desktop (Thunderbird)Install TbSync provider for CalDAV/CardDAV. Add account with your Nextcloud URL and credentials.

Service 3: Passwords — Vaultwarden

This is the service your family doesn't know they need. A shared family password vault means you never get a text at 9pm asking "what's the Netflix password?" It also means your parents stop reusing Fluffy1952! on every website they've ever created an account on.

Vaultwarden is a lightweight, compatible Bitwarden server. It runs in a single Docker container, uses minimal resources, and works with the official Bitwarden apps on every platform. Your family installs the Bitwarden app (or browser extension), logs in once, and their passwords sync everywhere.

Vaultwarden — Docker setup
# Add to your docker-compose.yml or run directly:
docker run -d --name vaultwarden \
-v /mnt/ssd/vaultwarden:/data \
-p 8088:80 \
vaultwarden/server:latest

# Create a shared "Family" organization in the Bitwarden web UI.
# Add family members. Put shared logins in the Family collection.
Vaultwarden running on http://100.X.Y.Z:8088

The "Shared Collection" trick

Vaultwarden/Bitwarden supports Organizations. Create one called "Family." Add shared credentials there (Netflix, utility accounts, the Wi-Fi password). Each family member gets their own private vault too, but shared items live in the organization. When you change the Netflix password, everyone gets it automatically.

The Access Layer: How Everyone Reaches the Server

This is where most family-cloud projects fail. The server works on the home network, but nobody can reach it from outside. The admin sets up port forwarding, gets a dynamic DNS hostname, and suddenly the server is visible to every scanner on the internet. Or worse — the admin doesn't set up remote access at all, and the family cloud only works at home, which means it doesn't work.

The solution is Tailscale. Every family member installs the Tailscale app on their phone once. They don't configure anything. They don't open the app. Tailscale runs silently in the background, keeping their device connected to your private mesh. When they're on cellular data 500 miles from home, Immich still backs up their photos — through an encrypted tunnel that's invisible to the public internet.

Why not a public domain with HTTPS?

You can absolutely set up a reverse proxy (Nginx Proxy Manager, Caddy, Traefik) with Let's Encrypt certificates and expose your services on a public domain. It's more convenient — family members just type photos.smithfamily.net. But it also means anyone on the internet can reach your login page. If there's a zero-day in Nextcloud's auth system, your server is exploitable. Tailscale's approach — the server doesn't exist on the public internet — is more secure by default. The convenience trade-off is real, but for a family cloud holding irreplaceable photos and documents, I default to security.

Onboarding: How to Actually Get Your Family On Board

Technical setup is the easy part. The hard part is human: getting people to change their habits. Here's what works, based on deploying family clouds for multiple households:

1. Never say "self-hosted," "server," "Docker," "Linux," or "open source."

Those words make non-technical people nervous. Instead, say: "I set up a private family photo library so our pictures don't live on Google's servers." Frame it in terms of the benefit they understand: privacy, permanence, "our photos stay in the family."

2. Set it all up before you mention it.

Don't talk about the project while you're building it. When Layer 3 is ready — apps installed, accounts created, backup working — hand them their phone with Immich already logged in and say: "I switched our photo backup to this app. It works the same way. Tap here to see your photos." The first experience should be seeing their own photos in a polished app, not hearing about server configuration.

3. Migrate one service at a time, weeks apart.

Don't announce "we're leaving Google." Start with photos (Immich) because it's the most visually impressive. Two weeks later, add Nextcloud for file sync ("I set up a shared folder for our documents"). Two weeks after that, calendar and contacts. By the time you mention the password manager, they trust the system because it's been working for a month.

4. Make the old way slightly inconvenient.

The gentlest migration strategy: keep the cloud version working but stop actively maintaining it. When someone asks "why did Google Photos stop backing up?" — "Oh, we switched to the family library, remember? It's the blue app. Your stuff's all there." They'll open Immich, see their photos, and not ask again.

5. Accept that some family members won't fully migrate.

Your teenager will keep using Snapchat and Instagram. Your spouse might keep Gmail for work. That's fine. Digital sovereignty isn't all-or-nothing. Every photo stored on Immich instead of Google Photos is a win. Every shared password in Vaultwarden instead of a sticky note on the monitor is a win. Partial migration is still migration.

Maintenance: Keeping It Running Without Becoming Tech Support

The biggest fear for a family-cloud administrator is becoming 24/7 tech support. "The photos aren't syncing," "I can't log in," "Where did that file go?" — at 10pm on a Saturday. Here's how to minimize that:

Automated health checks

Install Uptime Kuma (another Docker container) to monitor your services. It pings each service every 60 seconds and sends you a notification (Telegram, email, Discord, whatever) if something goes down. You know about problems before your family does.

Uptime Kuma — monitoring
docker run -d --name uptime-kuma \
-p 3001:3001 \
-v /mnt/ssd/uptime-kuma:/app/data \
louislam/uptime-kuma:1

# Open http://your-pi:3001, set up monitors for:
# - Immich (port 2283)
# - Nextcloud (port 80)
# - Vaultwarden (port 8088)
# - Pi itself (ping check)

Scheduled restarts

Set a cron job to restart all Docker containers at 4am weekly. This prevents the memory leaks and gradual degradation that plague long-running services. Your family is asleep. Nobody notices.

crontab — weekly restart
# crontab -e (as root or a user in the docker group)
0 4 * * 0 cd /opt/family-cloud && docker compose restart
# Every Sunday at 4am, restart the whole stack.
# Services are down for ~30 seconds. Nobody awake at 4am Sunday.

User-Proofing: Don't give them the keys

Your family members don't get SSH access. They don't get admin accounts on Immich or Nextcloud. They get regular user accounts. They can upload photos, view photos, share albums — but they can't delete libraries or change server settings. This isn't about trust. It's about eliminating accident vectors. The most dangerous person on any server is a well-meaning user who clicked the wrong button.

What happens when you're on vacation and something breaks

This is the scenario that scares people away from self-hosting. The answer: Tailscale gives you SSH access to your Pi from anywhere with internet. If Immich goes down while you're at the beach, you SSH in from your phone (yes, there are SSH apps for iOS and Android), run docker compose restart, and you're done in 90 seconds. The family never knew it was down. This has happened to me exactly twice in three years.

The Family Cloud Stack: Complete Reference

Here's the full recommended stack for a family of four, all running on a single Raspberry Pi 5 (8GB) with a 1TB external SSD:

ServiceSoftwareReplacesMobile AppResource Use
PhotosImmichGoogle Photos, iCloud PhotosImmich (iOS/Android)~1.5GB RAM
Files, Calendar, ContactsNextcloudGoogle Drive, iCloud Drive, Google Calendar, Google ContactsNextcloud (iOS/Android)~800MB RAM
PasswordsVaultwarden1Password, LastPass, Bitwarden CloudBitwarden (iOS/Android)~150MB RAM
MediaJellyfinNetflix (for owned media), PlexJellyfin (iOS/Android), Swiftfin (iOS)~500MB RAM (idle)
Remote AccessTailscaleVPN services, port forwardingTailscale (iOS/Android)Negligible
MonitoringUptime Kuma— (new capability)Web only (admin use)~200MB RAM
Total RAM usage~3.2GB of 8GB

The Pi 5's 8GB of RAM leaves plenty of headroom for these six services. You can add more (Home Assistant, Paperless-ngx, Mealie for recipes) without pushing the limits.

FAQ: The Questions Your Family Will Actually Ask

"What happens to our photos if you get hit by a bus?"

The bus-factor problem is real. Solutions: (1) Document the setup in a plain-text file on the Pi itself — /home/pi/README-server.txt — with service names, ports, and how to restart Docker. (2) Give SSH access to one technically-minded friend or relative who doesn't live with you. (3) If all else fails, your nightly backups (see the Exit Strategy guide) contain the actual files. Any competent technician can extract photos and documents from a backup drive even if they've never heard of Immich.

"Can I still share a photo album with someone who doesn't use our server?"

Yes. Immich supports public-sharing links — you generate a link, send it to anyone, and they see a beautiful album in their browser. They don't need an account, an app, or Tailscale. The link just works. This is the feature that converts skeptical relatives: they receive a link, click it, and see a polished photo gallery. "Wait, you built this?"

"Is this actually safe? What if someone hacks us?"

With Tailscale, your services aren't visible to the public internet. An attacker can't hack what they can't reach. The more realistic threat is a hardware failure (SD card corruption, SSD death) — which is why automated backups are non-optional. See Practical Cybersecurity for Self-Hosters for the full security baseline.

"Google has teams of engineers keeping Photos running. You're one person with a Pi in a closet. Why should I trust this more?"

You shouldn't trust it more in terms of uptime. Google's infrastructure is objectively more reliable than a single Pi. The trust difference is about intent. Google's business model requires collecting data about you. Your family cloud's only purpose is serving your family. When reliability matters most (your wedding photos, your kid's first steps), having those files on hardware you physically control is worth the small risk of occasional downtime.

Related Guides

The 30-Day Google & Apple Exit Strategy — Step-by-step migration plan for the four core services.

The True Cost of Free — Cloud subscriptions vs. self-hosted hardware: the actual numbers.

Practical Cybersecurity for Self-Hosters — Defense in depth for the infrastructure running your family's data.