Nextcloud – Mehr als nur Dateispeicher
Nach der finanziellen Souveränität folgt die digitale Souveränität: das eigenständige Verwalten digitaler Daten wie Bilder, Dokumente, Notizen, Kalender, Adressbuch usw. Nachdem ich auf GrapheneOS umgestiegen bin, habe ich schnell festgestellt, dass das „Entgoogeln“ gar nicht so einfach ist – zumindest nicht, wenn man auf einen gewissen Komfort nicht verzichten möchte. Fotos, E-Mails, Kontakte, Kalender und Notizen alles bei einem einzigen Anbieter zu speichern, ist ein verlockendes Ziel für gesichtslose Organisationen, die Menschen schaden oder in ihrer Freiheit einschränken wollen. Da hoste ich meine Daten lieber selbst. So bleibe ich frei und behalte die Kontrolle über meine Informationen.
Auf der Suche nach einer geeigneten Lösung für ein Free-and-Open-Source-Cloudsystem und dessen Implementierung auf einem VPS bin ich auf den Blogbeitrag von deployn.de und das dazugehörige Video gestoßen. Mit Docker konnte ich mich bisher nie wirklich anfreunden, aber die Erklärung war äußerst gelungen. Besonders hilfreich fand ich die Anleitung zur direkten Verbindung mit dem Server über VSCode – das macht die Bearbeitung erheblich komfortabler. Im Video nutzt der Autor zwei Befehle: nc-remove
und nc-init
, um die Docker-Container neu aufzusetzen. Gerade zu Beginn ergibt das Sinn, da man so verschiedene Ansätze ausprobieren und die Container bei Bedarf einfach neu erstellen kann.
Dieses Tutorial bietet daher weder eine grundlegende Installationsanleitung für Nextcloud noch eine Anleitung zum sicheren Aufsetzen eines VPS. Solche Grundlagen könnt ihr aber ganz einfach vom Kapitel 3 des Blitz⚡Bank Tutorials übernehmen, es ist identisch.
Kommen wir direkt zu den Fakten:
Hier erkläre ich, wie ich einen Nextcloud-Server aufsetze, wie ich ihn optimiere und welche Dienste ich verwende.
1. Docker mit Pakete installieren
Auf dem SSH-Einloggen und folgende Installationen durchführen. Als erstes das Docker selbst. Ihr könnten den ganz Code Block kopieren und im Terminal einfügen.
# Add Docker's official GPG key: sudo apt-get update sudo apt-get install ca-certificates curl sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc # Add the repository to Apt sources: echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update
Dann noch Erweiterte Komponenten für Docker:
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Bei der Installation kann es sein, dass ihr einmal ENTER
drücken müsst und einen Hinweis bekommt, dass der Kernel geupdatet werden muss.
Diesen und den nachfolgenden Hinweis einfach mit ENTER
bestätigen, und wie empfohlen, den Server einmal mit sudo systemctl reboot
neu starten, damit er auch geladen wird.
Jetzt noch einmal die Docker Versionen prüfen:
docker --version docker compose version
Docker Installation ✅
2. Nextcloud „All-in-One“ installieren
Nextcloud bietet ein „All-in-One“ Docker Lösung, bei dem alle notwendigen Packet als Container installiert werden. Die offizielle Github Seite ist sehr umfänglich, da Nextcloud so viel Optionen hat. Das Installieren und Einrichte, ist dagegen sehr einfach. Man muss nur ein Docker Container gestartet werden. Die Einrichtung und alles Weiteres erfolgt das über das Webinterface. Aber zuvor müsst ihr noch die Firewall Freigabe um den Port 8080 erweitern, damit ihr überhaupt auf das Webinterface zugreifen könnt:
sudo ufw allow 8080 comment 'Nextcloud Webinterface' sudo ufw status
Und jetzt geht’s auch schon los, den Docker Container starten:
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 \ --volume nextcloud_aio_mastercontainer:/mnt/docker-aio-config \ --volume /var/run/docker.sock:/var/run/docker.sock:ro \ nextcloud/all-in-one:latest
3. Der Caddy Webserver
Wichtig: Stellt sicher, dass ihr bei eurem Domainanbieter die DNS-Adressen (A und AAAA) eurer Subdomain/Domain auf die IP-Adresse eures Virtual Private Servers verweist, damit Anfragen über die Domain zum VPS weitergeleitet werden. Falls ihr noch keine Domain habt, könnt ihr eine kostenlose Subdomain von duckdns.org bekommen. Dazu habe ich hier unter Punkt 7.11 mal was geschrieben.
Man beachte bei den vorhergehenden docker run
Parametern, die Variable APACHE_PORT=11000
. Das ist der Port, auf dem der „interne“ Apache Webserver lauscht. Durch die Festlegung APACHE_IP_BINDING=127.0.0.1
, hat der Docker Container keine direkt Verbindung zur Außenwelt und benötigt übergeordneten einen Webserver, der die Anfragen weiterleitet. Hier kommt jetzt unser altbekannter Caddy Server zum Einsatz. Entweder habt ihr ihr ihn auf eurem VPS schon für einen anderen Service am laufen, dann braucht ihr den caddyfile
nur um die drei Zeilen erweitern. Falls nicht, hier eine Anleitung:
Caddy installieren
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list sudo apt update sudo apt install caddy
-> Ihr könnten den Webserver einmal testen http://yourIPaddress
. Er sollte euch eine Caddy Seite anzeigen.
Caddyfile einstellen
sudo nano /etc/caddy/Caddyfile
Ersetzt nachfolgend nextcloud.yourdomain.com
eurer Domain ersetzten und befüllt den File mit:
https://nextcloud.yourdomain.com:443 { header Strict-Transport-Security max-age=31536000; reverse_proxy localhost:11000 }
-> STRG+X -> Y -> Enter
Caddy jetzt einmal neu laden:
sudo systemctl reload caddy
Nach einer kurzen Verzögerung sollte Caddy alle notwendigen Zertifikate erhalten haben, und ihr könnt den Webserver mit dem Internetbrowser überprüfen. Gebt einfach
ein, und euer LNbits-Server sollte angezeigt werden. 🎉 Ihr habt jetzt eine öffentliche HTTPS-Webseite, die per TLS verschlüsselt ist. Die Zertifikatsaktualisierung und den Autostart übernimmt Caddy für euch. Das Zertifikat selbst könnt ihr z.B. mit ssllabs.com testen. nextcloud.
yourdomain.com
Hier noch zwei nützliche Befehle, um den Status und die Logs des Caddy Server zu prüfen:
sudo systemctl status caddy sudo journalctl -u caddy -f --since "2 hour ago"
4. Einstellungen und Tipps
4.1 Aliasse anlegen
alias caddy-reload='sudo docker compose -f ~/caddy/docker-compose.yml exec caddy caddy reload --config /etc/caddy/Caddyfile' alias caddy-down='sudo docker compose -f ~/caddy/docker-compose.yml down' alias caddy-up='sudo docker compose -f ~/caddy/docker-compose.yml up -d' alias nc-down='sudo docker compose -f ~/nextcloud/docker-compose.yml down' alias nc-up='sudo docker compose -f ~/nextcloud/docker-compose.yml up -d' alias nc-remove='sudo rm -rf ~/nextcloud/{data,db,redis}' alias nc-init='mkdir -p ~/nextcloud/{data,db,redis}'
Änderungen übernehmen:
source ~/.bashrc
Die neuen Befehle lauten:
caddy-reload caddy-down caddy-up nc-down nc-up nc-remove nc-init
-> Fehlermeldungen bei caddy-reload
können ignoriert werden.
4.2 Nextcloud auf Sicherheitslücken überprüfen
Die Seite: https://scan.nextcloud.com/ aufrufen und Webseiten-URL eingeben.
-> Das A+ Ranking ist möglich. Ich hatte einmal nur ein A, weil es noch den Fehler __Host-Prefix
gab. Was aber kein kein Sicherheitsrisiko dastellt und die Behebung hat auch Nachteile hat. Allerdings war der Fehler dann nach einiger Zeit von selbst verschwunden, keine Ahnung weshalb.
4.3 Warnungen beseitigen
Zum Beseitigen der Warnungen muss die Nextcloud Bash aufgerufen werden:
sudo docker compose -f nextcloud/docker-compose.yml exec -u 33 nextcloud bash
Folgende Befehle ausführen um die Warnungen zu eliminieren:
# Warnung: Eine oder mehrere Mimetyp-Migrationen sind verfügbar. php occ maintenance:repair --include-expensive # Warnung: Einige fehlende optionale Indizes wurden erkannt. php occ db:add-missing-indices # Warnung: Der Server hat keine konfigurierte Startzeit für das Wartungsfenster. -> 1 Uhr php occ config:system:set maintenance_window_start --type=integer --value=1
Hinweise beseitigen:
# Hinweis: Für Ihre Installation ist keine Standard-Telefonregion festgelegt. php occ config:system:set default_phone_region --value="DE"
Ein weiterer Hinweis „Sie haben Ihre E-Mail-Serverkonfiguration noch nicht festgelegt oder überprüft.“ kann behoben werden, in dem unter „Verwaltung > Grundeinstellungen > E-Mail-Server“ eine Email Adresse eingerichtet wird, über die Nextcloud Meldungen versenden kann.
4.4 Nützliche Befehle
# Verzeichnisstruktur listen df -h # Verzeichnisse bis Tiefe 2 Listen du -h --max-depth=2
Config.php lesen:
sudo docker compose -f nextcloud/docker-compose.yml exec -u 33 nextcloud bash cd config cat config.php
4.5 Updates / Upgrades
Docker selbst update
Einzelne Docker Container updaten:
-> Aktuelle Docker Versionen prüfen: https://hub.docker.com/
-> Suchen nach nextcloud, caddy, mariadb, und redis und mit den Version in der nextcloud/docker-compose.yml
vergleichen
-> Zum Upgraden erste nc-down
, dann docker-compose.yml
bearbeiten und nc-up
zum Starten von Nextcloud.
5. Anhang
5.1 Android FOSS Apps
Etar Calendar: GitHub / F-Droid
DAVx⁵ – CalDAV/CardDAV-Synchronisierung und -Client: GitHub / F-Droid
ICSx⁵ – Webcal (.ics)-Kalender abonnieren: GitHub / F-Droid
Tipps zu Kontakte:
Die Kontakte am besten einmal exportieren und sichern was man hat, hat man. Gibt es mehrere Konten die gleiche heißen bitte synchronisieren und bereinigen. Auch auf dem Gerät alle Kontakte, inkl. Kontakte im Systemspeicher, löschen. Dazu unter Apps rechts oben die drei Punkte klicken und „System-Apps anzeigen“ wählen, dann wird in der Liste zusätzlich zu Kontakte auch Kontakte-Speicher angezeigt. Um die Kontakte im Systemspeicher zu löschen, öffne die App-Einstellungen, klicke oben rechts auf die drei Punkte und wähle „System-Apps anzeigen“. Dadurch erscheinen in der Liste neben Kontakte auch Kontakte-Speicher, wo die entsprechenden Einträge ebenfalls gelöscht werden können.
Zuerst sollten alle Kontakte exportiert und gesichert werden. Wenn mehrere Konten vorhanden sind, empfiehlt es sich, die Kontakte auf ein Konto zu synchronisieren und dort zu bereinigen. Anschließend können alle Kontakte in allen Konten gelöscht werden. Auf dem Gerät sollten ebenfalls alle Kontakte gelöscht werden, einschließlich der Kontakte im Systemspeicher.
Um die Kontakte im Systemspeicher zu löschen, öffnet man die App-Einstellungen, klickt oben rechts auf die drei Punkte und wählt „System-Apps anzeigen“. Dadurch erscheint in der Liste neben Kontakte auch Kontakte-Speicher, wo die entsprechenden Einträge ebenfalls gelöscht werden können.
Beim Kalender ähnlich verfahrensweiße wie bei Kontakten. Erste einmal die Kalender exportieren und sichern. Auf der Nextcloud unter Kalender Persönlich die Kalender importieren. Unter Kalender-Einstellungen „Geburtstagskalender aktiveren“ und unter Kalender + „Feiertagskalender hinzufügen“. DAVx⁵ zeigt später alle drei Kalender an, damit man sie zur Synchronisierung auswählen kann. Die ersten zwei sind unter CalDAV und der „Feiertage in Germany“ kann unter Webcal „Subscribe“ werden. Dafür benötigt man dann noch ICSx⁵ im Hintergrund.
Persönlicher Hinweis: Fossify Contacts war auch sehr gut, hatte aber beim Test einen entscheidenden Nachteil. Fossify hat einen neue Kalender als Standard hinzugefügt. Ich konnte meine Nextcloud Kontakte sehen, aber nicht erweitern oder editieren. Auch konnte ich neuen Kalender nicht mit Nextcloud synchronisieren. Den Standard Kalender konnte man leider nicht löschen oder auf den Nextcloud Kalender umstellen. Daher habe ich mich für Etar Calendar entschieden. Fossify etwas schöner im Aufbau, aber Etar ist funktionaler.
Empfehlung zu Notes. Erst auf dem Server die App Notes installieren und
Auf dem Nextcloud Server aktivieren: Notes
Weiter Empfehlungen: Login notes
5.2 Interessantes für Caddy
21sats.net { respond "Hallo 21sats 🧡" } test.21sats.net { redir https://google.de }
5.3 Ich möchte..
In der Android App
Die App immer laufen lassen: App > App-Info > Berechtigung > App-Verhalten bei Nichtnutzung verwalten => „deaktivieren“
Auf Fossify: Einstellungen > Anzuzeigende Kontakte (Alle Kontakte oder Anpassen) -> Jedes Konto hat anscheinend eigenen Kontakte
Ein Standard Konto für neue Kontakte einstellen: Kontakte App > Einstellungen > Standard Gerät für neue Kontakte
Meine Konten sehen: Einstellungen > Passwörter, Passkeys & Konten > 2x DAVx5 ist normal, einmal explizit für Kontakte
Ordner synchronisieren: Nextcloud App > Einstellungen > Synchronisieren
Auf dem Nextcloud Server
Nach Apps suchen: Profilbild > Apps > Ihre Apps > Oben rechts auf „Suche“ > Dort den Begriff eingeben und nicht auf „Überall Suchen“ oder „Einheitliche Suche“ gehen.
temp
5.3 Referenzen
Nextcloud auf VPS installieren: Anleitung mit Docker
Docker Nextcloud Setup auf einem VPS: So wird’s ENDLICH schnell! 🚀
6. Option: Nextcloud und Pakete über Docker installieren (nicht empfehlenswert)
Nextcloud wird in diesem Tutorial direkt mit MariaDB, Redis und Cron eingerichtet. Zunächst werden jedoch zwei Docker-Netzwerke erstellt: eines für die Kommunikation zwischen Caddy und Nextcloud (proxy
) und eines für Cron, MariaDB und Nextcloud (internal
).
sudo docker network create proxy && sudo docker network create internal
Ordner und yml-Dateien anlegen:
mkdir -p nextcloud/{data,db,redis} touch nextcloud/docker-compose.yml
docker-compose.yml
-Datei bearbeiten:
networks: proxy: external: true name: proxy internal: external: false services: nextcloud: container_name: nextcloud image: nextcloud restart: always volumes: - ./data:/var/www/html/ networks: - proxy - internal environment: - MYSQL_HOST=db - MYSQL_DATABASE=nextcloud - MYSQL_USER=nextcloud - MYSQL_PASSWORD=nextcloud_password - REDIS_HOST=redis - PHP_UPLOAD_LIMIT=10G - OVERWRITEPROTOCOL=https - TRUSTED_PROXIES=172.18.0.0/12 depends_on: - db - redis cron: container_name: nextcloud-cron image: nextcloud restart: unless-stopped volumes: - ./data:/var/www/html/ networks: - internal entrypoint: /cron.sh depends_on: - db - redis db: container_name: nextcloud-db image: mariadb:11.4 restart: unless-stopped command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW volumes: - ./db:/var/lib/mysql networks: - internal environment: - MYSQL_ROOT_PASSWORD=root_password - MYSQL_DATABASE=nextcloud - MYSQL_USER=nextcloud - MYSQL_PASSWORD=nextcloud_password redis: container_name: nextcloud-redis image: redis:7 restart: unless-stopped cap_add: - SYS_RESOURCE user: "1000:1000" volumes: - ./redis:/data networks: - internal
-> Die user ID für Redis bekommt man mit dem Befehl: id
-> Den IP-Kreis für TRUSTED_PROXIES: sudo docker network inspect proxy
Nextcloud Container installieren und starten:
sudo docker compose -f nextcloud/docker-compose.yml up -d
-> Falls die Container nicht starten: sudo docker logs nextcloud
Erstellt mit Liebe 🧡 – Block 876892 / tbd
– Lightning ⚡ (er)leben –
Value 4 Value
axelhamburch@ereignishorizont.xyz