I’ve been running nextcloud for my family and some projects about two years now and while it’s allright when it’s not breaking, I’ve had it break twice during upgrades and once outside of an upgrade. Getting back to running again during upgrades may require that I have two instances running one after the other - which is just too much to deal with for me, I’m anxious everytime a new update arrives, even though my system does backups and updates mostly automatic (yunohost).
(I run Nixos/Guix on my own laptop and get shivers anytime I have to deal with around in debian/android/anything-unlike-nixos-or-guix. And, yes, last I checked even Nixos struggles with nextcloud - which speaks volumes about it. I run yunohost on the server because it did DNS automagically)
So my question is, what could I change to that has:
- high reproducibility/easy maintenance/easy upgrades.
- file sync
- file sharing between users
- some kind of direct link file sharing
Nice to have:
- collaboration of some sort
- caldav (calendar and tasks)
- carddav (contacts)
Grateful for any and all inputs here. :)


As recommended from others here the docker version with a compose file works great.
I had similar problems with nextcloud upgrades until I switched the channel from latest to stable. Stable is still version 31, but I haven’t found a user comfortable alternative which I can give my family without hearing their pain. For me *Dav is the best decision and Syncthing for files that should be offline available like keepass or something.
And if you are actually on latest/32 maybe it is an option to switch to a tagged 32 version until it becomes stable.
From my view a major update shouldn’t been done automatically.
I’ve avoided docker for a long time. So when you set this up how do you configure? Can I do it declaratively (text file) or do I have to click around in the app?
And thank you for input. ٩(◕‿◕。)۶
Same as now, you only have to write in docker compose that this local file, next to docker compose should be mounted to that location inside container
Yes you can use docker-compose which spines up all your necessary container connects them with an internal network and most of your stuff has been setup.
Then you but all your configurations in a git repository and you have a all your container under version control.
This is a slightly modified version of mine:
Not in this, but maybe relevant
--- networks: default: driver: bridge traefik_proxy: external: true name: traefik_proxy services: nextcloud-app: container_name: nextcloud-app depends_on: - nextcloud-db - nextcloud-redis environment: - TZ=Europe/Berlin - POSTGRES_HOST=nextcloud-db - POSTGRES_PASSWORD=nextcloud - POSTGRES_DATABASE=nextPosPw - POSTGRES_USER=nextcloud - REDIS_HOST=nextcloud-redis - REDIS_HOST_PASSWORD=nextRedPw image: nextcloud:32 labels: - container-hosts.enable=true - container-hosts=${NEXTCLOUD_URL} - traefik.enable=true - traefik.http.routers.nextcloud.entrypoints=web-secure - traefik.http.routers.nextcloud.rule=Host(`${NEXTCLOUD_URL}`) - traefik.http.routers.nextcloud.tls=true - traefik.http.routers.nextcloud.middlewares=nextcloud-chain@docker - traefik.http.middlewares.nextcloud-chain.chain.middlewares=nextcloud-redirect@docker,secHeaders@file - traefik.http.middlewares.nextcloud-redirect.redirectregex.regex=^https://(.*)/.well-known/(card|cal)dav - traefik.http.middlewares.nextcloud-redirect.redirectregex.replacement=https://$$1/remote.php/dav/ - traefik.http.services.nextcloud.loadbalancer.server.port=80 networks: - traefik_proxy - default restart: always volumes: - /opt/backup/docker/nextcloud/html/data:/var/www/html/data - ./data/config:/var/www/html/config - /opt/backup/docker/syncthing/data:/syncthing nextcloud-cron: container_name: nextcloud-cron depends_on: - nextcloud-db - nextcloud-redis entrypoint: /cron.sh environment: - TZ=Europe/Berlin image: nextcloud:32 networks: - default restart: always volumes: - /opt/backup/docker/nextcloud/html/data:/var/www/html/data - ./data/config:/var/www/html/config - /opt/backup/docker/syncthing/data:/syncthing nextcloud-db: container_name: nextcloud-db environment: - TZ=Europe/Berlin - POSTGRES_USER=nextcloud - POSTGRES_PASSWORD=nextPosPw - POSTGRES_DB=nextcloud image: postgres:17-alpine networks: - default restart: always volumes: - /opt/backup/docker/nextcloud/postgresql:/var/lib/postgresql/data nextcloud-redis: command: valkey-server --requirepass nextRedPw --save 30 1 --loglevel warning container_name: nextcloud-redis environment: - TZ=Europe/Berlin image: docker.io/valkey/valkey:8-alpine networks: - default restart: always volumes: - redis_data:/data volumes: redis_data: ...PS: I don’t want to use any fancy clicky app, because over the last years I had so often problems with updates of these clicky apps and this version is straight forward for all my containers.