Tutorials  /  Docker

Nextcloud All-in-One mit Docker installieren

LLudwig · August 2026 ·10 Min. Lesezeit ·Docker, Tutorial

Eine produktionstaugliche Nextcloud besteht aus deutlich mehr als dem PHP-Code: Datenbank, Redis, Reverse Proxy, Push-Dienst, Office-Server und Backup müssen zusammenpassen. Nextcloud All-in-One (AIO) bündelt diese Teile in einem verwalteten Container-Set und übernimmt die Verdrahtung. Diese Anleitung führt dich von einem leeren Docker-Host zu einer erreichbaren Instanz mit gültigem TLS-Zertifikat und eingerichtetem Backup.

Was ist Nextcloud All-in-One?

Nextcloud All-in-One ist die offizielle Docker-Distribution von Nextcloud: Ein Master-Container startet und aktualisiert über den Docker-Socket rund ein Dutzend weitere Container für Apache, PostgreSQL, Redis, Talk, Collabora und BorgBackup.

Der entscheidende Unterschied zu einem selbstgeschriebenen Compose-Stack liegt in der Verwaltung. Du definierst keine Services, sondern klickst im AIO-Interface an, welche optionalen Komponenten laufen sollen. Der Master-Container erzeugt daraufhin die passenden Container, Volumes und Netzwerke und hält sie beim Update in einer getesteten Versionskombination.

Aspekt Eigener Compose-Stack Nextcloud AIO
Versionsabgleich der Komponenten manuell vom Master-Container gepflegt
TLS-Zertifikat selbst einrichten Let's Encrypt integriert
Backup selbst bauen BorgBackup integriert
Volle Kontrolle über jeden Parameter ja eingeschränkt

Wenn du jede Direktive selbst setzen willst, bleibt ein eigener Compose-Stack die bessere Wahl. Für den Regelfall spart AIO viel Wartungsaufwand.

Voraussetzungen

  • Linux-Host (x86_64 oder arm64) mit Docker Engine 24.0 oder neuer, geprüft mit docker --version
  • Mindestens 2 vCPU, 4 GB RAM und 40 GB freier Speicher. Mit Collabora, ClamAV und Volltextsuche solltest du 8 GB RAM einplanen.
  • Eine Domain, deren A-Record (und, falls vorhanden, AAAA-Record) auf die öffentliche IP des Hosts zeigt
  • Freigegebene Ports: 80/tcp, 443/tcp und 443/udp, 8080/tcp, 8443/tcp sowie 3478/tcp und 3478/udp für Nextcloud Talk
  • Ein Benutzer mit sudo-Rechten

Als Basis eignet sich jeder Linux-Server mit Root-Zugriff, etwa eine skalierbare Cloud-VM für Docker-Workloads, auf der du die Docker Engine selbst installierst. Wichtig ist nur, dass Port 80 frei ist: Ein bereits laufender nginx oder Apache auf dem Host verhindert die Domain-Validierung, solange du AIO nicht bewusst hinter einen Reverse Proxy stellst.

Welche Container startet Nextcloud AIO?

Nextcloud AIO startet je nach gewählten Optionen zwischen sechs und dreizehn Container, darunter nextcloud-aio-apache als TLS-Endpunkt, nextcloud-aio-nextcloud mit dem PHP-Code, nextcloud-aio-database als PostgreSQL und nextcloud-aio-redis als Cache.

graph TD
    A["Browser: https://cloud.deine-domain.de"] --> B["nextcloud-aio-apache :443"]
    B --> C["nextcloud-aio-nextcloud (PHP-FPM)"]
    C --> D["nextcloud-aio-database (PostgreSQL)"]
    C --> E["nextcloud-aio-redis (Cache und Locking)"]
    B --> F["nextcloud-aio-notify-push"]
    G["nextcloud-aio-mastercontainer :8080 / :8443"] -->|"steuert über /var/run/docker.sock"| B
    G -->|"startet und aktualisiert"| C
    G --> H["nextcloud-aio-borgbackup"]

Der Master-Container ist bewusst kein Bestandteil des Datenpfads. Fällt er aus, läuft die Nextcloud weiter. Du verlierst nur das Verwaltungs-Interface für Updates, Backups und Container-Neustarts.

VM

Passende Infrastruktur bei centron

Zum Mitmachen braucht es keine eigene Hardware: ccloud³ VMs mit vollem Root-Zugriff, stundengenau abgerechnet und in Sekunden startklar. Cloud-Server mieten →

Master-Container starten

Der folgende Befehl legt den Master-Container an. Das Volume nextcloud_aio_mastercontainer muss exakt so heißen, weil AIO es intern hart referenziert:

Konsole
$ sudo docker run \\
--init \\
--sig-proxy=false \\
--name nextcloud-aio-mastercontainer \\
--restart always \\
--publish 80:80 \\
--publish 8080:8080 \\
--publish 8443:8443 \\
--volume nextcloud_aio_mastercontainer:/mnt/docker-aio-config \\
--volume /var/run/docker.sock:/var/run/docker.sock:ro \\
nextcloud/all-in-one:latest

Die Parameter im Einzelnen:

  • --sig-proxy=false: Ein Strg+C löst dich vom Log-Stream, ohne den Container zu stoppen.
  • --publish 80:80: Wird ausschließlich für die Domain-Validierung und den ACME-Challenge benötigt.
  • --publish 8443:8443: AIO-Interface über die Domain mit gültigem Let's-Encrypt-Zertifikat.
  • --publish 8080:8080: AIO-Interface über die IP-Adresse mit selbstsigniertem Zertifikat. Diesen Port solltest du nach der Einrichtung per Firewall auf deine eigene IP begrenzen.
  • /var/run/docker.sock: Über diesen Socket verwaltet der Master-Container alle weiteren Container. Der Zugriff ist gleichbedeutend mit Root-Rechten auf dem Host, deshalb gehört AIO nicht auf einen Host mit fremden Workloads.

Optionale Einstellungen setzt du bereits hier als Umgebungsvariablen, etwa --env NEXTCLOUD_DATADIR="/mnt/ncdata" für ein eigenes Datenverzeichnis oder --env NEXTCLOUD_UPLOAD_LIMIT="16G". Nachträgliche Änderungen erfordern das Entfernen und Neuanlegen des Master-Containers.

AIO-Interface öffnen und Domain eintragen

Rufe https://<server-ip>:8080 auf und bestätige die Zertifikatswarnung. Die Seite zeigt einmalig ein generiertes Initialpasswort an. Notiere es sofort, es lässt sich später nur noch aus dem Volume auslesen.

Trage anschließend deine Domain ein, zum Beispiel cloud.<deine-domain>, und bestätige mit Submit domain. AIO startet dafür kurzzeitig den Container nextcloud-aio-domaincheck, der auf Port 80 einen zufälligen Token ausliefert und ihn über die Domain wieder abruft. Nur wenn beide Werte übereinstimmen, gilt die Domain als validiert.

Danach wählst du die optionalen Container aus. Für den Start reicht der Standardumfang. Collabora belegt allein rund 2 GB RAM, ClamAV und die Volltextsuche jeweils etwa 1 GB. Ein Klick auf Download and start containers zieht die Images und startet den Stack. Der erste Durchlauf dauert je nach Anbindung fünf bis fünfzehn Minuten.

Betrieb hinter einem Reverse Proxy

Läuft auf dem Host bereits ein nginx, darf AIO Port 443 nicht selbst belegen. Entferne den Master-Container und lege ihn mit zwei zusätzlichen Variablen neu an:

Konsole
$ sudo docker run \\
--init \\
--sig-proxy=false \\
--name nextcloud-aio-mastercontainer \\
--restart always \\
--publish 8080:8080 \\
--env APACHE_PORT=11000 \\
--env APACHE_IP_BINDING=127.0.0.1 \\
--env SKIP_DOMAIN_VALIDATION=false \\
--volume nextcloud_aio_mastercontainer:/mnt/docker-aio-config \\
--volume /var/run/docker.sock:/var/run/docker.sock:ro \\
nextcloud/all-in-one:latest

Der Apache-Container lauscht damit nur noch auf 127.0.0.1:11000. Die passende nginx-Konfiguration unter /etc/nginx/sites-available/nextcloud.conf:

nginx
server {
    listen 443 ssl;
    http2 on;
    server_name cloud.<deine-domain>;
    ssl_certificate /etc/letsencrypt/live/cloud.<deine-domain>/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/cloud.<deine-domain>/privkey.pem;
    client_max_body_size 10G;
    location / {
        proxy_pass http://127.0.0.1:11000;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_request_buffering off;
        proxy_read_timeout 3600s;
    }
}

proxy_request_buffering off ist hier kein Detail: Ohne diese Zeile schreibt nginx große Uploads zuerst vollständig auf die eigene Platte, was bei mehreren Gigabyte zu Timeouts führt.

Verifikation

Prüfe zuerst den Zustand aller Container:

Konsole
$ sudo docker ps --filter "name=nextcloud-aio" --format "{{.Names}}: {{.Status}}"
nextcloud-aio-apache: Up 6 minutes (healthy)
nextcloud-aio-notify-push: Up 6 minutes (healthy)
nextcloud-aio-nextcloud: Up 7 minutes (healthy)
nextcloud-aio-redis: Up 8 minutes (healthy)
nextcloud-aio-database: Up 8 minutes (healthy)
nextcloud-aio-mastercontainer: Up 22 minutes (healthy)

Jeder Container muss (healthy) melden. Ein dauerhaft (starting) gebliebener Container deutet meist auf zu wenig RAM hin.

Den Zustand der Anwendung selbst fragst du über occ ab:

Konsole
$ sudo docker exec --user www-data nextcloud-aio-nextcloud php occ status
  - installed: true
  - version: 32.0.4.1
  - versionstring: 32.0.4
  - edition:
  - maintenance: false
  - needsDbUpgrade: false

Die Versionsnummer variiert je nach Release-Stand. Entscheidend sind installed: true und maintenance: false. Zum Schluss prüfst du die Erreichbarkeit von außen:

Konsole
$ curl -sI https://cloud.<deine-domain>/status.php | head -n 1
HTTP/2 200

Backups mit BorgBackup einrichten

AIO bringt BorgBackup mit. Im AIO-Interface trägst du unter Backup and restore ein Zielverzeichnis ein, zum Beispiel /mnt/backup. Das Ziel muss auf einem anderen Datenträger liegen als das Nextcloud-Datenverzeichnis, sonst nimmt AIO den Pfad nicht an. Ein zusätzliches Volume oder Blockspeicher am selben Host reicht dafür aus, ein entferntes Ziel per SSH erhöht die Sicherheit weiter.

Der erste Lauf stoppt alle Container, erstellt das Repository und zeigt anschließend das Verschlüsselungspasswort an. Ohne dieses Passwort ist das Backup nicht wiederherstellbar, lege es außerhalb des Servers ab. Aktiviere danach Daily backup mit einer Uhrzeit außerhalb der Nutzungszeiten und der Option, Container-Updates direkt nach dem Backup einzuspielen.

Warum schlägt die Domain-Validierung fehl?

Die Domain-Validierung von Nextcloud AIO schlägt fehl, wenn der A-Record nicht auf die öffentliche IP des Hosts zeigt, Port 80 bereits belegt ist oder eine Firewall den kurzzeitig gestarteten Container nextcloud-aio-domaincheck blockiert.

Diese drei Befehle grenzen die Ursache ein:

Konsole
$ dig +short cloud.<deine-domain> A
$ sudo ss -tulpn | grep ':80 '
$ sudo docker logs --tail 50 nextcloud-aio-mastercontainer

Ein häufiger Sonderfall ist ein veralteter AAAA-Record. Zeigt die Domain auf eine IPv6-Adresse, die der Host nicht mehr hat, testet der Domaincheck über IPv6 und scheitert, obwohl der A-Record korrekt ist. Entferne den AAAA-Record oder korrigiere ihn.

Troubleshooting

Symptom Ursache Lösung
port is already allocated beim Start nginx oder Apache belegt Port 80 Reverse-Proxy-Variante mit APACHE_PORT=11000 nutzen
Container bleibt auf starting zu wenig RAM, meist durch Collabora oder ClamAV optionale Container abwählen, Swap prüfen
Login-Seite lädt, Dateien laden nicht X-Forwarded-Proto fehlt im Proxy Header im nginx-location-Block ergänzen
Initialpasswort verloren Passwort liegt im Master-Volume sudo docker exec nextcloud-aio-mastercontainer cat /mnt/docker-aio-config/data/configuration.json

Updates einspielen

Updates der Anwendungscontainer startest du im AIO-Interface über Check for updates und anschließend Stop containers sowie Start containers. AIO aktualisiert dabei alle Images gemeinsam und führt occ upgrade selbst aus.

Den Master-Container aktualisierst du auf der Kommandozeile. Die Konfiguration überlebt das, weil sie im Volume liegt:

Konsole
$ sudo docker stop nextcloud-aio-mastercontainer
$ sudo docker rm nextcloud-aio-mastercontainer
$ sudo docker pull nextcloud/all-in-one:latest

Danach führst du denselben docker run-Befehl wie bei der Erstinstallation erneut aus, inklusive aller Umgebungsvariablen. Bewahre den Befehl deshalb als Skript unter /usr/local/sbin/aio-start.sh auf.

Fazit

Nextcloud AIO bringt dich mit einem einzigen docker run-Befehl zu einem vollständigen Nextcloud-Stack inklusive TLS, Redis, Push-Dienst und Backup. Plane vorab, ob der Host Port 443 selbst belegen darf, denn die Reverse-Proxy-Variante erfordert einen anderen Startbefehl. Prüfe nach der Einrichtung einmal aktiv eine Wiederherstellung aus dem Borg-Repository: Ein Backup, das nie zurückgespielt wurde, ist keine belastbare Absicherung.

Weiterlesen

Jetzt 200 € Guthaben sichern

Testen Sie Ihr Setup auf ccloud³

Registrieren Sie sich in der ccloud³ und erhalten Sie 200 € Startguthaben für Ihr Projekt – z. B. für eine PostgreSQL-VM mit automatischen Backups.

Ludwig Technische Redaktion

Schreibt bei centron über Linux-Administration, Container und Datenbanken – mit Fokus auf Anleitungen, die im Betrieb tatsächlich funktionieren.

Kategorie Docker
Teilen
Noch offene Fragen?

Our team will help you with your specific setup - in German or English, by people who run the platform themselves.

War dieses Tutorial hilfreich?

Your answer is stored anonymously and helps us improve our tutorials.

Kommentare

No comments yet - be the first to ask a question about this tutorial.

Sign in to comment

Comments are open to centron customers. Sign in to your account to ask a question about this tutorial.

Weiterlesen

Das könnte Sie auch interessieren

Jetzt kostenlos anfangen

Melden Sie sich an und erhalten Sie in den ersten 60 Tagen ein Guthaben von 200 € bei centron.

Dieses Werbeangebot gilt nur für neue Konten. Angebot ausschließlich für Gewerbetreibende.

Jetzt loslegen Sales kontaktieren