Tech Digest

Photos and files

Nextcloud

File sync and share plus calendar, contacts, office and an app store, on your own server

Photos and filesAGPL-3.0-or-laterMaturearm64 buildsOIDC via plugin
Last reviewed Profile maintained against the project's own documentation
Operational load
4 / 5
Heavy
Idle memory
600 MB
typical use ~1800 MB
Moving parts
4
containers in a normal deployment
Backup shape
MySQL dump
needs a dump or a stop

Nextcloud is a PHP application that gives you file sync and sharing with desktop and mobile clients, then layers calendar, contacts, collaborative office documents, chat and several hundred community apps on top. It is the closest self-hosted equivalent to a full Google Workspace or Microsoft 365 tenant.

Our verdict on Nextcloud#

Nextcloud is the heaviest thing on this list to keep alive, and the reason is the release calendar, not the software. Majors ship every four months and each is supported for one year: 32 (Hub 25 Autumn) landed 27 September 2025, 33 on 18 February 2026, 34 (Hub 26 Spring) on 9 June 2026. You cannot skip a major. The documented rule is to reach the latest point release of your current major, then step to the next major's latest point release, one at a time. Fall two years behind and you are doing four sequential upgrades, each with its own PHP requirement: 32 wants PHP 8.1 to 8.4, 34 wants 8.2 to 8.5. Every third-party app has to be compatible at each step or it gets disabled. That is why All-in-One exists: it pins the whole stack, PHP included, and updates it as a unit. If you use anything else, occ becomes routine, not an emergency tool.

Who Nextcloud is for#

Choose it if

  • Households or small teams that genuinely need calendar, contacts and shared documents together, not just file sync
  • Anyone replacing a Microsoft 365 or Google Workspace tenant where the groupware is the point
  • Operators willing to schedule two or three upgrade windows a year and read the release notes each time
  • Deployments that need per-folder sharing, external storage mounts and group quotas

Look elsewhere if

  • You only want files synced between machines; Syncthing or Seafile will cost you a fraction of the attention
  • You cannot commit to upgrading every few months, because a version that has passed EOL gets no security fixes and you still cannot jump straight to current
  • Your host is a low-power ARM board with spinning disks; preview generation and the 5-minute cron will make it feel broken

What running it actually looks like#

Two realistic shapes. The official image plus your own Postgres or MariaDB, Redis, and a reverse proxy is four containers and you own every version decision, including PHP, which is baked into the image tag. All-in-One is a mastercontainer that pulls and orchestrates Nextcloud, Postgres, Redis, an Apache proxy and Notify Push, with optional Office, Talk, ClamAV and Imaginary; its admin interface is on 8080 (self-signed) or 8443, and it wants ports 80 and 443 plus a real domain name. AIO refuses IP-only access and expects you to use its built-in BorgBackup. Either way: set up Redis for file locking before you have users, add background jobs via system cron rather than AJAX, and run occ db:add-missing-indices after the first upgrade that nags you about it.

Resource profile#

Memory
600 MB idle, around 1800 MB in ordinary use. Docs specify 128 MB per PHP process minimum and 512 MB recommended, and at least 256 MB for the built-in updater; real footprint is php-fpm workers multiplied out, plus the database and Redis. Estimate for a small family instance.
CPU and acceleration
Idles near zero, then spikes on preview generation, full-text indexing and the cron run every 5 minutes; Collabora or OnlyOffice document editing is a separate and much larger CPU cost.
Storage growth
Your files plus a `previews/` tree that can reach a substantial fraction of the library if you enable previews for video and PDFs, plus versions and the trash, both of which retain copies until retention policy prunes them.
Operational load
4 of 5, Heavy. Three major releases a year, each supported for exactly twelve months, and you cannot skip a major: staying supported means running two or three upgrade windows a year, each gated on PHP version compatibility and on every installed app being ready. Restores need the database and the data directory taken consistently in maintenance mode.

Figures describe a small single-household install and are the working assumptions behind our stack planner. Your numbers will differ with library size, user count and hardware. See methodology.

Data and backup surface#

Three things, taken together: config/, the data directory, and the database. Enable maintenance mode first (occ maintenance:mode --on), otherwise the dump and the files disagree about which uploads exist. Dump with mariadb-dump --single-transaction --default-character-set=utf8mb4 or pg_dump. Also copy themes/ and any custom apps/; the shipped apps come back with the image. Inside the data directory, appdata_*/preview is regenerable and often the largest single tree, so excluding it is the one safe saving. Restoring means the same version of Nextcloud, the same PHP major, files and database from the same moment, then occ maintenance:mode --off.

Derived backup shape

MySQL dump. mariadb-dump / mysqldump with --single-transaction, then snapshot the dump plus the app's data volume.

Traps and surprises#

You cannot skip a major version

The upgrade manual is explicit: reach the latest point release of your current major, then upgrade to the next major's latest point release, and repeat. An instance sitting on 31 cannot jump to 34; it goes 31 to 32 to 33 to 34, each with its own migration run. With three majors a year and a twelve-month support window, letting it drift for eighteen months turns a routine update into a weekend of sequential upgrades.

PHP version is coupled to the Nextcloud version

Each major supports a specific PHP window: 32 takes 8.1 through 8.4, 33 takes 8.2 through 8.4 with 8.5 supported, 34 takes 8.2 through 8.5. On a bare-metal LAMP install this means the OS PHP package and the Nextcloud version have to be moved in a compatible order, and distro upgrades can strand you. Container tags bundle a matching PHP, which removes the problem and is the main reason people move to All-in-One.

Third-party apps block upgrades

Apps that are not marked compatible with the incoming major are disabled during upgrade, and the updater will refuse or warn depending on the path. If a workflow depends on a community app that has not been updated, you either stay on the old major (and lose security support) or lose the feature. Check every installed app against the target version before you start, not after the migration has already run.

Missing indices and repair steps after upgrades

After major upgrades the admin overview commonly reports missing database indices, columns or primary keys, and the instance gets progressively slower until you fix it. The fixes are occ db:add-missing-indices, db:add-missing-columns and db:add-missing-primary-keys, run as the web server user (sudo -E -u www-data php occ ...). Running occ as root instead will leave files owned by root and break the next upgrade.

SQLite works and then does not

SQLite is offered by the installer and the docs are clear it is only recommended for testing and minimal instances. It survives a single-user trial and then collapses under concurrent sync clients with locking errors. Migrating later is possible via occ db:convert-type but it is a maintenance-window operation on a live dataset. Choose Postgres or MariaDB at install time even if the instance is small.

Specifications#

Category
Photos, files and sync
Licence
AGPL-3.0-or-later (Copyleft)
Written in
PHP, with Vue and TypeScript frontends
First release
2016
Maturity
Mature
Datastore
MariaDB 10.11+/11.x or PostgreSQL 14 to 18, plus Redis for file locking and caching
Default ports
80, 443, 8080
Ships as
docker (official image), docker (All-in-One), snap (Nextcloud Snap), tarball on LAMP/LEMP
arm64 builds
Yes
Identity
OIDC via plugin. LDAP and SAML integration ship as bundled apps and OIDC comes via the maintained `user_oidc` app; all of it is app-store surface that has to survive every major upgrade.
Replaces
Google Drive, Dropbox, Microsoft 365 / OneDrive, Box
Project site
nextcloud.com
Source
github.com/nextcloud/server
Documentation
docs.nextcloud.com/server/latest/admin_manual

Alternatives to Nextcloud#

Everything else in photos, files and sync, closest in operational weight first.

ToolOps loadIdle RAMLicence
Immich3, Moderate900 MBAGPL-3.0
Seafile3, Moderate700 MBGPL-2.0 with an OpenSSL linking exception (server, Community Edition); Professional Edition is proprietary
PhotoPrism2, Light450 MBAGPL-3.0 (Community Edition); default images ship under the PhotoPrism Plus License
File Browser1, Set and forget20 MBApache-2.0
Syncthing1, Set and forget60 MBMPL-2.0

Where Nextcloud comes up elsewhere#

Sources#

Published . Last reviewed . Found something out of date? Tell us and we will fix it and log the change.