Free weekly email: the week's new posts, videos and one tip from the books, every Sunday. Get it free →
Homelab the Right Way

Home › Posts

Nextcloud or Syncthing? An honest comparison for homelabs

Decide whether to deploy Nextcloud All-in-One for full suite replacement or use lightweight Syncthing for simple folder sync, avoiding maintenance traps.

· 4 min read · nextcloudsyncthingself-hostingdockerhomelabfile-sync

Nextcloud or Syncthing? An honest comparison for homelabs

Most people size their homelab storage solution for the feature set they admire rather than the workflow they actually use. A fresh Nextcloud installation looks impressive with its calendar, contacts, and document editing suite, so it is easy to assume that full-featured cloud software is the default choice for any file sync task. That assumption is the trap.

If your primary goal is simply keeping a folder identical across your laptop and phone, Nextcloud is a lot of machinery for that job. The honest comparison reveals that while Nextcloud excels as a Google Drive replacement with sharing and collaboration features, Syncthing does the basic sync job better with almost nothing to maintain. Choosing the wrong tool means either over-engineering a simple task or under-serving a complex need.

The trap: the hand-built Nextcloud

The classic way to install Nextcloud involves setting up a web server, PHP, a database, Redis, cron jobs, and a dozen tuning settings by hand. Many tutorials still show this method, but each piece is easy while together they form a full-time hobby. Six months later, a PHP upgrade breaks an app, background jobs stop running weeks ago, and the admin page shows a wall of yellow warnings you have learned to ignore.

This complexity is why the book recommends Nextcloud All-in-One (AIO) if you want a Google Drive replacement. AIO is the official Docker setup maintained by the Nextcloud project, and it runs and updates the whole stack for you. If you only sync a few folders between your own machines, Syncthing does it with almost nothing to maintain. Seafile sits in between and is excellent at large file sync, but it represents a smaller ecosystem than the other two options.

The fix: Nextcloud All-in-One

AIO uses a single mastercontainer that builds and manages the rest of the stack. Since you are putting it behind a reverse proxy, use the reverse-proxy variant of the start command from the AIO documentation. You must not rename the container because AIO self-updates depend on that exact name.

docker run -d --init --sig-proxy=false \
  --name nextcloud-aio-mastercontainer \
  --restart always \
  --publish 8080:8080 \
  --env APACHE_PORT=11000 \
  --env APACHE_IP_BINDING=0.0.0.0 \
  --env APACHE_ADDITIONAL_NETWORK="" \
  --env SKIP_DOMAIN_VALIDATION=false \
  --env NEXTCLOUD_DATADIR=/srv/data/nextcloud \
  --volume nextcloud_aio_mastercontainer:/mnt/docker-aio-config \
  --volume /var/run/docker.sock:/var/run/docker.sock:ro \
  ghcr.io/nextcloud-releases/all-in-one:latest

Set NEXTCLOUD_DATADIR to put your files on the big data disk. This must be set before the first start because it cannot be changed later without a migration. Moving the data directory after installation is a documented but fiddly process, and getting it wrong is how people lose files.

After starting the container, create a proxy host in Nginx Proxy Manager for cloud.example.com pointing to 192.168.10.20 port 11000, with Websockets Support on and an SSL certificate. Open to accept the self-signed certificate warning once, then copy the passphrase AIO shows you and log in. Enter cloud.example.com` as your domain so AIO checks that the domain reaches it through your proxy. If the check fails, fix the proxy first; do not skip the validation.

Choose the optional containers you want. Collabora for online document editing and Talk are useful but heavy, so start without them and add later. Click Download and start containers and wait, as the first start takes several minutes. AIO shows the initial admin password once, so save it immediately.

The fix: Syncthing for light sync

If you decide that keeping folders identical between devices is all you need, run Syncthing on the Docker VM as one more device that is always on. This ensures your laptop and phone sync through it even when they are never online together.

docker run -d --name syncthing --restart unless-stopped \
  -p 8384:8384 -p 22000:22000/tcp -p 22000:22000/udp \
  -p 21027:21027/udp \
  -v /srv/data/syncthing:/var/syncthing \
  syncthing/syncthing:latest

Set a username and password on the web interface at port 8384 the first time you open it. Syncthing is a sync tool, not a backup; if you delete a file on one device, it disappears everywhere. Turn on File Versioning set to Staggered for each shared folder on the server copy to mitigate data loss.

Managing uploads and clients

Replacing Google Drive is half of the job; replacing Google Calendar and Contacts is the other half, and Nextcloud handles both with standard protocols like CalDAV and CardDAV. Enable the Calendar and Contacts apps from the Apps menu in the web interface. For iPhone, go to Settings, select Calendar, then Accounts, choose Add Account, select Other, and add a CalDAV Account using the server cloud.example.com, your Nextcloud username, and an app password created under Personal settings Security. Repeat this with a CardDAV account for contacts.

On Android, install DAVx5, add an account with Login with URL and user name, use the URL and provide the same kind of app password. Export your Google calendars as .ics files and contacts as .vcf` files from Google Takeout, then import them in the Nextcloud web interface. Check a few recurring events and birthdays before you delete anything at Google.

Nginx Proxy Manager limits upload size by default. On the cloud.example.com proxy host, add the following to the Advanced tab to allow larger uploads:

client_max_body_size 0;
proxy_request_buffering off;
proxy_read_timeout 86400s;

Checklist

  • Decide honestly whether you need a Drive replacement or just folder sync
  • Install Nextcloud with AIO rather than building it by hand
  • Set NEXTCLOUD_DATADIR to the data disk before the first start
  • Ensure domain validation passes through your reverse proxy
  • Save the admin password and AIO passphrase in a password manager
  • Configure the proxy to allow large uploads and long timeouts
  • For Syncthing users: set a GUI password and enable staggered file versioning

More articles