Raising the Server…
← Back to the Front Page The Assistant →
Vol. I · Technical Supplement Infrastructure & Networking Price: One Old Computer
Special Report

The Private
Cloud

In which a retired desktop computer is persuaded to replace Google Drive, Google Photos and a great deal of monthly expenditure — and to serve an entire household while remaining invisible to the internet.

By Abdullah Jalil · Built, Broken & Repaired by Hand

The premise was straightforward: I was renting storage for photographs I had taken myself. An old tower was sitting unused with a two-terabyte disk in it. The gap between those two facts is this project.

What it became is a household file server — separate accounts for each member, mounted as an ordinary network drive on Windows, macOS and Linux alike — alongside a photo library that backs up phones automatically, and an encrypted backup regime that has actually been tested by restoring from it rather than merely assumed to work.

“Nothing is exposed to the internet. No port is forwarded. The machine is reachable from anywhere and visible from nowhere.”

The design constraint that shaped everything was privacy without inconvenience. Services had to be reachable from a phone on mobile data, from a laptop in another country, and from a relative's Windows machine — without ever opening the house to the public internet. A private mesh network solved it, and every decision below follows from that choice.


How the Pieces Connect

Every device joins a private mesh. The server publishes nothing to the outside world.

PhoneiOS & Android
LaptopArch Linux
DesktopmacOS
Family PCWindows
Private Meshencrypted · no open ports
The house — nothing enters from outside
ServerFedora · Docker
PhotosImmich
FilesNextcloud
MusicNavidrome
BackupsBorg · rsync
2 TB Storeworking data
Backup Diskseparate spindle
Fig. I — Client devices reach the server only through the encrypted mesh. The router forwards nothing.

What Runs, and Why

ComponentPurpose & Reasoning
Fedora ServerChosen over a rolling-release distribution deliberately: a machine holding the household's only copy of anything should be boring. SELinux left enforcing, which accounted for a good share of the debugging.
DockerEvery service containerised, so a broken experiment never contaminates the host. Compose files and systemd units keep it reproducible.
ImmichReplaces Google Photos. Background upload from phones, face recognition and semantic search, all processed locally on the machine's GPU.
NextcloudReplaces Google Drive. Per-person accounts with storage quotas, exposed over WebDAV so it mounts as a native drive on every operating system in the house.
TailscaleThe keystone. A private mesh with automatic certificates means real HTTPS and remote access with no port forwarding, no dynamic DNS, and no exposure.
NavidromeMusic streaming over the Subsonic protocol, so any of a dozen mobile clients work with it.
Borg & rsyncNightly deduplicated encrypted backups of the file server; weekly mirrors of the photo library and its database to a physically separate disk.
Linux Docker Networking Fedora SELinux systemd Bash WebDAV Tailscale Backups Storage

Three Problems Worth Reporting

I. A Firewall That Wasn't

The firewall reported no open ports. The speech service, meanwhile, cheerfully announced itself on the machine's public IP address. Both were telling the truth: Docker publishes ports by writing its own packet-filtering rules, which sit beneath the firewall's zones rather than inside them.

Inspecting what was actually listening — rather than what was supposedly blocked — showed the services bound to every interface on the machine. Binding them explicitly to the mesh address closed the gap for good. The generalisable lesson: verify the state of the system, not the configuration you believe describes it.

II. The Crash Mid-Backup

The first full backup froze the machine outright. On restart the file server refused to come up, reporting endlessly that a backup was still running. It was not; the process had been killed, leaving a lock file behind that nothing was left alive to remove.

Reading the service's own log rather than guessing produced the answer — it printed the exact command to clear the stale lock. A useful reminder that mature software often anticipates its own failure modes, and that the log is the first place to look, not the last.

“A backup you have never restored from is not a backup. It is a hope with a filename.”

III. Three Hundred Gigabytes and a Space

Migrating an old archive onto the server exposed how brittle assumptions about filenames can be. Documents named in Arabic and Urdu failed to index, because the file server accepts only one Unicode normalisation form and the drive supplied another. A single command normalised them in place.

A related lesson followed shortly afterwards: an account whose username contained a space cost hours across three operating systems, because a space is legal in a display name and awkward in nearly every protocol that touches it. The account was recreated with a plain name and every symptom vanished at once.


The Second Half of the Story

Companion Supplement
Evo — The Machine That Remembers
With the server running, the graphics card sat idle. The second project put it to work: a private language model with persistent memory, a custom interface docked to the desktop, and a voice you can summon with a keystroke. Includes a working replica you can try.

What It Cost, and What It Bought

The hardware was already owned; the software is free; the running cost is electricity and occasional attention. Against that: photographs backed up automatically from every phone in the house, a family sharing documents across three operating systems, encrypted backups on a separate disk, and no monthly invoice from anyone.

The honest trade is responsibility. Google kept redundant copies of everything invisibly; that job is now mine, which is precisely why the backup regime was built before anything was deleted from the old accounts, and why it was tested by restoring rather than trusted on faith.

Every component here was chosen, installed, broken, diagnosed and repaired by hand. The account above is not a tutorial followed to completion; it is a record of decisions made and mistakes corrected — which is the only sort of experience worth reporting.