Nextcloud ist ein sehr populärer freier, selbst-hostbarer Cloudservice, für das Speichern von Daten (z. B. Dateien, Kalender, Kontakte etc.) auf einem Server.
Der Server benötigt dafür den Dienst keine großen Ressourcen und kann deshalb ein kleiner Einplatinenrechner, wie der Raspberry Pi, sein. Die Installation von Nextcloud mit Hilfe von Docker Images ist relativ einfach umzusetzen, was die Einsatzmöglichkeiten und die Flexibilität noch erhöhen.
In diesem Beitrag wird Nextcloud und die notwendigen Tools ausschließlich mit Docker Containern installiert und konfiguriert.
Als Hardware für die eigene Nextcloud kann z.B. verwendet werden:
- Raspberry Pi
- openmediavault
- Synology Disk Station
- QNAP
- jeder andere Rechner, auf dem Docker lauffähig ist
Normale Nextcloud-Installation
Die Nextcloud lässt sich ganz normal auf einem kleinen Server, wie dem Raspberry Pi installieren.
➡ Schritt-für-Schritt zur eigenen Nextcloud
➡ Nextcloud mit Ansible installieren und konfigurieren
Nextcloud auf einer Synology Disk Station
Nextcloud lässt sich auch mit einem Mischmasch aus Docker Container und Synology Diensten installieren.
➡ Nextcloud auf einem Synology NAS installieren
Die bessere Option ist jedoch die Installation ausschließlich mit Docker Container durchzuführen.
Nextcloud mit Docker Container installieren
Diese Option ist eine sehr flexible Möglichkeit der Nextcloud-Installation. Mit Hilfe von Docker Containern lässt sich der Service fast überall installieren. Zudem ist der gesamte Updateprozess einfacher, einfach neues Image einspielen und fertig. Das Gefrickel und Fehlersuche, die manchmal bei einem Update notwendig ist, entfällt.
➡ openmediavault mit Docker und Portainer
➡ Docker Installation auf einem Raspberry Pi
➡ Gitea Installation via Docker auf einer Synology Disk Station
Gib mir gerne einen Kaffee ☕ aus!
Wenn dir meine Beiträge gefallen und geholfen haben, dann kannst du mir gerne einen Kaffee ☕ ausgeben.
bc1qfuz93hw2fhdvfuxf6mlxlk8zdadvnktppkzqzj
Docker Dateien
Die notwendigen Dateien sind nachfolgend aufgeführt. Eine Beschreibung zur Verwendung ist in diesem Beitrag zu finden
➡ Gitea Installation via Docker auf einer Synology Disk Station
Die Ordner werden auf dem Host-System benötigt und sind in der nextcloud.env referenziert:
# Hauptordner erstellen sudo mkdir /volume1/docker/nextcloud/ cd /volume1/docker/nextcloud/ # Ordner erstellen sudo mkdir NEXTCLOUD_DIRECTORY_HTML sudo mkdir NEXTCLOUD_DIRECTORY_CONFIG sudo mkdir NEXTCLOUD_DIRECTORY_THEMES sudo mkdir NEXTCLOUD_DIRECTORY_SKELETON sudo mkdir REDIS_CACHE sudo mkdir secrets # oder alle Ordner mit einem Befehl erstellen sudo mkdir /volume1/docker/nextcloud/{NEXTCLOUD_DIRECTORY_HTML,NEXTCLOUD_DIRECTORY_CONFIG,NEXTCLOUD_DIRECTORY_THEMES,NEXTCLOUD_DIRECTORY_SKELETON,REDIS_CACHE,secrets}
docker-nextcloud-postgres-secret.yml
version: '3.8' services: db: image: postgres container_name: ${CONTAINER_NAME_POSTGRES} restart: always networks: - nextcloud volumes: - /volume1/docker/ims-nextcloud/NEXTCLOUD_DIRECTORY_DB:/var/lib/postgresql/data environment: - POSTGRES_DB_FILE=/run/secrets/postgres_db - POSTGRES_USER_FILE=/run/secrets/postgres_user - POSTGRES_PASSWORD_FILE=/run/secrets/postgres_password secrets: - postgres_db - postgres_password - postgres_user app: image: nextcloud container_name: ${CONTAINER_NAME_NEXTCLOUD} restart: always networks: - nextcloud ports: - ${NEXTCLOUD_PORT}:80 volumes: - ${NEXTCLOUD_DIRECTORY_HTML}:/var/www/html - ${NEXTCLOUD_DIRECTORY_CONFIG}:/var/www/html/config - ${NEXTCLOUD_DIRECTORY_THEMES}:/var/www/html/themes/ #- ${NEXTCLOUD_DIRECTORY_SKELETON}:/var/www/html/data/skeleton environment: - POSTGRES_HOST=db - POSTGRES_DB_FILE=/run/secrets/postgres_db - POSTGRES_USER_FILE=/run/secrets/postgres_user - POSTGRES_PASSWORD_FILE=/run/secrets/postgres_password - NEXTCLOUD_ADMIN_PASSWORD_FILE=/run/secrets/nextcloud_admin_password - NEXTCLOUD_ADMIN_USER_FILE=/run/secrets/nextcloud_admin_user - NEXTCLOUD_TRUSTED_DOMAINS=${NEXTCLOUD_TRUSTED_DOMAINS} - REDIS_HOST=${CONTAINER_NAME_REDIS} - REDIS_HOST_PORT=${REDIS_PORT} - REDIS_HOST_PASSWORD=${REDIS_PASSWORD} - PHP_MEMORY_LIMIT=${PHP_MEMORY_LIMIT} - PHP_UPLOAD_LIMIT=${PHP_UPLOAD_LIMIT} - MTP_HOST=${MTP_HOST} # The hostname of the SMTP server. - SMTP_SECURE=${SMTP_SECURE} # Set to ssl to use SSL, or tls to use STARTTLS. - SMTP_PORT=${SMTP_PORT} # Optional port for the SMTP connection. Use 587 for an alternative port for STARTTLS. - SMTP_AUTHTYPE=${SMTP_AUTHTYPE} # The method used for authentication. Use PLAIN if no authentication is required. - SMTP_NAME_FILE=/run/secrets/nextcloud_smtp_name # The username for the authentication. - SMTP_PASSWORD_FILE=/run/secrets/nextcloud_smtp_password # The password for the authentication. - MAIL_FROM_ADDRESS=${MAIL_FROM_ADDRESS} # Use this address for the 'from' field in the emails sent by Nextcloud. - MAIL_DOMAIN=${MAIL_DOMAIN} # Set a different domain for the emails than the domain where Nextcloud is installed. depends_on: - db - cache secrets: - postgres_db - postgres_password - postgres_user - nextcloud_admin_password - nextcloud_admin_user - nextcloud_smtp_name - nextcloud_smtp_password cache: image: redis container_name: ${CONTAINER_NAME_REDIS} restart: always networks: - nextcloud #ports: # - ${REDIS_PORT}:6379 command: redis-server --save 20 1 --loglevel warning --requirepass ${REDIS_PASSWORD} volumes: - ${REDIS_CACHE}:/data adminer: image: adminer container_name: ${CONTAINER_NAME_ADMINER} restart: always networks: - nextcloud ports: - ${ADMINER_PORT}:8080 volumes: db: nextcloud: cache: driver: local networks: nextcloud: driver: bridge secrets: nextcloud_admin_password: file: ${SECRETS_DIRECTORY}/nextcloud_admin_password.txt # put admin password in this file nextcloud_admin_user: file: ${SECRETS_DIRECTORY}/nextcloud_admin_user.txt # put admin username in this file nextcloud_smtp_name: file: ${SECRETS_DIRECTORY}/nextcloud_smtp_name.txt # put SMTP password in this file nextcloud_smtp_password: file: ${SECRETS_DIRECTORY}/nextcloud_smtp_password.txt # put SMTP password in this file nextcloud_redis_password: file: ${SECRETS_DIRECTORY}/nextcloud_redis_password.txt # put redis password in this file postgres_db: file: ${SECRETS_DIRECTORY}/postgres_db.txt # put postgresql db name in this file postgres_password: file: ${SECRETS_DIRECTORY}/postgres_password.txt # put postgresql password in this file postgres_user: file: ${SECRETS_DIRECTORY}/postgres_user.txt # put postgresql username in this file
nextcloud.env
CONTAINER_NAME_NEXTCLOUD=nextcloud CONTAINER_NAME_POSTGRES=nextcloud-db-postgres CONTAINER_NAME_REDIS=nextcloud-redis CONTAINER_NAME_ADMINER=nextcloud-adminer NEXTCLOUD_TRUSTED_DOMAINS=192.168.178.34 NEXTCLOUD_PORT=3004 REDIS_PORT=6379 ADMINER_PORT=8082 NEXTCLOUD_DIRECTORY_HTML=/volume1/docker/nextcloud/NEXTCLOUD_DIRECTORY_HTML NEXTCLOUD_DIRECTORY_CONFIG=/volume1/docker/nextcloud/NEXTCLOUD_DIRECTORY_CONFIG NEXTCLOUD_DIRECTORY_THEMES=/volume1/docker/nextcloud/NEXTCLOUD_DIRECTORY_THEMES NEXTCLOUD_DIRECTORY_SKELETON=/volume1/docker/nextcloud/NEXTCLOUD_DIRECTORY_SKELETON PHP_MEMORY_LIMIT=1024M PHP_UPLOAD_LIMIT=512M MTP_HOST=smtp.office365.com SMTP_SECURE=tls SMTP_PORT=587 SMTP_AUTHTYPE=login MAIL_FROM_ADDRESS=benutzername@mail.onmicrosoft.com MAIL_DOMAIN=smtp.office365.com REDIS_CACHE=/volume1/docker/nextcloud/REDIS_CACHE REDIS_PASSWORD=password12345 SECRETS_DIRECTORY=/volume1/docker/nextcloud/secrets
Gib mir gerne einen Kaffee ☕ aus!
Wenn dir meine Beiträge gefallen und geholfen haben, dann kannst du mir gerne einen Kaffee ☕ ausgeben.
bc1qfuz93hw2fhdvfuxf6mlxlk8zdadvnktppkzqzj
Ab hier gehören die Dateien alle in den Ordner /volume1/docker/nextcloud/secrets.
secrets/nextcloud_admin_password.txt
password
secrets/nextcloud_admin_user.txt
adminnextcloud
secrets/nextcloud_redis_password.txt
password
secrets/nextcloud_smtp_name.txt
benutzername@mail.onmicrosoft.com
secrets/nextcloud_smtp_password.txt
password
secrets/postgres_db.txt
nextcloud
secrets/postgres_password.txt
dbpassword
secrets/postgres_user.txt
nextcloud
Photo by Paul Teysen on Unsplash
ist absolut technik-begeistert und großer Fan von Linux und Open Source. Raspberry Pi Bastler der ersten Stunde und nach wie vor begeistert von dem kleinen Stück Hardware, auf dem er tolle Projekte umsetzt. Teilt hier seine Erfahrungen mit Nextcloud, Pi-hole, YubiKey, Synology und openmediavault und anderen spannenden IT-Themen. Nutzt Markdown und LaTeX zum Dokumentieren seiner Projekte und Gitea zum Versionieren. Sitzt vor einem 49“ Monitor, nutzt Windows und MacOS zum Arbeiten, Linux auf seinen Servern und virtuellen Maschinen und hört dabei Spotify und MP3s und Radio-Streams über seinen RadioPi.
Hallo Stefan,
in der Anleitung von Nextcloud steht, dass man die Zeile:
–volume /var/run/docker.sock:/var/run/docker.sock:ro
für DSM wie folgt ändern soll:
–volume /volume1/docker/docker.sock:/var/run/docker.sock:ro
Du hast das anscheinend anders gemacht, kannst du darauf eingehen, warum? Ich möchte verstehen, was dieses docker.sock ist bzw. macht.
Bei der Installation von Portainer spielte das /var/run/docker.sock auch eine Rolle.
Ich hatte das nach der NC Anleitung versucht, aber bei mir gibt es den Ordner bzw. die Datei nicht. Allerdings frage ich mich, wie es dann beim Portainer geklappt hat.
Ich beziehe mich auf die Anleitung:
https://github.com/nextcloud/all-in-one#how-to-use-this
und die Anmerkung für DSM:
https://github.com/nextcloud/all-in-one#how-to-run-aio-on-synology-dsm
Hallo Jochen,
mithilfe des Volumens-Befehl sagst du deinem Docker-Image wo es die Daten auf dem Host ablegen soll.
Bei Nextcloud sind diese Daten z.B. die Datenbank, Daten-Verzeichnis, Skeleton-Verzeichnis und der gesamte Ordner mit den Konfigurationsdateien (/var/www/html/nextcloud)
https://docs.docker.com/storage/volumes/
Hoffe das hift dir weiter.
Viel Erfolg!
Stefan
Danke, das erscheint mir jetzt einfacher, als in der NC Anleitung.
Ich habe deine Anleitung Fast 1:1 kopiert und es läuft auch. Einfacher, als die Installation direkt im DSM.
Du hast für NC Port 80 definiert, ich bekomme beim Sicherheitsscan angezeigt, dass die Verbindung über HTTP läuft. Mit 443, 8443 oder 8080 bekomme ich aber keine Verbindung mehr. Kannst du mir dazu noch helfen?
Noch eine Frage:
Ich habe anhand deiner älteren Anleitung NC auf DSM laufen. Mit MariaDB und phpMyAdmin. Der letzte Updateversuch ist gescheitert, jetzt möchte am liebsten einfach auf die Docker Lösung umziehen. Aber natürlich die Daten, Benutzer etc. alle mitnehmen.
Damals gab es einen Daten und einen Web Ordner, jetzt gibt es mehr und es ist eine andere Datenbank.
Was ist hier geschickt, was funktioniert und was nicht?
Hallo Jochen,
Du kannst dir über einen Reverse Proxy sehr einfach Zertifikate von Let’s Encrypt holen und damit eine sichere Verbindung zu deiner Nextcloud-Installation herstellen.
Es gibt z.B. die beiden Tools, die du ebenfalls in einer Docker managen kannst.
– https://docs.nginx.com/nginx/admin-guide/web-server/reverse-proxy/
– https://doc.traefik.io/traefik/getting-started/quick-start/
Der Umzug von einer Nextcloud-Installation zu der Docker-Umgebung sollte eigentlich relativ einfach sein.
1. Du legst dir einen Dump deiner MariaDB an
2. Du erstellst für die wichtigen Verzeichnisse deiner bestehenden Nextcloud ein Backup (config, data, etc.)
3. Du kopierst alles auf deinen Docker-Host und zwar genau an die Stelle, die du in der „nextcloud.env“ referenziert hast.
4. Du startest deinen Docker mit deinen bestehenden Nextcloud-Daten
Eine Schritt-für-Schritt-Anleitung zur Installation der Nextcloud findest du in meinem git Repository
–> https://codeberg.org/strobelstefan.org/nextcloud-installation-configuration
Dort findest du auch eine Anleitung, wie du deine Nextcloud auf einem Backup wiederherstellen kannst.
–> https://codeberg.org/strobelstefan.org/nextcloud-installation-configuration/src/branch/main/nextcloud-recovery.md
Ich hoffe das hilft dir weiter.
Viel Erfolgt!
Stefan
Ja, danke für die Tipps. Ich habe auch deine Anleitung zum Recovery gesehen.
Für Docker hast du ja die Anleitung mit Postgres und Redis (keine Ahnung, was Redis ist).
In der Docker-Anleitung sind wesentlich mehr Ordner. In der alten Anleitung zur direkten Installation auf Synology gab es den Web Ordner, Daten und die Datenbank.
Jetzt weiß ich nicht, in welchen Ordner ich das Backup zurück gehört.
Vermutlich sind in meinen beiden Ordnern Dateien, die sich jetzt auf mehrere Ordner aufteilen.
Andere machen die Docker Installation it einem einzigen Ordner. Ich weiß nicht, was ich tatsächlich alles lokal anlegen muss. Da steig ich nicht durch.
Hallo Jochen,
die hier vorgestellte Dockerinstallation ist sehr umfangreich.
Du kannst das Ganze auch abspecken und Nextcloud in einen einzigen Ordner installieren.
Ich fand es aber ganz hilfreich die einzelnen Ordner zu haben, da der Backup-Prozess für mich einfacher und flexibler wurde.
Wie viele Ordner du zum Schluss nutzen möchtest ist dir überlassen. Du hast also die Qual der Wahl.
Vielleicht hilft es dir eine Schritt-für-Schritt-Anleitung für die Nextcloud, um ein besseres Verständnis der einzelnen Komponenten und der Zusammenhänge zu erhalten.
Schau dir mal bei Interesse meine Anleitung auf codeberg.org an:
https://codeberg.org/strobelstefan.org/nextcloud-installation-configuration
Viel Erfolg!
Stefan