The home cloud
Two mini PCs that stay on all the time and host my family's files, photos and cameras, without relying on outside services.
Why I built it
My family uses files, photos and cameras every day, and I wanted them under my own control: synchronisation, sharing and backups decided by me. The photo archive holds more than 72,000 images. The constraint was the hardware, two small computers with four cores and little memory, so no service could stay on for nothing.
From outside, everything goes through a Cloudflare tunnel, with no ports open on the router.
What is in it
- Nextcloud for files, installed directly on the system with two-factor authentication. The configuration is versioned, with a script that hides the secrets before saving it.
- Immich as a photo gallery, with face recognition and search by words. It works on top of the photos already in Nextcloud, without moving any file.
- Frigate for three cameras, with a Telegram bot that sends alerts and answers commands.
- Automatic shutdown: idle services stop after 30 minutes (two hours for the download program) and start again on the first visit, with a waiting page that reloads by itself.
Some choices and problems
- 01
A backup that does not stay connected
Every night a script copies the data (about 260 GB) to a 6 TB external disk that stays unplugged the rest of the time: it mounts it, copies, and unmounts it even if the copy fails. It also backs up Immich's database.
- 02
Moving to Immich without moving files
The existing photos went from an external to an internal library with a single UPDATE on the database, after a safety dump. Then I had to recompute the checksums by hand, otherwise the phone app wanted to upload everything again. The integrity check turned up 6,715 identical copies (6.8 GB), which went to the trash.
- 03
Recognition on the GPU
Recognition runs on the integrated graphics chip. It needs a driver installed by hand and I reduced the number of parallel jobs: with the default values the load rose to 16 on 4 cores. Partly it was an apparent load, and I noted that in the README.
- 04
A Cloudflare limit
The free plan caps requests at 100 MB: 236 videos, the largest 11 GB, can only be uploaded from the home network or over a VPN. I wrote it in the documentation.
- 05
Camera privacy
The program that tells the two cats apart sends a crop to an AI assistant only if no family phone is at home and the frame does not look like a person. When unsure, it sends nothing. This caution is needed because presence detected over Wi-Fi can be wrong: once a false «at home» had kept the program silent for 20 days.
What I did
All of it: installation, configuration, scripts, documentation. I worked together with an AI assistant and left handover documents and a list of «things not to break», so that the work can be picked up after weeks or handed over to an agent. I measured before deciding: concurrency, thresholds, timings. One experiment, Nextcloud's recognition plugin ported to the GPU, went from 3.2 to 0.52 seconds per photo on 229 photos. I then switched it off because Immich does the same job, but it stays documented.
Limits
It is a hobbyist system: two machines, no redundancy beyond the backup on an external disk, and if one computer stops, everything stops. Some parts remain manual and outside git (system scheduled jobs, the GPU driver, credentials). Recognising the two cats is still a work in progress. My family has used it since September 2026 and I maintain it; the repositories are private, so there is no code to look at and no demo.
Stack
Linux (Ubuntu) · Docker · Nextcloud · Immich · Frigate · Caddy and Sablier · Cloudflare Tunnel · Pi-hole · Python · shell
My role
Personal project: design, installation and maintenance.