We earn commissions when you shop through the links below. Full disclosure →
ownCloud's modern flagship, Infinite Scale (oCIS) — a cloud-native rewrite in Go that replaces the legacy PHP server Nextcloud originally forked from. Single binary, lighter to run, enterprise-focused file sync and sharing.
Pick ownCloud (Infinite Scale) when you want file sync and share as one Go binary with no PHP, no external database and no cron: oCIS is Apache-2.0, its built-in IDM holds the users (upstream says it "is mainly targeted at small Infinite Scale installations or testing"), and one container with two volumes — `/etc/ocis` for config, `/var/lib/ocis` for data — is the whole install. Upstream's floor is 512 MB of RAM for simple testing, but its recommended starting point is 4 GB. If you want the app ecosystem (calendar, contacts, office) Nextcloud is the fit; oCIS is the leaner file-only server.
What you need
Any VPS with at least 512 MB of RAM
A domain you control — most self-hosted setups need HTTPS in front of them
About an afternoon — budget time for troubleshooting
Paid link — we earn a commission if you shop through it.
Install
Run these commands on your server:
# ownCloud Infinite Scale — official README quickstart (docker, single container)mkdir -p $HOME/ocis/ocis-config $HOME/ocis/ocis-datasudo chown -Rfv 1000:1000 $HOME/ocis/docker pull owncloud/ocis# 1. One-time init: writes /etc/ocis/ocis.yaml (keep it — its secrets are needed to read the data again after a restore)# and prints the admin password — save it.docker run --rm -it \ --mount type=bind,source=$HOME/ocis/ocis-config,target=/etc/ocis \ --mount type=bind,source=$HOME/ocis/ocis-data,target=/var/lib/ocis \ owncloud/ocis init --insecure yes# 2. Run. Upstream's quickstart runs this in the foreground (--rm -it); -d keeps it up after you log out.docker run -d \ --name ocis_runtime \ -p 9200:9200 \ --mount type=bind,source=$HOME/ocis/ocis-config,target=/etc/ocis \ --mount type=bind,source=$HOME/ocis/ocis-data,target=/var/lib/ocis \ -e OCIS_INSECURE=true \ -e PROXY_HTTP_ADDR=0.0.0.0:9200 \ -e OCIS_URL=https://SERVER_IP:9200 \ owncloud/ocis# open https://SERVER_IP:9200 (self-signed cert) — user admin, password from step 1
oCIS is one binary, but its documentation is firm about init, config persistence and upgrades:
non-negotiableUpstream's first task is ocis init: it writes ocis.yaml and creates the admin user with a generated password that is "Printed by the output of ocis init". The README quickstart runs owncloud/ocis init --insecure yes against the config mount before starting the server, and upstream's compose example runs ocis init || true; exec ocis server on every start. Set IDM_ADMIN_PASSWORD to choose the password yourself (the compose example defaults it to admin); IDM_CREATE_DEMO_USERS=true creates demo users whose passwords are public, so leave it at its default of false.
non-negotiableOur snippet mounts only /var/lib/ocis. The image declares a second volume, /etc/ocis, where ocis init writes ocis.yaml, and the README mounts both. The backup guide says some fields in ocis.yaml "MUST be copied over from the old config manually to regain data access after a restore" — LDAP bind password, system user IDs, storage mount IDs — so a container recreated without that file leaves you with data you cannot log in to. Mount /etc/ocis too.
non-negotiableOCIS_INSECURE=true makes oCIS accept its own self-signed certificate and is for evaluation; the production compose example runs INSECURE=false with PROXY_TLS: "false" behind Traefik and Let's Encrypt, because "Browser access terminates at the webserver and certificates are handled there." Whatever fronts it, OCIS_URL must be the exact scheme://host[:port] users type — the docs say you "must start Infinite Scale using the environment variable OCIS_URL" when it is reached by anything other than localhost.
non-negotiableUntagged owncloud/ocis is latest, which Docker Hub maps to the newest stable (8.2.0 as of September 2026); immutable <version>-YYYYMMDD tags exist, and owncloud/ocis-rolling is unreleased code "not for production". The upgrade guide says "ALL upgrade steps from each release must be taken in order and none can be skipped", upgrades are forward-only, back up first, and run ocis init --diff after upgrading to see mandatory config changes. 8.2.0 changed OIDC group sync — set PROXY_AUTOPROVISION_CLAIM_GROUPS=groups if you relied on the old default.
non-negotiableBackups require the instance to be "fully shut down" and must include ocis.yaml, the whole data directory (idm, idp, nats, storage, search, thumbnails) and any external IDP or S3 store; without the IDM database "Infinite Scale will have no users, therefore also all data is lost." The 512 MB floor is upstream's figure for "simple testing purposes" (prerequisites page); for anything more it recommends 4 GB, and the Ubuntu production guide says "at minimum 4-6GB of memory".