-
Was ist ein vServer?
-
vServer und Sicherheit
-
vServer - Anwendungsfälle
-
vServer bei dogado
-
vServer und Plesk
-
vServer Betriebssyteme
-
vServer Glossar
VPS von dogado - gehostet in Deutschland
Behalte die Kontrolle über deinen vServer/VPS und steuere deine Online-Präsenz souverän. Profitiere von Hochgeschwindigkeits-NVME-SSDs, die bis zu 6-mal schneller sind als herkömmliche.
0. Überblick
- Verwendetes System: Debian 13 64 Bit
- Genutzter User: Ich nehme alles als „root“ vor
- Zeitdauer: ca. 10 Minuten
- Schwierigkeit: Einfach. Nur Code kopieren 😉
- Besonderheiten:
- Grundlage ist folgende Anleitung: Traefik Reverseproxy auf vServer installieren
Diese Anleitung muss zuerst ausgeführt werden. - Die Installation von Docker / Docker Compose wird hier vorausgesetzt.
- Grundlage ist folgende Anleitung: Traefik Reverseproxy auf vServer installieren
1. Nextcloud installieren
1.1 Einleitung
Nextcloud (https://nextcloud.com/) ist eine Open-Source-Software, welche es ermöglicht, eine private Cloud zu betreiben. Der Vorteil von Nextcloud ist, dass es genauso einfach zu bedienen ist wie beispielsweise Dropbox, aber alle Daten auf dem eigenen Server gespeichert werden. So weiß man jederzeit, wer Zugriff auf die eigenen Dateien hat und wo diese gespeichert sind.
Nextcloud wird auch in einer kostenpflichtigen Enterprise-Version angeboten, welche zusätzlichen Support bietet.
Nextcloud kann über einen internen Store beliebig erweitert werden. So ist es zum Beispiel möglich, OnlyOffice zu integrieren, Kalender oder Kontakte zu verwalten oder Videokonferenzen zu betreiben.
In dieser Anleitung werde ich euch zeigen, wie ihr Nextcloud in der kostenlosen Version per Docker schnell bereitstellen könnt.
1.2 Infos zu yml-Dateien
Bei yml-Dateien ist es sehr wichtig, dass die Zeilen alle richtig eingerückt sind. Die Zeilen MÜSSEN immer mit der Leertaste eingerückt werden. Es dürfen KEINE Tabs enthalten sein. Ihr könnt den nachfolgenden Code immer online „überprüfen“ lassen. Die meisten Fehler entstehen nämlich durch die falsche Formatierung. Ein Dienst zum Überprüfen ist zum Beispiel: https://codebeautify.org/yaml-validator
1.3 Vorbereitung
Diese Anleitung basiert auf dem aktuellen Betriebssystem Debian 13. Nextcloud werden wir unter Docker realisieren. Dies ermöglicht uns später sehr schnelle Updates und eine schnelle Installation.
Um Nextcloud neben anderen Diensten auf unserem Server betreiben zu können, nutzen wir hier den Reverse Proxy Traefik. Die Anleitung dazu findet ihr hier: Traefik Reverseproxy auf vServer installieren
Wir führen anschließend alle Befehle als Benutzer root aus. Um zum „root“ zu wechseln, gebt ihr Folgendes ein:
sudo -i
1.3.1 Verzeichnis erstellen
Wir erstellen uns ein neues Verzeichnis, in welchem wir später alle Daten von Nextcloud abspeichern. Dazu geben wir Folgendes in der Konsole ein:
mkdir -p /opt/containers/nextcloud/{database,app,daten}
Ihr könnt hier auch ein anderes Verzeichnis verwenden. Ihr müsst dann aber die gesamte Anleitung entsprechend anpassen.
1.3.2 docker-compose.yml erstellen
Nun können wir mit der eigentlichen „Installation“ von Nextcloud beginnen. Dazu öffnet ihr folgende Datei:
nano /opt/containers/nextcloud/docker-compose.yml
Nun kopiert ihr folgenden Code in die Datei. Dieser Code ist unser Bauplan für unsere Nextcloud-Container.
services:
nextcloud-db:
image: mariadb:11.4
container_name: nextcloud-db
restart: unless-stopped
command:
- --transaction-isolation=READ-COMMITTED
- --innodb-log-file-size=256M
- --slow-query-log=ON
- --long-query-time=2
environment:
- TZ=Europe/Berlin
- MARIADB_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
- MARIADB_DATABASE=nextcloud
- MARIADB_USER=nextcloud
- MARIADB_PASSWORD=${MYSQL_PASSWORD}
- MARIADB_AUTO_UPGRADE=1
volumes:
- ./database:/var/lib/mysql
networks:
- default
nextcloud-redis:
image: redis:8-alpine
container_name: nextcloud-redis
restart: unless-stopped
command: redis-server --requirepass ${REDIS_PASSWORD}
networks:
- default
nextcloud-app:
image: nextcloud:35-apache
container_name: nextcloud-app
restart: unless-stopped
depends_on:
- nextcloud-db
- nextcloud-redis
environment:
- TZ=Europe/Berlin
- MYSQL_HOST=nextcloud-db
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
- REDIS_HOST=nextcloud-redis
- REDIS_HOST_PASSWORD=${REDIS_PASSWORD}
- TRUSTED_PROXIES=${PROXY_SUBNET}
- APACHE_DISABLE_REWRITE_IP=1
- OVERWRITEPROTOCOL=https
- OVERWRITECLIURL=https://${NEXTCLOUD_DOMAIN}
volumes:
- ./app:/var/www/html
- ./daten:/var/www/html/data
networks:
- proxy
- default
labels:
- "traefik.enable=true"
- "traefik.http.routers.nextcloud.rule=Host(`${NEXTCLOUD_DOMAIN}`)"
- "traefik.http.routers.nextcloud.entrypoints=websecure"
- "traefik.http.routers.nextcloud.middlewares=nextcloud-headers,nextcloud-dav"
- "traefik.http.services.nextcloud.loadbalancer.server.port=80"
- "traefik.http.middlewares.nextcloud-headers.headers.stsSeconds=31536000"
- "traefik.http.middlewares.nextcloud-headers.headers.stsIncludeSubdomains=true"
- "traefik.http.middlewares.nextcloud-headers.headers.stsPreload=true"
- "traefik.http.middlewares.nextcloud-dav.redirectregex.permanent=true"
- "traefik.http.middlewares.nextcloud-dav.redirectregex.regex=^https://(.*)/.well-known/(?:card|cal)dav"
- "traefik.http.middlewares.nextcloud-dav.redirectregex.replacement=https://$${1}/remote.php/dav/"
nextcloud-cron:
image: nextcloud:35-apache
container_name: nextcloud-cron
restart: unless-stopped
entrypoint: /cron.sh
depends_on:
- nextcloud-db
- nextcloud-redis
environment:
- TZ=Europe/Berlin
volumes:
- ./app:/var/www/html
- ./daten:/var/www/html/data
networks:
- default
networks:
proxy:
external: true
1.3.3 Domain und Passwörter anpassen
Damit ihr die Anpassungen nicht von Hand vornehmen müsst, nutzen wir ein kleines Skript. Dies generiert uns sichere Kennwörter und ermöglicht die Festlegung der Nextcloud-Domain. Gebt dazu Folgendes ein:
nano /opt/containers/nextcloud/setup.sh
Inhalt:
#!/bin/bash
cd /opt/containers/nextcloud
read -rp "Domain für Nextcloud (z. B. nextcloud.euredomain.de): " DOMAIN
cat > .env <<EOF
NEXTCLOUD_DOMAIN=${DOMAIN}
MYSQL_ROOT_PASSWORD=$(openssl rand -hex 24)
MYSQL_PASSWORD=$(openssl rand -hex 24)
REDIS_PASSWORD=$(openssl rand -hex 24)
PROXY_SUBNET=$(docker network inspect proxy --format '{{(index .IPAM.Config 0).Subnet}}')
EOF
chmod 600 .env
echo
echo "Fertig. Nextcloud wird unter https://${DOMAIN} erreichbar sein."
Führt das Skript anschließend mit folgendem Befehl aus:
bash /opt/containers/nextcloud/setup.sh
Ihr solltet Folgendes sehen:
Domain für Nextcloud (z. B. nextcloud.euredomain.de): nextcloud.testbereich.net
Fertig. Nextcloud wird unter https://nextcloud.testbereich.net erreichbar sein.
Nun überprüft ihr, ob die .env-Datei mit eurer Eingabe sowie den Kennwörtern korrekt erstellt wurde:
cat /opt/containers/nextcloud/.env
Dies sollte in etwa so aussehen:
NEXTCLOUD_DOMAIN=nextcloud.testbereich.net
MYSQL_ROOT_PASSWORD=d9aeaf186b48d30ee324e15d86c736b63aaa30b90a44642d
MYSQL_PASSWORD=3510058a4b6174a5674714359ca9b36f238a137eef4edf0c
REDIS_PASSWORD=605ed958354c40c05e869916488c9834179d058a12f2709d
PROXY_SUBNET=172.18.0.0/16
1.3.4 Docker-Compose-Datei auf Fehler überprüfen
Ihr könnt mit einem Befehl überprüfen, ob eure Docker-Compose-Datei korrekt formatiert ist. Dazu gebt ihr folgende Befehle ein:
cd /opt/containers/nextcloud
docker compose config --quiet && echo "Syntax OK"
Als Ausgabe solltet ihr „Syntax OK“ sehen.
2. Traefik anpassen
Traefik ist standardmäßig so konfiguriert, dass es Anfragen nach 60 Sekunden abbricht. Dies ist für Webseiten oder andere Dienste in der Regel kein Problem. Beim Upload von größeren Dateien kann dies aber schnell zum Problem werden, weil eure Uploads immer abbrechen. Um dies zu verhindern, erhöhen wir die Zeit auf 10 Minuten. Dazu öffnet ihr folgende Datei:
nano /opt/containers/traefik/traefik.yml
Hier fügt ihr folgende Zeilen im Abschnitt „entryPoints“ → „websecure“ hinzu:
transport:
respondingTimeouts:
readTimeout: 600s
Bei mir sieht es dann so aus:
Vorher:
websecure:
address: ":443"
http:
tls:
certResolver: letsencrypt
Nachher:
websecure:
address: ":443"
transport:
respondingTimeouts:
readTimeout: 600s
http:
tls:
certResolver: letsencrypt
Damit die Änderungen wirksam werden, startet ihr Traefik neu:
docker restart traefik
3. Nextcloud starten
Gebt nun Folgendes ein, um euren Nextcloud-Container zu starten:
docker compose -f /opt/containers/nextcloud/docker-compose.yml up -d
Geht nun mit eurem Webbrowser auf eure Webseite (z. B. nextcloud.euredomain.de). Dort sollte nach einigen Sekunden Folgendes zu sehen sein:
Nun legt ihr einen Benutzernamen sowie ein Passwort für euren Administrator-Account fest. Anschließend klickt ihr auf „Installieren“.
Nun könnt ihr noch wählen, ob die „empfohlenen Apps“ installiert werden sollen. Ich klicke hier auf „Überspringen“. Die Apps könnt ihr später alle bei Bedarf von Hand installieren.
Nun solltet ihr Folgendes sehen:
Damit ist die Installation von Nextcloud abgeschlossen.
4. Optimierung
Klickt nun oben rechts auf den „Kreis“ und wählt „Administrationseinstellungen“ aus.
Hier klickt ihr nun auf „Übersicht“ im linken Bereich.
Jetzt bekommt ihr einige Tipps, was ihr noch „verbessern“ könnt. Wir gehen hier nur auf die „orangefarbenen Warnungen“ ein. Das Blaue sind Tipps, die ihr bei Bedarf selbst umsetzen könnt, wie eine Zwei-Faktor-Authentifizierung.
4.1 Telefonregion festlegen
Hier wird festgelegt, welche Ländervorwahl standardmäßig von Nextcloud für Telefonnummern genutzt werden soll. Dies legen wir auf Deutschland fest. Dazu reicht es, folgenden Befehl auszuführen:
docker exec -u www-data nextcloud-app php occ config:system:set default_phone_region --value="DE"
4.2 Wartungsfenster festlegen
Hier wird festgelegt, wann Nextcloud Hintergrundjobs ausführt. Dies ist am besten nachts, wenn niemand arbeitet. Nextcloud nutzt hier die UTC-Zeit. Das heißt: Tragt ihr „1“ ein, beginnt das Wartungsfenster um 1 Uhr UTC, also um 2 Uhr (Winterzeit) bzw. 3 Uhr (Sommerzeit) deutscher Zeit.
docker exec -u www-data nextcloud-app php occ config:system:set maintenance_window_start --type=integer --value=1
4.3 MIME-Type-Migration
Diese Warnung behebt ihr mit folgendem Befehl:
docker exec -u www-data nextcloud-app php occ maintenance:repair --include-expensive
4.4 Hintergrundjobs auf Cron umstellen
In unserer Docker-Compose-Datei gibt es einen eigenen Container für die Hintergrundaufgaben. Damit Nextcloud ihn nutzt, gebt ihr folgenden Befehl ein:
docker exec -u www-data nextcloud-app php occ background:cron
4.5 Bekannter Fehler: Datenbankprüfung
In der aktuellen Nextcloud-Version befindet sich noch ein Fehler, wodurch ihr folgende Warnung seht:
Der Fehler (https://github.com/nextcloud/serverinfo/issues/1156) ist bereits bekannt und wird in einer neueren Version behoben sein.
5. Nextcloud-Sicherheitsscanner
Wir können nun noch überprüfen, ob unsere Nextcloud-Installation „sicher“ ist. Dazu geht ihr auf folgende Webseite: https://scan.nextcloud.com
Gebt hier nun eure URL ein. Bei mir ist dies „nextcloud.testbereich.net“.
Nach kurzer Zeit erhaltet ihr dann euer Ergebnis. Bei mir sieht es so aus:
6. Nextcloud-Apps installieren
Hier zeige ich euch, wie ihr schnell weitere Apps / Erweiterungen in Nextcloud installieren könnt. Dazu klickt ihr wieder oben rechts auf den „Kreis“ und wählt „Apps“ aus.
Nun könnt ihr euch aber auch verschiedene Bereiche auswählen. Hier seht ihr dann immer ein Bild und einen kurzen Text zu der Erweiterung. Die Installation gelingt mit einem Klick auf „Herunterladen und aktivieren“.
Bei uns findet ihr auch noch passende Erweiterungen für Nextcloud:
- Nextcloud Talk auf dem vServer installieren für Videokonferenzen
- OnlyOffice auf dem vServer installieren für die Bearbeitung von Dokumenten direkt im Browser
7. Nextcloud-Backup erstellen und wiederherstellen
7.1 Backup erstellen
Die einfachste Form des Backups ist, den gesamten Nextcloud-Ordner zu sichern. Darin enthalten sind alle eure Daten und Einstellungen. Damit ihr dies nicht von Hand machen müsst, nutzen wir ein kleines Skript. Dazu erstellt ihr folgende Datei:
nano /opt/containers/nextcloud/backup.sh
Inhalt:
#!/bin/bash
NEXTCLOUD=/opt/containers/nextcloud # Nextcloud-Verzeichnis
LOKAL=/opt/containers/nextcloud-backup/ # Hier entsteht das Archiv
DATUM=$(date +%F_%H-%M)
ARCHIV=nextcloud-${DATUM}.tar.gz
cd "$NEXTCLOUD"
mkdir -p "$LOKAL"
echo "Wartungsmodus einschalten ..."
docker exec -u www-data nextcloud-app php occ maintenance:mode --on
echo "Container stoppen ..."
docker compose stop
echo "Archiv erstellen ..."
tar -czf "$LOKAL/$ARCHIV" -C "$(dirname "$NEXTCLOUD")" "$(basename "$NEXTCLOUD")"
chmod 600 "$LOKAL/$ARCHIV"
echo "Container starten ..."
docker compose start
sleep 20
docker exec -u www-data nextcloud-app php occ maintenance:mode --off
echo "Lokale Archive älter als 7 Tage löschen ..."
find "$LOKAL" -name 'nextcloud-*.tar.gz' -mtime +7 -delete
echo "Fertig"
Nun legen wir uns noch einen Ordner für unsere Backups an. Dieser befindet sich außerhalb unseres eigentlichen Nextcloud-Ordners, da wir sonst die Backups jedes Mal mitsichern würden.
mkdir -p /opt/containers/nextcloud-backup
Das Skript wird dort Backups anlegen und alle Backups löschen, die älter als 7 Tage sind. Dieses Verhalten könnt ihr in folgender Zeile anpassen:
find "$LOKAL" -name 'nextcloud-*.tar.gz' -mtime +7 -delete
Einfach die „7“ durch eine andere Zahl ersetzen oder die Zeile komplett löschen, wenn ihr die Backups dauerhaft speichern wollt.
Das Skript müsst ihr nun noch ausführbar machen:
chmod +x /opt/containers/nextcloud/backup.sh
Anschließend könnt ihr es starten:
/opt/containers/nextcloud/backup.sh
Während des Backups wird eure Nextcloud-Instanz in einen Wartungsmodus versetzt. Dies verhindert Änderungen während des Backups. In dieser Zeit ist eure Instanz aber nicht nutzbar. Die Ausgabe sieht so aus:
root@testbereich:/opt/containers/nextcloud# /opt/containers/nextcloud/backup.sh
Wartungsmodus einschalten ...
Maintenance mode enabled
Container stoppen ...
[+] stop 4/4
✔ Container nextcloud-cron Stopped 10.2s
✔ Container nextcloud-app Stopped 1.5s
✔ Container nextcloud-redis Stopped 0.3s
✔ Container nextcloud-db Stopped 0.4s
Archiv erstellen ...
Container starten ...
[+] start 4/4
✔ Container nextcloud-db Started 0.3s
✔ Container nextcloud-redis Started 0.5s
✔ Container nextcloud-cron Started 0.2s
✔ Container nextcloud-app Started 0.4s
Maintenance mode disabled
Lokale Archive älter als 7 Tage löschen ...
Fertig
Nach dem Backup könnt ihr euch den Ordner anzeigen lassen:
ls -l /opt/containers/nextcloud-backup/
So sollte es nach dem ersten Backup aussehen:
root@testbereich:/opt/containers/nextcloud# ls -l /opt/containers/nextcloud-backup/
total 345264
-rw------- 1 root root 353543947 Oct 15 09:30 nextcloud-2026-10-15_09-29.tar.gz
Es empfiehlt sich, das Backup noch an einen anderen Ort außerhalb eures Servers zu sichern.
7.2 Backup wiederherstellen
Ein vorhandenes Backup könnt ihr leicht innerhalb weniger Minuten wiederherstellen. Zuerst beendet ihr die aktuelle Nextcloud-Instanz:
cd /opt/containers/nextcloud
docker compose down
Anschließend verschiebt oder löscht ihr die aktuelle Instanz:
Verschieben
mv /opt/containers/nextcloud /opt/containers/nextcloud-alt
oder
Löschen
rm -R /opt/containers/nextcloud
Verschieben kann sinnvoll sein, da ihr so im Notfall immer noch auf die bisherige Instanz zugreifen könnt.
Lasst euch nun den Namen eures Backups anzeigen:
ls -l /opt/containers/nextcloud-backup/
Bei mir heißt die Datei: „nextcloud-2026-10-15_09-29.tar.gz“.
root@testbereich:/opt/containers/nextcloud# ls -l /opt/containers/nextcloud-backup/
total 345264
-rw------- 1 root root 353543947 Oct 15 09:30 nextcloud-2026-10-15_09-29.tar.gz
Jetzt stelle ich dieses Backup wieder her. Ihr müsst den Dateinamen bei euch anpassen.
tar -xzpf /opt/containers/nextcloud-backup/nextcloud-2026-10-15_09-29.tar.gz --numeric-owner -C /opt/containers
Jetzt könnt ihr in das wiederhergestellte Verzeichnis wechseln und Nextcloud starten. Anschließend beendet ihr noch den Wartungsmodus:
cd /opt/containers/nextcloud
docker compose up -d
sleep 20
docker exec -u www-data nextcloud-app php occ maintenance:mode --off
Jetzt sollte eure Nextcloud-Instanz wieder vollständig nutzbar sein.
8. Nextcloud aktualisieren
Grundsätzlich solltet ihr vor jedem Update ein Backup machen.
8.1 Updates innerhalb derselben Hauptversion
Diese Anleitung ist für Nextcloud-Version 35 geschrieben. Dies haben wir in Schritt 1.3.2 festgelegt:
nextcloud-app:
image: nextcloud:35-apache
nextcloud-cron:
image: nextcloud:35-apache
Wenn ihr nun Updates innerhalb der Version 35 machen wollt, dann genügen folgende Befehle:
cd /opt/containers/nextcloud
docker compose down
docker compose pull
docker compose up -d
Der erste Start nach dem Update dauert etwas länger, da einige Daten aktualisiert werden. Den Status könnt ihr mit folgendem Befehl überwachen:
docker compose logs -f nextcloud-app
8.2 Upgrade auf eine neue Version
Nextcloud hat hier die Besonderheit, dass ihr immer nur von einer Hauptversion auf die nächsthöhere Version springen könnt. Das heißt: von Nextcloud 35 auf Nextcloud 36. Ein direkter Sprung von Nextcloud 35 auf zum Beispiel eine zukünftige Version 37 ist nicht möglich. Solltet ihr dies versuchen, so wird eure Nextcloud-Instanz nicht mehr starten.
Die aktuelle Version könnt ihr bei Docker Hub einsehen:
Hier seht ihr die aktuell verfügbaren Versionen:
Wenn ihr auf eine zukünftige Version 36 wechseln wollt, so öffnet ihr folgende Datei:
nano /opt/containers/nextcloud/docker-compose.yml
Ändert hier an zwei Stellen den Wert. Wichtig ist, dass beide Container das identische Image benötigen.
Vorher:
nextcloud-app:
image: nextcloud:35-apache
…
nextcloud-cron:
image: nextcloud:35-apache
Nachher:
nextcloud-app:
image: nextcloud:36-apache
…
nextcloud-cron:
image: nextcloud:36-apache
Anschließend startet ihr Nextcloud erneut:
cd /opt/containers/nextcloud
docker compose down
docker compose pull
docker compose up -d