Home » Nextcloud » Nextcloud AIO installieren: eigene Cloud mit Docker

Nextcloud AIO installieren: eigene Cloud mit Docker

Nextcloud AIO installieren heisst: Ein einziger Container übernimmt die Arbeit, für die ihr sonst einen Abend mit Apache, PHP-Modulen, Datenbank, Redis und Zertifikaten verbringt. Diese Anleitung zeigt Schritt für Schritt, wie ihr Nextcloud All-in-One mit Docker auf einem Debian- oder Ubuntu-Server aufsetzt, welche Ports wirklich nach draussen gehören und warum das Backup eingerichtet wird, bevor das erste Foto auf dem Server liegt.

Titelbild Nextcloud AIO: Links das Nextcloud-Logo mit dem Schriftzug „Nextcloud AIO“ und dem Hinweis „Ein Mastercontainer startet den Rest“, rechts drei Karten, auf die Pfeile zeigen: nextcloud-aio-apache für HTTPS auf Port 443, nextcloud-aio-nextcloud mit PHP-FPM, APCu und Redis, und nextcloud-aio-database mit PostgreSQL.

Was Nextcloud kann und warum es eine Alternative zu Google Drive und Microsoft 365 ist, steht auf unserer Seite Was ist Nextcloud. Wer eine Synology besitzt, findet die klassische Installation über die Web Station in der Anleitung Nextcloud auf Synology DSM 7.2 installieren. Hier geht es um den anderen Weg: ein Linux-Server, ein Mini-PC im Keller oder ein gemieteter VPS, auf dem Docker läuft und Nextcloud sich weitgehend selbst verwaltet. Weitgehend, nicht vollständig — dazu gleich mehr.

Nextcloud AIO installieren: was der Mastercontainer eigentlich tut

Nextcloud All-in-One, kurz AIO, bezeichnet das Projekt selbst als „the official Nextcloud installation method“. Ihr startet genau einen Container, den sogenannten Mastercontainer. Der spricht über den Docker-Socket direkt mit dem Docker-Dienst auf eurem Server und legt alle weiteren Container selbst an. Das Projekt beschreibt das Prinzip in seiner Dokumentation auf GitHub als Anlehnung an Portainer: Ein Container steuert die übrigen, ihr bedient ihn über eine Weboberfläche.

Was dabei fest mitkommt, listet die Dokumentation auf:

  • Apache-Container für HTTPS, mit automatisch bezogenem Let's-Encrypt-Zertifikat, HTTP/2 und HTTP/3
  • Nextcloud-Container mit PHP-FPM, OPcache und APCu als lokalem Cache
  • PostgreSQL als Datenbank
  • Redis als verteilter Cache und für das Sperren von Dateien
  • Notify Push, damit Desktop- und Mobil-Clients Änderungen ohne ständiges Nachfragen mitbekommen

Optional zuschaltbar sind unter anderem Nextcloud Office, Nextcloud Talk samt TURN-Server, ein Backup-Container auf Basis von BorgBackup, Imaginary für Vorschaubilder, ClamAV als Virenscanner, eine Volltextsuche und Whiteboard. Bis 100 Benutzer ist AIO laut Projekt kostenlos, darüber verweist Nextcloud auf sein Enterprise-Angebot.

Viele Handgriffe, die wir für manuelle Installationen beschrieben haben, entfallen damit. Den Cronjob für Nextcloud, das Einrichten von APCu und Redis oder das Beantragen des Zertifikats mit Certbot erledigt AIO selbst.

Der Preis der Bequemlichkeit: Zugriff auf den Docker-Socket

Damit der Mastercontainer andere Container starten kann, bekommt er den Docker-Socket /var/run/docker.sock eingebunden. Die Docker-Dokumentation sagt zur Angriffsfläche des Docker-Daemons unmissverständlich: „only trusted users should be allowed to control your Docker daemon.“ Wer den Daemon steuert, kann einen Container mit dem Wurzelverzeichnis des Hosts starten und das Dateisystem ohne Einschränkung verändern. Dass AIO den Socket mit :ro nur lesend einbindet, ändert daran nichts. Könnte der Mastercontainer über diesen Socket keine Befehle an Docker schicken, könnte er auch keine Container starten.

Ihr vertraut dem Nextcloud-Projekt also faktisch mit Root-Rechten auf diesem Server. Für einen Server, der nur Nextcloud betreibt, ist das ein vertretbarer Handel. Auf einer Maschine, auf der noch zehn andere Dienste laufen, solltet ihr ihn bewusst eingehen. Wer das nicht will, findet im Repository eine Variante ohne Socket-Zugriff, verliert damit aber genau die Automatik, um die es hier geht.

Bevor ihr anfangt: Server, Domain und Ports

AIO läuft auf x86-64 und auf ARM64. Welche Architektur euer Server hat, verrät uname -m: x86_64 oder aarch64 sind beide in Ordnung. Für den Speicher rät das Projekt zu einer SSD, eine Festplatte funktioniert, ist aber spürbar langsamer. SD-Karten, etwa in einem Raspberry Pi, raten die Entwickler ausdrücklich ab, weil Datenbank und Cache sie mit Schreibzugriffen zermürben.

Bei gemieteten Servern empfiehlt das Projekt VPS auf KVM-Basis und nennt ältere Strato-VPS auf Virtuozzo sowie VPS von Hostinger als bekannte Problemfälle.

Als Betriebssystem nehmen wir Debian 13 „Trixie“ oder Debian 12. Docker unterstützt laut Installationsanleitung für Debian genau diese beiden Versionen, für Ubuntu laut Anleitung für Ubuntu die LTS-Versionen 22.04, 24.04 und 26.04. Linux Mint führt Docker ausdrücklich nicht als unterstützt; für einen Server, der dauerhaft läuft, ist Debian ohnehin die ruhigere Wahl.

Ohne Domain geht es nicht

AIO verlangt eine Domain, die auf euren Server zeigt, und ein gültiges Zertifikat. Ein Betrieb nur über eine IP-Adresse ist laut Projekt nicht vorgesehen und wird auch nicht nachgerüstet. Habt ihr keine eigene Domain, hilft ein DynDNS-Name oder die in AIO eingebaute Registrierung einer kostenlosen Subdomain bei deSEC, dazu weiter unten mehr.

Welche Ports wohin gehören

Laut Dokumentation:

  • 8080/TCP: die AIO-Oberfläche mit selbstsigniertem Zertifikat. Nur für euch, nur im LAN oder über einen SSH-Tunnel.
  • 443/TCP: Nextcloud selbst über den Apache-Container. Muss vom Internet erreichbar sein. 443/UDP zusätzlich, wenn ihr HTTP/3 wollt.
  • 3478/TCP und 3478/UDP: der TURN-Server von Nextcloud Talk, nur nötig, wenn ihr Talk aktiviert.
  • 80/TCP und 8443/TCP: optional, für ein gültiges Zertifikat der AIO-Oberfläche. Hinter einem Reverse Proxy entfallen beide.

Als zwingend offen nennt das Projekt nur 443 und, falls Talk läuft, 3478. Die folgende Grafik zeigt, wie das zusammenhängt.

Schaubild „Ins Internet gehört nur Port 443, die Verwaltung bleibt im LAN“: Links die Zone LAN oder SSH-Tunnel mit dem Admin-Rechner, der die AIO-Oberfläche über https://Server-IP:8080 per IP-Adresse aufruft. In der Mitte der Server mit Docker mit den Containern nextcloud-aio-mastercontainer auf Port 8080, nextcloud-aio-apache auf Port 443 beziehungsweise hinter Caddy auf 127.0.0.1:11000, nextcloud-aio-nextcloud ohne eigenen Port nach aussen und nextcloud-aio-database mit PostgreSQL intern. Rechts das Internet mit Browsern und Apps sowie Talk-Teilnehmern; dorthin sind nur 443 TCP und UDP sowie 3478 für Talk offen. Ein Warnhinweis unten: Docker umgeht ufw und firewalld, Port 8080 gehört nicht in die Portweiterleitung und auf einem Server im Internet nur an 127.0.0.1 gebunden.

Entscheidet euch jetzt für eine von zwei Varianten. Variante A: Auf dem Server läuft sonst kein Webserver, AIO bekommt Port 443 selbst. Variante B: Es gibt schon einen Reverse Proxy wie Caddy oder nginx, AIO läuft dahinter. Die Schritte 1 und 2 sind für beide gleich, ab Schritt 3 trennen sich die Wege.

Schritt 1: Docker aus dem offiziellen Repository installieren

Unsere Grundlagenanleitung Docker Basics und Installation auf Mint, Ubuntu und Debian erklärt Images, Container und Volumes. Für AIO folgen wir hier der aktuellen offiziellen Anleitung von Docker, weil sie das Compose-Plugin gleich mitinstalliert und das neue Format für Paketquellen verwendet.

Zuerst entfernt ihr Pakete, die mit der offiziellen Docker-Version kollidieren. Sind keine installiert, meldet apt das einfach:

sudo apt remove $(dpkg --get-selections docker.io docker-compose docker-doc docker-buildx podman-docker containerd runc | cut -f1)

Dann den Schlüssel und die Paketquelle von Docker einrichten. Der Befehl ist für Debian geschrieben:

sudo apt update
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/debian
Suites: $(. /etc/os-release && echo "$VERSION_CODENAME")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF

sudo apt update

Unter Ubuntu ersetzt ihr in den beiden Adressen debian durch ubuntu. Danach installiert ihr Docker samt Compose-Plugin und prüft, ob alles läuft:

sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo docker run hello-world

Erscheint die Begrüssung von Docker, ist die Grundlage gelegt. Unter Ubuntu prüft ihr zusätzlich, ob nicht noch eine Snap-Version von Docker im System steckt. AIO unterstützt sie ausdrücklich nicht:

sudo docker info | grep "Docker Root Dir" | grep "/var/snap/docker/"

Kommt hier /var/snap/docker/ zurück, läuft das falsche Docker. Laufen darin noch Container, sichert ihr diese zuerst, bevor ihr den Snap mit sudo snap remove docker entfernt.

Schritt 2: Docker umgeht eure Firewall

Hier kann eine Tür offen bleiben, ohne dass ihr es merkt. Die Docker-Dokumentation zu Paketfiltern und Firewalls hält fest, dass veröffentlichte Container-Ports an ufw vorbeigehen: Der Verkehr wird umgeleitet, bevor er die Regeln von ufw überhaupt erreicht. Die Installationsanleitung warnt dasselbe für firewalld.

Heisst konkret: Ihr könnt mit ufw deny 8080 so viel sperren, wie ihr wollt. Veröffentlicht Docker den Port, ist er offen. Auf einem Server im Heimnetz hinter einem Router ist das halb so wild, solange ihr am Router nur 443 (und gegebenenfalls 3478) weiterleitet. Auf einem gemieteten VPS mit öffentlicher IP liegt die AIO-Oberfläche dagegen ungeschützt im Internet.

Die saubere Lösung ist, Port 8080 nur auf 127.0.0.1 zu veröffentlichen. Laut der Docker-Dokumentation zur Portveröffentlichung ist der Port dann nur noch vom Docker-Host selbst erreichbar. Eine Einschränkung nennt die Seite: Bei Docker-Versionen vor 28.0.0 konnten Rechner im selben Netzsegment trotzdem zugreifen. Mit der Version aus dem offiziellen Repository seid ihr auf dem aktuellen Stand.

An die Oberfläche kommt ihr dann über einen SSH-Tunnel von eurem Rechner aus:

ssh -L 8080:127.0.0.1:8080 benutzer@euer-server

Solange diese Verbindung offen ist, erreicht ihr die AIO-Oberfläche in eurem Browser unter https://127.0.0.1:8080.

Schritt 3: Den Mastercontainer starten (Variante A)

Für den Dauerbetrieb empfiehlt das Projekt eine Compose-Datei statt eines langen docker run-Befehls. Legt ein Verzeichnis an und darin die Datei compose.yaml. Die Vorlage stammt aus der offiziellen compose.yaml, gekürzt auf das Nötige:

sudo mkdir -p /opt/nextcloud-aio
sudo nano /opt/nextcloud-aio/compose.yaml
name: nextcloud-aio
services:
  nextcloud-aio-mastercontainer:
    image: ghcr.io/nextcloud-releases/all-in-one:latest
    init: true
    restart: always
    container_name: nextcloud-aio-mastercontainer
    volumes:
      - nextcloud_aio_mastercontainer:/mnt/docker-aio-config
      - /var/run/docker.sock:/var/run/docker.sock:ro
    network_mode: bridge
    ports:
      - "80:80"
      - "127.0.0.1:8080:8080"
    # environment:
    #   NEXTCLOUD_DATADIR: /mnt/ncdata
    #   NEXTCLOUD_UPLOAD_LIMIT: 16G
volumes:
  nextcloud_aio_mastercontainer:
    name: nextcloud_aio_mastercontainer

Drei Namen in dieser Datei dürft ihr nicht ändern: den Containernamen nextcloud-aio-mastercontainer, weil die Updates des Mastercontainers davon abhängen, sowie den Volume-Namen nextcloud_aio_mastercontainer an beiden Stellen, weil das eingebaute Backup darauf angewiesen ist. Gegenüber der Vorlage haben wir zwei Dinge geändert: Port 8080 ist an 127.0.0.1 gebunden, wie in Schritt 2 begründet, und Port 8443 fehlt. Über ihn liefert AIO die Oberfläche mit gültigem Zertifikat aus, was ihr mit dem SSH-Tunnel nicht braucht; auf einem VPS stünde sie sonst wegen der Firewall-Falle offen im Internet. Port 80 leitet Besucher auf Nextcloud weiter und darf bleiben. Wollt ihr die Oberfläche lieber aus dem LAN direkt aufrufen, schreibt ihr dort "8080:8080" und sorgt am Router dafür, dass 8080 nicht weitergeleitet wird.

Was ihr vor dem ersten Start festlegen müsst

Einige Einstellungen wirken nur beim ersten Start oder lassen sich später nur mit Aufwand ändern. Wollt ihr sie setzen, entfernt ihr die Raute vor environment: und vor der jeweiligen Zeile:

  • NEXTCLOUD_DATADIR legt fest, wo auf dem Host eure Dateien liegen, etwa auf einer eigenen Platte unter /mnt/ncdata. Der Pfad muss mit / beginnen und darf nicht / selbst sein. Diesen Wert nach der Erstinstallation nicht mehr ändern, das Projekt warnt ausdrücklich davor. Liegt dort ein Btrfs-Laufwerk, nehmt einen Unterordner wie /mnt/ncdata/nextcloud.
  • NEXTCLOUD_UPLOAD_LIMIT begrenzt Uploads, die nicht in Teilen übertragen werden, also vor allem über öffentliche Links. Angemeldete Benutzer laden über Web, Desktop- und Mobil-Client ohnehin in Teilen hoch. Der Wert muss mit einer Zahl beginnen und mit G enden.
  • NEXTCLOUD_MEMORY_LIMIT setzt das Speicherlimit je PHP-Prozess, Vorgabe sind 512 MB.
  • NEXTCLOUD_STARTUP_APPS bestimmt, welche Apps beim ersten Start installiert werden, zum Beispiel deck twofactor_totp tasks calendar contacts notes.

Zum Upload-Limit widerspricht sich die Dokumentation selbst: Die Funktionsliste nennt 10 GB über öffentliche Links, das FAQ 1G. Wer grosse Dateien per Link empfangen will, setzt den Wert deshalb ausdrücklich.

Dann startet ihr den Mastercontainer:

cd /opt/nextcloud-aio
sudo docker compose up -d
sudo docker logs -f nextcloud-aio-mastercontainer

Die Logs verlasst ihr mit Strg+C, der Container läuft weiter.

Schritt 4: AIO-Oberfläche, Passphrase und Domain

Öffnet nun die AIO-Oberfläche: über den SSH-Tunnel unter https://127.0.0.1:8080, im LAN unter https://<IP-des-Servers>:8080. Der Browser warnt vor dem selbstsignierten Zertifikat, das ist hier beabsichtigt und wird akzeptiert.

Ruft diese Oberfläche immer über die IP-Adresse auf, nie über eure Domain. Die Dokumentation warnt, dass das zwar anfangs funktionieren kann, später aber durch HSTS blockiert wird: Hat euer Browser einmal gelernt, dass die Domain nur mit gültigem Zertifikat aufgerufen werden darf, lässt er euch an das selbstsignierte Zertifikat auf Port 8080 nicht mehr heran.

Die Oberfläche zeigt euch beim ersten Aufruf eine Passphrase. Speichert sie in eurem Passwortmanager, ihr braucht sie für jede spätere Anmeldung. Danach gebt ihr die Domain ein, unter der Nextcloud erreichbar sein soll, zum Beispiel cloud.example.ch. AIO prüft, ob die Domain auf diesen Server zeigt und Port 443 erreichbar ist. Schlägt die Prüfung fehl, stimmt meistens die Portweiterleitung oder der DNS-Eintrag nicht, siehe Fehlerbehebung weiter unten.

Anschliessend wählt ihr die optionalen Container aus. Für den Anfang reicht wenig: Nextcloud Office, wenn ihr Dokumente im Browser bearbeiten wollt, Talk nur, wenn ihr Port 3478 tatsächlich freigeben wollt. Jeder zusätzliche Container kostet Arbeitsspeicher und will aktualisiert werden. Mit „Start containers“ lädt AIO die Abbilder herunter und startet alles. Das dauert beim ersten Mal einige Minuten. Danach zeigt euch die Oberfläche die Anmeldedaten des ersten Administratorkontos. Notiert sie sofort.

Eine Eigenheit, über die viele stolpern: Solange Nextcloud läuft, ist die direkte Anmeldung an der AIO-Oberfläche mit der Passphrase gesperrt. Ihr meldet euch dann als Administrator in Nextcloud an und öffnet https://cloud.example.ch/settings/admin/overview. Dort erscheint oben eine Schaltfläche, die euch für diese Browsersitzung zur AIO-Oberfläche durchlässt. Sind die Container gestoppt, gilt die Sperre nicht.

Damit läuft eure Nextcloud. Das war der angenehme Teil. Der Rest handelt davon, was eine Installation von einem Betrieb unterscheidet.

Variante B: Nextcloud AIO hinter Caddy betreiben

Läuft auf eurem Server schon ein Reverse Proxy, darf AIO Port 443 nicht für sich beanspruchen. Wie ihr Caddy einrichtet, steht in Caddy Reverse Proxy einrichten. Für AIO gelten laut Reverse-Proxy-Dokumentation des Projekts drei Änderungen gegenüber Variante A.

Erstens bekommt der Apache-Container einen anderen Port und lauscht nur lokal. In der compose.yaml fällt Port 80 weg, dafür kommen zwei Umgebungsvariablen dazu:

    ports:
      - "127.0.0.1:8080:8080"
    environment:
      APACHE_PORT: 11000
      APACHE_IP_BINDING: 127.0.0.1

APACHE_IP_BINDING: 127.0.0.1 ist nur richtig, wenn Caddy auf demselben Host läuft und AIO über localhost anspricht. Läuft der Proxy auf einer anderen Maschine, setzt ihr hier 0.0.0.0 und schützt den Port anders.

Zweitens leitet Caddy die Domain an diesen Port weiter. Das Projekt nennt Caddy ausdrücklich als empfohlenen Proxy, der Block im Caddyfile ist entsprechend kurz:

cloud.example.ch {
    reverse_proxy localhost:11000
}

Die config.php-Einträge aus dem Nextcloud-Abschnitt unserer Caddy-Anleitung braucht AIO nicht. Nur wenn euer Proxy AIO nicht über localhost oder 127.0.0.1 erreicht, tragt ihr seine Adresse als vertrauenswürdigen Proxy ein:

sudo docker exec --user www-data -it nextcloud-aio-nextcloud php occ config:system:set trusted_proxies 2 --value=192.168.1.10

Drittens startet ihr AIO mit sudo docker compose up -d neu, öffnet die Oberfläche wie in Schritt 4 und gebt dieselbe Domain ein, die im Caddyfile steht. Die Domainprüfung läuft jetzt durch Caddy hindurch.

Zu Hause ohne eigene Domain: deSEC und der Zugriff aus dem LAN

Für Server im Heimnetz hat AIO eine Abkürzung eingebaut. Auf der Seite zur Domaineingabe findet sich der Abschnitt „Don't have a domain? Get a free one from deSEC“. Gebt eine E-Mail-Adresse und auf Wunsch einen Namen für die Subdomain ein, und AIO registriert eine Subdomain unter dedyn.io bei deSEC, einem DNS-Dienst, der laut eigener Angabe für alle kostenlos ist. Laut Dokumentation hält der Mastercontainer den DNS-Eintrag danach selbst aktuell, wenn sich eure öffentliche IP ändert, und schaltet zwei Community-Container zu: Caddy als Reverse Proxy und dnsmasq für die Namensauflösung im LAN.

Ruft ihr cloud.example.ch von zu Hause aus auf, muss euer Router die Anfrage an den eigenen Server zurückschicken. Viele Router beherrschen dieses sogenannte Hairpin NAT nicht. Die Dokumentation nennt zwei Auswege: Hairpin NAT im Router aktivieren, falls er es kann, oder einen lokalen DNS-Server betreiben, der die Domain im LAN auf die interne IP des Servers auflöst. Bei der deSEC-Variante übernimmt das der dnsmasq-Container, sobald ihr im Router den DHCP-DNS-Server auf euren AIO-Host umstellt. Die Einzelheiten stehen in der Dokumentation zum lokalen Betrieb.

Und dann gibt es noch die Anschlüsse, bei denen gar nichts von aussen ankommt. Laut Fehlerbehebung des Projekts lassen sich hinter CGNAT keine Ports öffnen. Habt ihr nur eine öffentliche IPv6-Adresse, etwa bei DS-Lite, muss IPv6 in Docker und auf dem ganzen Weg aktiviert sein, samt AAAA-Eintrag für die Domain.

Backup mit BorgBackup: einrichten, bevor ihr Daten hochladet

AIO bringt eine eigene Sicherung auf Basis von BorgBackup mit. Laut Dokumentation sind die Sicherungen inkrementell, komprimiert und verschlüsselt, nur die erste dauert länger. Gesichert werden Datenbank, Dateien und die Konfiguration des Mastercontainers, also alles, was für eine Wiederherstellung nötig ist. Was nicht gesichert wird: Ordner, die ihr über die App „External storage“ in Nextcloud eingebunden habt.

Die Einrichtung geht so:

  1. Bindet eine externe oder zweite Platte im Host ein, am besten unter /mnt/backup.
  2. Tragt diesen Pfad in der AIO-Oberfläche im Backup-Abschnitt als Sicherungsverzeichnis ein.
  3. Klickt auf „Create Backup“. Die erste Sicherung dauert je nach Datenmenge eine Weile, alle weiteren übertragen nur Änderungen.
  4. Speichert den angezeigten Schlüssel sofort an einem sicheren Ort ausserhalb dieses Servers. Ohne ihn lässt sich keine Sicherung wiederherstellen.
  5. Aktiviert danach die tägliche Sicherung. Dabei lässt sich zusätzlich einschalten, dass AIO im Anschluss alle Container, Nextcloud und die Apps automatisch aktualisiert.

Statt eines lokalen Pfads akzeptiert AIO auch ein entferntes Borg-Repository. Der erste Versuch schlägt dann absichtlich fehl: AIO erzeugt ein SSH-Schlüsselpaar und zeigt den öffentlichen Schlüssel an, den ihr beim Ziel in die authorized_keys eintragt.

Die Vorgabe zur Aufbewahrung lautet --keep-within=7d --keep-weekly=4 --keep-monthly=6: alles der letzten sieben Tage, dazu vier Wochen- und sechs Monatsstände. Mit der Umgebungsvariable BORG_RETENTION_POLICY lässt sie sich ändern. Eine Sicherung auf einer Platte, die im selben Gehäuse steckt, schützt vor einem kaputten Update, aber nicht vor Feuer, Diebstahl oder Verschlüsselungstrojanern. Warum es eine zweite Kopie an einem anderen Ort braucht, erklärt Was ist ein gutes Backup: die 3-2-1-Regel erklärt. Ein Borg-Repository bei einem externen Anbieter oder auf einem zweiten Server ist dafür der naheliegende Weg.

Updates und occ-Befehle im Alltag

Neue Versionen der Container meldet die AIO-Oberfläche unter dem Abschnitt „Containers“. Ihr klickt auf „Stop containers“ und danach auf „Start and update containers“. Erstellt vorher eine Sicherung, dann geht es bei einem misslungenen Update mit einem Klick zurück. Der Mastercontainer hat ein eigenes Update: Ist eine neue Fassung da, erscheint bei gestoppten Containern eine eigene Schaltfläche dafür.

Laut Dokumentation schickt AIO samstags eine Benachrichtigung an die Administratoren, wenn Updates bereitliegen. Ist das Nextcloud-Abbild älter als 90 Tage, kommt jeden Tag eine Warnung mit dem Titel „AIO is outdated!“. Einmal im Quartal ist also das Minimum; wer die tägliche Sicherung mit automatischen Updates kombiniert, muss sich kaum noch darum kümmern.

Für alles, was die Oberfläche nicht kann, gibt es das Kommandozeilenwerkzeug occ. Bei AIO ruft ihr es im Nextcloud-Container als Benutzer www-data auf, zum Beispiel für einen Systemcheck oder eine Liste der Benutzer:

sudo docker exec --user www-data -it nextcloud-aio-nextcloud php occ status
sudo docker exec --user www-data -it nextcloud-aio-nextcloud php occ user:list

Die Logdatei von Nextcloud liegt bei einer Standardinstallation unter /var/lib/docker/volumes/nextcloud_aio_nextcloud/_data/data/nextcloud.log. Diesen Pfad nennt die Dokumentation für Fail2ban und weist darauf hin, dass in der Jail-Konfiguration chain=DOCKER-USER stehen muss, sonst bleibt Nextcloud trotz Sperre erreichbar. Dieselbe Firewall-Falle wie in Schritt 2, nur von der anderen Seite.

Wenn etwas nicht klappt

Die meisten Probleme entstehen beim ersten Einrichten und haben wiederkehrende Ursachen. Hier die häufigsten, gestützt auf die Fehlerbehebung des Projekts.

Die Domainprüfung schlägt fehl

Prüft zuerst, ob der DNS-Eintrag der Domain auf eure öffentliche IP zeigt und ob Port 443 am Router auf den Server weitergeleitet ist. Hinter CGNAT kann die Prüfung nicht gelingen. Bei Cloudflare als Proxy kann Cloudflare die Prüfung blockieren. Als letztes Mittel nennt das Projekt die Variable SKIP_DOMAIN_VALIDATION: true, ausdrücklich nur, wenn ihr sicher seid, dass alles richtig eingerichtet ist.

Die AIO-Oberfläche ist nicht mehr erreichbar

Habt ihr Port 8080 einmal über die Domain aufgerufen, sperrt euch HSTS womöglich aus. Ruft die Oberfläche über die IP-Adresse oder den SSH-Tunnel auf. Läuft Nextcloud, ist ausserdem die Anmeldung mit der Passphrase gesperrt, siehe Schritt 4.

Der Mastercontainer startet keine anderen Container

Dann erreicht er meist den Docker-Socket nicht, etwa bei einer Snap-Installation oder bei Docker ohne Root-Rechte. Die Logs zeigen die Ursache:

sudo docker logs nextcloud-aio-mastercontainer

Hinter Caddy erscheint ein Fehler 502

Der Port im Caddyfile muss exakt dem Wert von APACHE_PORT entsprechen, und APACHE_IP_BINDING muss zu der Adresse passen, über die Caddy AIO anspricht. Läuft Caddy selbst in einem Container, prüft ihr aus diesem heraus mit nc -z localhost 11000; echo $?, ob der Port erreichbar ist. Eine 0 bedeutet ja.

Von zu Hause aus lädt die Domain nicht

Von unterwegs geht es, im WLAN nicht: Das ist fast immer fehlendes Hairpin NAT. Abhilfe schafft ein lokaler DNS-Eintrag, siehe den Abschnitt zu deSEC und zum LAN-Zugriff.

Ihr wollt ganz von vorne anfangen

Ging beim ersten Einrichten so viel schief, dass ein Neuanfang einfacher ist, beschreibt das Projekt im FAQ unter „How to properly reset the instance?“ den vollständigen Ablauf. Achtung: Dabei werden alle Container, das Netzwerk und alle Volumes von AIO gelöscht, also auch eure Daten. Das ist nur für eine frische Installation gedacht, nie für eine Instanz, auf der schon Dateien liegen.

LIEBER NICHT SELBST BETREIBEN?

Wir richten Nextcloud bei euch ein

Auf eurem Server oder Mini-PC, mit Backup und Updates: Nextcloud für Zuhause für CHF 390, fürs Büro ab CHF 1’200. Remote in der ganzen Schweiz, das Erstgespräch von 20 Minuten ist kostenlos. Auf Wunsch übernehmen wir auch die laufende Betreuung des Servers.

Nextcloud einrichten lassen

Fazit: AIO nimmt euch die Installation ab, nicht die Verantwortung

Nextcloud AIO ist der kürzeste Weg zu einer vollständigen, sauber konfigurierten Nextcloud auf eigener Hardware. Datenbank, Cache, Zertifikat, Push-Dienst und Updates kommen aus einer Hand, und wer früher eine Nextcloud von Hand installiert hat, weiss, wie viele Abende das spart.

Abgenommen wird euch aber nur das Aufsetzen. Ob Port 8080 offen im Internet hängt, weil Docker die Firewall elegant übergeht, ob der Borg-Schlüssel ausserhalb des Servers liegt und ob es eine zweite Kopie an einem anderen Ort gibt, entscheidet ihr. Ebenso, ob ihr dem Mastercontainer den Docker-Socket und damit faktisch den ganzen Server anvertraut. Eine eigene Cloud ist frei von Google und Microsoft, aber nicht frei von Pflege. Sie ist das, was Google Drive nie sein wollte: eure Sache.

Quellen und weiterführende Links

Ähnliche Beiträge

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert