Installation von Nextcloud auf einem Ubuntu Server 26.04 LTS mit Docker
Nextcloud Docker-Setup mit statischen 6x CIFS-Mounts
Diese Anleitung beschreibt die Installation von Nextcloud auf einem Ubuntu Server 26.04 LTS mit Docker. Sie umfasst die Einrichtung einer MariaDB-Datenbank, Redis für Caching, Nextcloud selbst mit externen CIFS-Mounts für Speicher und Nginx Proxy Manager für HTTPS.
Voraussetzungen
Ubuntu Server 26.04 LTS (Download: https://cdimage.ubuntu.com/ubuntu-server/daily-live/current/) Root-Zugriff oder sudo-Rechte Eine statische IP-Adresse für den Server Externe SMB/CIFS-Shares (z. B. von einem NAS) mit IP-Adresse, Benutzername und Passwort DuckDNS-Konto für Dynamic DNS (optional, für externe Zugriffe)
Schritt 1: System-Update und Paket-Installation
Nach der Installation des Ubuntu Servers booten Sie das System und führen folgende Befehle aus:
sudo apt update && sudo apt upgrade -y && sudo reboot
Nach dem Neustart installieren Sie die notwendigen Pakete für CIFS und Docker:
sudo apt install cifs-utils samba samba-client -y
Installieren Sie Docker und Docker Compose (offizielle Methode):
sudo apt update
sudo apt 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
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 update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
Fügen Sie Ihren Benutzer der Docker-Gruppe hinzu und testen Sie:
sudo usermod -aG docker $USER
newgrp docker
docker ps -a
Schritt 2: Verzeichnisse und Konfigurationsdateien erstellen
Erstellen Sie ein Verzeichnis für Nextcloud:
sudo mkdir -p /opt/nextcloud
cd /opt/nextcloud
Erstellen Sie eine .env-Datei für sensible Daten (z. B. Passwörter). Ersetzen Sie die Platzhalter durch starke Passwörter (32 Zeichen, a-Z, 0-9):
sudo nano .env
Inhalt der .env-Datei:
MYSQL_ROOT_PASSWORD=IhrStarkesRootPasswortHier
MYSQL_PASSWORD=IhrStarkesDbPasswortHier
NEXTCLOUD_ADMIN_USER=admin
NEXTCLOUD_ADMIN_PASSWORD=IhrAdminPasswortHier
Erstellen Sie die docker-compose.yml-Datei:
sudo nano docker-compose.yml
Inhalt der docker-compose.yml:
services:
db:
image: mariadb:lts
container_name: nextcloud_db
restart: always
command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW
volumes:
- db_data:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
healthcheck:
test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
interval: 10s
timeout: 5s
retries: 3
redis:
image: redis:alpine
container_name: nextcloud_redis
restart: always
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 3
app:
image: nextcloud:latest
container_name: nextcloud_app
restart: always
ports:
"8080:80"
depends_on:
db:
condition: service_healthy
redis:
condition: service_healthy
volumes:
nextcloud_data:/var/www/html
- cifs_volume1:/mnt/share1
- cifs_volume2:/mnt/share2
- cifs_volume3:/mnt/share3
- cifs_volume4:/mnt/share4
- cifs_volume5:/mnt/share5
- cifs_volume6:/mnt/share6
environment:
MYSQL_HOST=db
MYSQL_PASSWORD=${MYSQL_PASSWORD}
MYSQL_DATABASE=nextcloud
MYSQL_USER=nextcloud
REDIS_HOST=redis
NEXTCLOUD_ADMIN_USER=${NEXTCLOUD_ADMIN_USER}
NEXTCLOUD_ADMIN_PASSWORD=${NEXTCLOUD_ADMIN_PASSWORD}
NEXTCLOUD_TRUSTED_DOMAINS=localhost IhreDomain.duckdns.org
Empfohlen für Performance:
PHP_MEMORY_LIMIT=4096M
PHP_UPLOAD_LIMIT=40G
volumes:
db_data:
nextcloud_data:
cifs_volume1:
driver: local
driver_opts:
type: cifs
device: //IP_ADRESSE/share1
o: username=IhrBenutzername,password=IhrPasswort,addr=IP_ADRESSE
cifs_volume2:
driver: local
driver_opts:
type: cifs
device: //IP_ADRESSE/share2
o: username=IhrBenutzername,password=IhrPasswort,addr=IP_ADRESSE
cifs_volume3:
driver: local
driver_opts:
type: cifs
device: //IP_ADRESSE/share3
o: username=IhrBenutzername,password=IhrPasswort,addr=IP_ADRESSE
cifs_volume4:
driver: local
driver_opts:
type: cifs
device: //IP_ADRESSE/share4
o: username=IhrBenutzername,password=IhrPasswort,addr=IP_ADRESSE
cifs_volume5:
driver: local
driver_opts:
type: cifs
device: //IP_ADRESSE/share5
o: username=IhrBenutzername,password=IhrPasswort,addr=IP_ADRESSE
cifs_volume6:
driver: local
driver_opts:
type: cifs
device: //IP_ADRESSE/share6
o: username=IhrBenutzername,password=IhrPasswort,addr=IP_ADRESSE
Hinweis: Entkommentieren Sie die CIFS-Volumes im app-Service, wenn Sie sie nutzen möchten. Ersetzen Sie IP_ADRESSE, IhrBenutzername und IhrPasswort durch Ihre Werte.
Schritt 3: Nextcloud starten
docker compose up -d
Öffnen Sie http://IhreServerIP:8080 in einem Browser. Die Installation startet automatisch mit den in .env definierten Werten. Melden Sie sich als Admin an.
Schritt 4: DuckDNS für Dynamic DNS (optional)
Registrieren Sie sich bei DuckDNS und erstellen Sie eine Subdomain (z. B. IhreDomain.duckdns.org).
Installieren Sie einen DuckDNS-Client, z. B. via Docker:
Erstellen Sie ein separates Verzeichnis:
sudo mkdir -p /opt/duckdns
cd /opt/duckdns
sudo nano docker-compose.yml
Inhalt:
services:
duckdns:
image: lscr.io/linuxserver/duckdns:latest
container_name: duckdns
environment:
- TZ=Europe/Berlin
- SUBDOMAINS=IhreDomain
- TOKEN=IhrDuckDNSToken
restart: unless-stopped
Starten:
docker compose up -d
Schritt 5: Nginx Proxy Manager für HTTPS
Erstellen Sie ein Verzeichnis für NPM:
sudo mkdir -p /opt/npm
cd /opt/npm
sudo nano docker-compose.yml
Inhalt:
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: always
environment:
TZ: "Europe/Berlin"
ports:
- '80:80'
- '81:81'
- '443:443'
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
Starten:
docker compose up -d
Öffnen Sie http://IhreServerIP:81 und loggen Sie sich ein (Standard: admin@example.com / changeme). Ändern Sie das Passwort. Fügen Sie einen Proxy-Host hinzu: Subdomain (z. B. nextcloud.IhreDomain.duckdns.org) → localhost:8080. Aktivieren Sie SSL mit Let's Encrypt.
Schritt 6: Nextcloud-Konfiguration anpassen
Fügen Sie trusted_domains in der config.php hinzu (nach Proxy-Setup):
sudo -s
nano /var/lib/docker/volumes/nextcloud_nextcloud_data/_data/config/config.php
Fügen Sie hinzu:
'trusted_domains' =>
array (
0 => 'localhost',
1 => 'IhreServerIP',
2 => 'nextcloud.IhreDomain.duckdns.org',
),
Speichern und starten Sie den Nextcloud-Container neu:
docker compose restart app
Hinweise
Sicherheit: Verwenden Sie starke Passwörter und aktivieren Sie 2FA in Nextcloud.
Backup: Sichern Sie regelmäßig die Docker-Volumes.
Fehlerbehebung: Überprüfen Sie Logs mit docker logs nextcloud_app.
Diese Anleitung ist für den 02. Januar 2026 aktualisiert und basiert auf aktuellen Versionen.