Home Server Series — Part 1: Nextcloud

I’ve been slowly building a home server, not because I want to self-host everything under the sun, but because I want my data to have a calm place to live.

This is Part 1 of what will probably be a small series. The goal here isn’t to show the “best” or most secure setup—it’s to show the first setup that actually made sense to me.

That setup turned out to be Nextcloud, run locally, on a machine in my house, without overthinking it.


The intention (before the tech)

Before touching software, I had to decide what I wanted this thing to be.

Not

  • a public cloud replacement
  • a family system (yet)
  • a perfectly hardened server

But

  • a local-first dumping ground
  • something I could understand and undo
  • a system that didn’t punish experimentation

That decision shaped everything that followed.


The machine (light context)

I’m running a small Linux box (a Minisforum mini PC) that stays on. Once it’s booted, I don’t need to stay SSH’d in. Services run whether I’m watching or not.

SSH is for administration, not operation.

That mental shift alone reduced a lot of friction.


Keeping the machine boring (important early step)

Before installing anything fun, I made sure the machine wouldn’t disappear on me.

I disabled sleep/suspend entirely and stabilized SSH so idle sessions wouldn’t drop.

# Prevent the system from sleeping
sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
# Keep SSH sessions alive during idle time
sudo sed -i 's/^#\?ClientAliveInterval.*/ClientAliveInterval 60/' /etc/ssh/sshd_config
sudo sed -i 's/^#\?ClientAliveCountMax.*/ClientAliveCountMax 10/' /etc/ssh/sshd_config
sudo systemctl restart ssh

Nothing fancy—just making the box behave like a server instead of a laptop.


Installing Nextcloud (containerized, on purpose)

I wanted Nextcloud to be:

  • easy to stop
  • easy to remove
  • isolated from the rest of the system

So I ran it in containers. In my case, that ended up being Podman + podman-compose, but the concept matters more than the tool.

The key idea:

Nextcloud is just a web app sitting on top of storage I already own.

Here’s the core of the compose file I used (simplified for readability):

services:
  db:
    image: docker.io/library/mariadb:10.11
    volumes:
      - db:/var/lib/mysql

  app:
    image: docker.io/library/nextcloud:28
    ports:
      - "8080:80"
    volumes:
      - nextcloud:/var/www/html
    depends_on:
      - db

Once running, Nextcloud was simply available at:

http://192.168.x.x ;)

Local network only. No exposure. No drama.


The mental breakthrough: selective sync

This was the moment everything clicked.

I stopped thinking of Nextcloud as “something that syncs everywhere” and started thinking of it as:

A server that holds everything, and clients that choose what they care about.

On my Mac, I enabled “Choose what to sync” in the Nextcloud desktop app and only synced folders I actively work in.

That led to a simple, human folder model.


The folder structure that stuck

At the top level, I landed on this:

Misc
Working
Archive
Photos
Media
Family

What this means in practice:

  • Misc → temporary inbox / dumping ground (synced to my Mac)
  • Working → active projects (synced)
  • Archive → finished things (server-only)
  • Photos → personal images (sync optional)
  • Media → large files, movies, future Jellyfin use
  • Family → placeholder for shared access later

If a folder isn’t synced, it simply doesn’t appear on my laptop. It still exists on the server and is accessed through the browser when needed.

No fear of accidental deletes. No laptop clutter.


Access model (surprisingly simple)

There’s no ritual when I leave and come back.

  • The Minis stays on
  • Nextcloud keeps running
  • Sync happens in the background

When I’m home and want to see everything, I just open a browser:

http://192.168.x.x

That’s it. SSH and VNC are optional tools, not requirements.


Why this feels sustainable

Right now, this setup gives me:

  • A calm dumping ground for files
  • A lean working set on my Mac
  • A clear path toward media (Jellyfin later)
  • A structured place for family access when I’m ready

Most importantly, nothing here feels irreversible.

I can:

  • change folder structure
  • move storage later
  • add users later
  • even remove Nextcloud entirely if I want

For a home server, that flexibility matters more than perfection.


Coming up next

Part 2 will likely be one of:

  • Media + Jellyfin (connecting to the Media folder)
  • Notes with Joplin (using Nextcloud as storage)
  • Adding family users without chaos

For now, the system is boring and that’s exactly what I wanted.