Ereignishorizont
Nextcloud

Nextcloud

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 nextcloud.yourdomain.com 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.

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

Nextcloud: GitHub / F-Droid

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