💡 Hinweis: Dieses Tutorial setzt voraus, dass du einen normalen Benutzer mit sudo-Rechten verwendest — wie im Tutorial Debian 13 Server absichern beschrieben. Außerdem solltest du Nginx installiert haben.
Einleitung — Warum Nextcloud from scratch?
Wer eine eigene Cloud will, kennt den Klassiker: Google Drive und Dropbox sind bequem, aber eure Daten liegen auf fremden Servern. Nextcloud ist die führende Open-Source-Alternative — Dateisync, Kalender, Kontakte, Office, Chat, alles selbst gehostet.
Es gibt zwei Wege, Nextcloud zu installieren: Docker (AIO) oder Bare-Metal. Docker ist schneller eingerichtet, aber für Produktiv-Setups mit hoher Last und vielen Nutzern empfehlen die Nextcloud-Entwickler selbst die klassische Installation. Du bekommst maximale Performance, vollständige Kontrolle über jede Komponente und kannst gezielt tunen.
Wir installieren Nextcloud daher klassisch auf Nginx + PHP 8.3-FPM + MariaDB + Redis. Das ist unter Self-Hostern der beliebteste Stack — Nginx ist schlanker und schneller als Apache, vor allem bei vielen parallelen Verbindungen.
Was wir aufbauen
- Nginx als Webserver — schlank, schnell, optimiert für hohe Concurrency
- PHP 8.3-FPM mit allen nötigen Modulen
- MariaDB 11 als Datenbank
- Redis für File-Locking und Memory-Cache
- APCu als lokaler Memory-Cache
- Let’s Encrypt SSL mit automatischer Erneuerung
- Cron-basierte Background-Jobs (statt AJAX)
Hardware-Empfehlung
| Nutzer | RAM | CPU | Storage |
|---|---|---|---|
| 1-5 | 2 GB | 2 Cores | 20 GB + Daten |
| 5-20 | 4 GB | 2 Cores | 50 GB + Daten |
| 20-100 | 8 GB | 4 Cores | 100 GB + Daten |
| 100+ | 16 GB+ | 8 Cores+ | nach Bedarf |
In diesem Guide richten wir Nextcloud von Grund auf ein — von der Stack-Installation über Performance-Tuning bis zum ersten Login.
Voraussetzungen
Bevor wir starten, braucht ihr:
- Einen Debian 13 (Trixie) Server — Eingerichtet nach unserem Debian 13 Server-Guide
- Nginx installiert — siehe unser Nginx-Tutorial
- Mindestens 2 GB RAM (4 GB empfohlen)
- Mindestens 20 GB Speicher (mehr für Nutzer-Daten)
- Eine Domain (z.B.
cloud.example.com) certbotinstalliert für SSL — siehe Let’s Encrypt Tutorial- Ports 80 und 443 offen
Firewall-Ports öffnen
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw statusDNS vorbereiten
Typ: A
Name: cloud
Wert: EURE-SERVER-IP
TTL: 3600Auflösung prüfen:
dig +short cloud.example.comSchritt 1: System aktualisieren
sudo apt update && sudo apt upgrade -yWir installieren noch ein paar Tools, die wir gleich brauchen:
sudo apt install -y curl wget unzip sudo gnupg2 lsb-release ca-certificatesSchritt 2: Nginx-Installation prüfen
Falls Nginx noch nicht läuft (siehe Nginx-Tutorial):
sudo apt install -y nginx
sudo systemctl enable --now nginxStatus prüfen:
sudo systemctl status nginxIm Browser http://EURE-SERVER-IP aufrufen — sollte die Nginx-Default-Seite zeigen.
Schritt 3: PHP 8.3 mit allen Modulen installieren
Debian 13 bringt PHP 8.4 mit, aber Nextcloud ist offiziell für PHP 8.3 zertifiziert. Wir nutzen das Sury-Repository für 8.3
curl -sSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb
sudo dpkg -i /tmp/debsuryorg-archive-keyring.deb
echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php.list
sudo apt update💡 Hinweis: Falls ihr PHP 8.4 nutzen wollt (in Debian 13 Standard): Nextcloud 30+ unterstützt 8.4 offiziell. Tauscht in den folgenden Befehlen einfach
8.3gegen8.4— der Rest bleibt identisch. Wir bleiben hier bei 8.3 als bewährter Kombination.
Jetzt PHP 8.3-FPM inklusive aller nötigen Extensions:
sudo apt install -y php8.3-fpm php8.3-cli php8.3-common php8.3-curl php8.3-gd \
php8.3-mbstring php8.3-mysql php8.3-xml php8.3-zip php8.3-bz2 \
php8.3-intl php8.3-bcmath php8.3-gmp php8.3-imagick php8.3-redis \
php8.3-apcu php8.3-opcache php8.3-ldap php8.3-imap php8.3-smbclient \
libmagickcore-6.q16-6-extraPHP-FPM aktivieren:
sudo systemctl enable --now php8.3-fpm
sudo systemctl status php8.3-fpmTestet PHP:
php -vIhr solltet PHP 8.3.x sehen.
Schritt 4: PHP-Performance tunen
Die Standard-PHP-Werte sind für Nextcloud zu niedrig. Wir passen sie für FPM an.
php.ini anpassen
sudo nano /etc/php/8.3/fpm/php.iniSucht und setzt diese Werte:
memory_limit = 512M
upload_max_filesize = 16G
post_max_size = 16G
max_execution_time = 3600
max_input_time = 3600
output_buffering = 0
date.timezone = Europe/Berlin
opcache.enable = 1
opcache.interned_strings_buffer = 32
opcache.max_accelerated_files = 10000
opcache.memory_consumption = 256
opcache.save_comments = 1
opcache.revalidate_freq = 60
opcache.jit = 1255
opcache.jit_buffer_size = 128M⚠️ Wichtig:
upload_max_filesizeundpost_max_sizemüssen identisch sein, sonst lehnt PHP große Uploads ab. Stellt sie auf das, was eure Nutzer maximal hochladen sollen.
PHP-FPM Pool tune
sudo nano /etc/php/8.3/fpm/pool.d/www.confSucht und setzt:
pm = dynamic
pm.max_children = 120
pm.start_servers = 12
pm.min_spare_servers = 6
pm.max_spare_servers = 18
pm.max_requests = 500
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp💡 Tipp:
pm.max_childrenskaliert mit RAM. Faustregel:(verfügbarer-RAM-für-PHP-in-MB) / 30. Bei 4 GB freiem RAM also ca. 120-130 Children. Bei kleinen Servern (1 GB RAM) reduziert auf 30-40.
PHP-FPM neu starten:
sudo systemctl restart php8.3-fpmSchritt 5: MariaDB installieren und absichern
sudo apt install -y mariadb-server mariadb-client
sudo systemctl enable --now mariadbSicherheits-Setup ausführen:
sudo mariadb-secure-installationAntwortet:
- Switch to unix_socket authentication? →
n - Change root password? →
n(bleibt auf Unix-Socket) - Remove anonymous users? →
y - Disallow root login remotely? →
y - Remove test database? →
y - Reload privilege tables? →
y
Datenbank für Nextcloud anlegen
sudo mariadbIn der MariaDB-Shell:
CREATE DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE USER 'nextcloud'@'localhost' IDENTIFIED BY 'EUER_SICHERES_PASSWORT';
GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextcloud'@'localhost';
FLUSH PRIVILEGES;
EXIT;⚠️ Wichtig: Generiert ein wirklich starkes Passwort (z.B. mit
openssl rand -base64 32). Notiert es euch — wir brauchen es gleich beim Nextcloud-Setup.
MariaDB für Nextcloud optimieren
sudo nano /etc/mysql/mariadb.conf.d/90-nextcloud.cnfInhalt:
[mysqld]
transaction_isolation = READ-COMMITTED
binlog_format = ROW
innodb_large_prefix = 1
innodb_file_format = barracuda
innodb_file_per_table = 1
innodb_buffer_pool_size = 1G
innodb_log_file_size = 256M
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci💡 Tipp:
innodb_buffer_pool_sizesolltet ihr auf ca. 50% eures verfügbaren RAMs setzen — bei 4 GB RAM also 2 GB. Das beschleunigt Datenbankzugriffe massiv
sudo systemctl restart mariadbSchritt 6: Redis installieren
Redis übernimmt File-Locking und Memory-Cache — essentiell für Multi-User-Setups.
sudo apt install -y redis-server
sudo systemctl enable --now redis-serverKonfiguration für Nextcloud anpassen:
sudo nano /etc/redis/redis.confSucht und setzt:
maxmemory 256mb
maxmemory-policy allkeys-lru
unixsocket /var/run/redis/redis-server.sock
unixsocketperm 770www-data braucht Zugriff auf den Redis-Socket:
sudo usermod -aG redis www-data
sudo systemctl restart redis-serverSchritt 7: Nextcloud herunterladen
cd /tmp
wget https://download.nextcloud.com/server/releases/latest.zip
unzip latest.zip
sudo mv nextcloud /var/www/
sudo chown -R www-data:www-data /var/www/nextcloud
sudo chmod -R 750 /var/www/nextcloudDaten-Verzeichnis anlegen
Es ist Best Practice, die Nutzerdaten außerhalb des Webroots zu speichern:
sudo mkdir -p /var/nextcloud-data
sudo chown -R www-data:www-data /var/nextcloud-data
sudo chmod 750 /var/nextcloud-dataSchritt 8: Nginx vHost konfigurieren
Das ist der Kern des Setups — eine sorgfältig konfigurierte Nginx-Site für Nextcloud. Die Config orientiert sich an der offiziellen Nextcloud-Doku.
sudo nano /etc/nginx/sites-available/nextcloud.confInhalt:
upstream php-handler {
server unix:/run/php/php8.3-fpm.sock;
}
# HTTP → HTTPS redirect (außer ACME-Challenge)
server {
listen 80;
listen [::]:80;
server_name cloud.example.com;
# Let's Encrypt validation
location /.well-known/acme-challenge/ {
root /var/www/html;
}
location / {
return 301 https://$host$request_uri;
}
}
# Hauptserver — HTTPS
server {
listen 443 ssl;
listen [::]:443 ssl;
http2 on;
server_name cloud.example.com;
# SSL — wird von certbot eingetragen
# ssl_certificate /etc/letsencrypt/live/cloud.example.com/fullchain.pem;
# ssl_certificate_key /etc/letsencrypt/live/cloud.example.com/privkey.pem;
# Sicherheits-Header (HSTS wird per add_header gesetzt)
add_header Strict-Transport-Security "max-age=15552000; includeSubDomains; preload" always;
add_header Referrer-Policy "no-referrer" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Permitted-Cross-Domain-Policies "none" always;
add_header X-Robots-Tag "noindex, nofollow" always;
add_header X-XSS-Protection "1; mode=block" always;
# X-Frame-Options ist überflüssig wenn fastcgi_hide_header gesetzt
fastcgi_hide_header X-Powered-By;
# Document root
root /var/www/nextcloud;
index index.php index.html /index.php$request_uri;
# Maximale Upload-Größe
client_max_body_size 16G;
client_body_timeout 300s;
fastcgi_buffers 64 4K;
# gzip
gzip on;
gzip_vary on;
gzip_comp_level 4;
gzip_min_length 256;
gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
gzip_types application/atom+xml text/javascript application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/wasm application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;
# Pagespeed
pagespeed off;
# WebDAV / CalDAV / CardDAV Redirects
location = /.well-known/carddav { return 301 /remote.php/dav/; }
location = /.well-known/caldav { return 301 /remote.php/dav/; }
location = /.well-known/webfinger { return 301 /index.php$uri; }
location = /.well-known/nodeinfo { return 301 /index.php$uri; }
# ACME-Challenge (für certbot --webroot, falls genutzt)
location ^~ /.well-known {
location = /.well-known/carddav { return 301 /remote.php/dav/; }
location = /.well-known/caldav { return 301 /remote.php/dav/; }
location = /.well-known/webfinger { return 301 /index.php$uri; }
location = /.well-known/nodeinfo { return 301 /index.php$uri; }
try_files $uri $uri/ =404;
}
# Bekannte Pfade blockieren, die niemand erreichen sollte
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location ~ ^/(?:\.htaccess|data|config|db_structure\.xml|README){
deny all;
}
# Hauptlogik
location / {
rewrite ^ /index.php;
}
location ~ ^\/(?:build|tests|config|lib|3rdparty|templates|data)\/ {
deny all;
}
location ~ ^\/(?:\.|autotest|occ|issue|indie|db_|console) {
deny all;
}
location ~ \.php(?:$|\/) {
fastcgi_split_path_info ^(.+?\.php)(\/.*)$;
set $path_info $fastcgi_path_info;
try_files $fastcgi_script_name =404;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $path_info;
fastcgi_param HTTPS on;
fastcgi_param modHeadersAvailable true;
fastcgi_param front_controller_active true;
fastcgi_pass php-handler;
fastcgi_intercept_errors on;
fastcgi_request_buffering off;
fastcgi_read_timeout 3600;
fastcgi_send_timeout 3600;
}
# Statische Assets — aggressives Caching
location ~ \.(?:css|js|svg|gif|png|jpg|ico|wasm|tflite|map|ogg|flac)$ {
try_files $uri /index.php$request_uri;
expires 6M;
access_log off;
}
location ~ \.woff2?$ {
try_files $uri /index.php$request_uri;
expires 7d;
access_log off;
}
# Webcal
location /remote {
return 301 /remote.php$request_uri;
}
location / {
try_files $uri $uri/ /index.php$request_uri;
}
# Logs
access_log /var/log/nginx/nextcloud.access.log;
error_log /var/log/nginx/nextcloud.error.log;
}⚠️ Wichtig: Die obige Config ist umfangreich, aber jeder Block ist wichtig. Die
location ~ \.php(?:$|\/)Sektion mitfastcgi_split_path_infoist essentiell — Nextcloud braucht das für interne URL-Routing. Vereinfacht das nicht.
Site aktivieren:
sudo ln -s /etc/nginx/sites-available/nextcloud.conf /etc/nginx/sites-enabled/
sudo rm -f /etc/nginx/sites-enabled/default
sudo nginx -t
sudo systemctl reload nginxSSL-Zertifikat holen
sudo certbot --nginx -d cloud.example.comFolgt dem Wizard. Certbot trägt die Zertifikate automatisch in die vHost-Config ein und konfiguriert HTTPS.
✅ Geschafft! Nginx läuft mit HTTPS. Im Browser solltet ihr unter
https://cloud.example.comjetzt die Nextcloud-Setup-Seite sehen.
Schritt 9: Nextcloud Setup-Wizard
Öffnet im Browser:
https://cloud.example.comIm Wizard:
- Admin-Username: Wählt einen Namen, NICHT
admin(Brute-Force-Schutz) - Admin-Passwort: Sehr starkes Passwort
- Datenverzeichnis:
/var/nextcloud-data - Datenbank: MySQL/MariaDB
- DB-User:
nextcloud - DB-Passwort: Das von Schritt 5
- DB-Name:
nextcloud - DB-Host:
localhost:3306
Klickt auf Installation abschließen. Nach 1-2 Minuten landet ihr im Nextcloud-Dashboard.
Schritt 10: Caching aktivieren (Redis & APCu)
Die zentrale Konfigurationsdatei ist /var/www/nextcloud/config/config.php. Wir erweitern sie um Caching
sudo nano /var/www/nextcloud/config/config.phpVor der schließenden ); einfügen:
'memcache.local' => '\OC\Memcache\APCu',
'memcache.locking' => '\OC\Memcache\Redis',
'memcache.distributed' => '\OC\Memcache\Redis',
'redis' => [
'host' => '/var/run/redis/redis-server.sock',
'port' => 0,
'timeout' => 1.5,
],
'default_phone_region' => 'DE',
'maintenance_window_start' => 1,Speichern und PHP-FPM neu laden
sudo systemctl reload php8.3-fpmSchritt 11: Cron statt AJAX einrichten
Nextcloud führt Hintergrund-Jobs (Cleanup, Notifications, Sharing-Sync) aus. Standard: AJAX bei jedem Page-Load — schlecht für Performance. Besser: Cron
sudo crontab -u www-data -eEinfügen:
*/5 * * * * php -f /var/www/nextcloud/cron.phpIm Nextcloud-Dashboard: Einstellungen → Verwaltung → Grundlegende Einstellungen → Hintergrund-Jobs auf Cron umstellen.
Schritt 12: Trusted Domains und HTTPS-Zwang
In config.php sicherstellen, dass eure Domain als trusted_domain steht:
sudo nano /var/www/nextcloud/config/config.ph 'trusted_domains' => [
0 => 'cloud.example.com',
],
'overwrite.cli.url' => 'https://cloud.example.com',
'overwriteprotocol' => 'https',PHP-FPM neu laden:
sudo systemctl reload php8.3-fpmSchritt 13: Sicherheits-Check und Performance-Check
Im Nextcloud-Dashboard: Einstellungen → Verwaltung → Übersicht.
Hier seht ihr Warnungen, falls noch etwas fehlt. Typische Hinweise und ihre Lösungen:
„Letzter Cron-Job ist länger her“
Cron prüfen:
sudo systemctl status cron
sudo grep CRON /var/log/syslog | tail„Memcache ist nicht konfiguriert“
Caching-Config aus Schritt 10 fehlt → ergänzen.
„Module ‚imagick‘ fehlt“
sudo apt install -y php8.3-imagick libmagickcore-6.q16-6-extra
sudo systemctl restart php8.3-fpm„PHP-Module für Vorschau-Generierung fehlen“
sudo apt install -y ffmpeg libreofficeDann in config.php:
'enabledPreviewProviders' => [
'OC\Preview\Image',
'OC\Preview\HEIC',
'OC\Preview\TIFF',
'OC\Preview\Movie',
'OC\Preview\PDF',
'OC\Preview\MarkDown',
'OC\Preview\OpenDocument',
],„Reverse-Proxy-Header X-Forwarded-For“
Mit Nginx als direkter Webserver ist das normal kein Problem. Falls ihr Nextcloud hinter einem zusätzlichen Reverse Proxy (Cloudflare, weiterer Nginx) habt, in config.php:
'trusted_proxies' => ['127.0.0.1', '::1'],
'forwarded_for_headers' => ['HTTP_X_FORWARDED_FOR'],„Pretty URLs sind nicht aktiviert“
Bei Nginx ist das automatisch über die vHost-Config geregelt — die Warnung sollte mit unserer Config nicht erscheinen. Falls doch:
bash
sudo -u www-data php /var/www/nextcloud/occ maintenance:update:htaccessIn config.php:
'htaccess.RewriteBase' => '/',
'overwrite.cli.url' => 'https://cloud.example.com',💡 Tipp: Das
occ-Tool ist euer Schweizer Taschenmesser. Damit könnt ihr Nutzer anlegen, Apps installieren, Reparaturen durchführen, Backups starten — alles über die Kommandozeile.sudo -u www-data php /var/www/nextcloud/occzeigt alle Befehle.
Schritt 14: Erste Nutzer und Apps
Nutzer per CLI anlegen
sudo -u www-data php /var/www/nextcloud/occ user:add --display-name="Max Mustermann" maxIhr werdet nach dem Passwort gefragt.
Wichtige Apps aktivieren
Über die Web-UI: Apps → Featured. Empfehlenswerte Erstausstattung:
- Calendar — CalDAV-Kalender
- Contacts — CardDAV-Adressbuch
- Notes — Markdown-Notizen
- Tasks — Aufgabenliste
- Mail — IMAP-Client
- Talk — Chat & Video
- Deck — Kanban-Board
- Photos — Foto-Galerie
Per CLI installieren:
sudo -u www-data php /var/www/nextcloud/occ app:install calendar
sudo -u www-data php /var/www/nextcloud/occ app:install contacts
sudo -u www-data php /var/www/nextcloud/occ app:install notesBackups
Nextcloud hat drei Datenquellen, die ALLE gesichert werden müssen:
/var/www/nextcloud/config/config.php— Konfiguration/var/nextcloud-data/— Nutzer-Daten- MariaDB-Datenbank
nextcloud
Automatisches Backup-Script
sudo nano /usr/local/bin/nextcloud-backup.shInhalt:
#!/bin/bash
set -e
BACKUP_DIR="/var/backups/nextcloud"
TIMESTAMP=$(date +%Y%m%d-%H%M%S)
RETENTION_DAYS=14
mkdir -p "$BACKUP_DIR"
# Wartungsmodus aktivieren
sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --on
# Datenbank-Dump
mysqldump --single-transaction \
-h localhost -u nextcloud -pEUER_DB_PASSWORT nextcloud \
| gzip > "$BACKUP_DIR/db-$TIMESTAMP.sql.gz"
# Config sichern
tar -czf "$BACKUP_DIR/config-$TIMESTAMP.tar.gz" \
-C /var/www/nextcloud config
# Daten sichern (kann groß werden!)
tar -czf "$BACKUP_DIR/data-$TIMESTAMP.tar.gz" \
-C /var nextcloud-data
# Wartungsmodus aus
sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --off
# Alte Backups löschen
find "$BACKUP_DIR" -type f -mtime +$RETENTION_DAYS -delete
echo "Backup completed: $TIMESTAMP"⚠️ Wichtig: Speichert das DB-Passwort niemals als Klartext im Script. Besser:
~/.my.cnffür www-data anlegen oder Variablen aus einer separaten Datei mitchmod 600einlesen.
Ausführbar machen und mit systemd Timer automatisieren — wie in unserem restic Backup-Tutorial beschrieben.
⚠️ Best Practice: Bei vielen Nutzerdaten wird
tarschnell unhandlich. Nutzt restic mit Deduplication — das spart 80% Speicherplatz und ermöglicht schnelle inkrementelle Backups.
Updates
Nextcloud-Updates laufen entweder per Web-UI (Updater-App) oder per CLI. CLI ist robuster:
# Wartungsmodus aktivieren
sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --on
# Backup vor dem Update!
sudo /usr/local/bin/nextcloud-backup.sh
# Updater ausführen
sudo -u www-data php /var/www/nextcloud/updater/updater.phar
# Wartungsmodus aus
sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --off
# Datenbank-Indizes prüfen
sudo -u www-data php /var/www/nextcloud/occ db:add-missing-indices💡 Empfehlung: Springt nie mehrere Major-Versionen auf einmal (z.B. 30 → 33). Updatet immer eine Version weiter und prüft danach den Status. Andernfalls können Migrationsprobleme auftreten.
Zusammenfassung & Checkliste
| Schritt | Status |
|---|---|
| Debian 13 Server eingerichtet | ☐ |
| Nginx installiert und läuft | ☐ |
| PHP 8.3-FPM mit allen Extensions installiert | ☐ |
| PHP-Performance-Settings gesetzt | ☐ |
| PHP-FPM Pool getuned | ☐ |
| MariaDB installiert und abgesichert | ☐ |
| Nextcloud-Datenbank angelegt | ☐ |
| MariaDB für Nextcloud optimiert | ☐ |
| Redis installiert und konfiguriert | ☐ |
| Nextcloud heruntergeladen und entpackt | ☐ |
| Daten-Verzeichnis außerhalb Webroot | ☐ |
| Nginx vHost konfiguriert | ☐ |
| SSL-Zertifikat eingerichtet | ☐ |
| Setup-Wizard abgeschlossen | ☐ |
| Caching (APCu + Redis) konfiguriert | ☐ |
| Cron-Job statt AJAX | ☐ |
| Trusted Domains eingetragen | ☐ |
| Sicherheits-Check ohne Warnungen | ☐ |
| Backup-Script eingerichtet | ☐ |
| Backup einmal manuell getestet | ☐ |
Troubleshooting
„502 Bad Gateway“ nach Setup
Nginx kann nicht zu PHP-FPM verbinden. Prüft:
# Läuft FPM?
sudo systemctl status php8.3-fpm
# Stimmt der Socket-Pfad in der Nginx-Config?
ls -la /run/php/php8.3-fpm.sock
# Logs anschauen
sudo tail -f /var/log/nginx/error.logFalls php8.2-fpm.sock statt php8.3-fpm.sock läuft: PHP-Version stimmt nicht — auf 8.3 wechseln oder die Nginx-Config anpassen.
„Internal Server Error“
sudo tail -f /var/log/nginx/nextcloud.error.log
sudo tail -f /var/log/php8.3-fpm.logHäufige Ursachen: PHP-Modul fehlt, Permissions auf /var/www/nextcloud falsch, OPcache-Probleme.
Permissions-Probleme
Reset auf saubere Werte:
sudo find /var/www/nextcloud/ -type d -exec chmod 750 {} \;
sudo find /var/www/nextcloud/ -type f -exec chmod 640 {} \;
sudo chown -R www-data:www-data /var/www/nextcloud
sudo chown -R www-data:www-data /var/nextcloud-dataUploads brechen ab bei großen Dateien
upload_max_filesizeundpost_max_sizein PHP zu klein?client_max_body_sizein Nginx zu klein? (Aktuell 16G)fastcgi_read_timeoutzu kurz? (Aktuell 3600s)- Cloudflare davor? Cloudflare-Free hat 100 MB Upload-Limit
„Memcache ist nicht konfiguriert“ trotz Redis-Setup
- Hat
www-dataZugriff auf den Redis-Socket?sudo -u www-data redis-cli -s /var/run/redis/redis-server.sock ping - Modul installiert?
php -m | grep redis - In
config.phpbeide Zeilenmemcache.localUNDmemcache.lockinggesetzt?
„Last cron job execution“-Warnung
sudo systemctl status cron
sudo crontab -u www-data -lCron muss laufen und der Eintrag muss vorhanden sein.
Nextcloud-Updater bricht ab
# Manuell weitermachen
sudo -u www-data php /var/www/nextcloud/occ upgrade
sudo -u www-data php /var/www/nextcloud/occ db:add-missing-indices
sudo -u www-data php /var/www/nextcloud/occ db:add-missing-columns
sudo -u www-data php /var/www/nextcloud/occ db:add-missing-primary-keysCalDAV/CardDAV-Clients finden Server nicht
Prüft die .well-known-Redirects mit:
curl -I https://cloud.example.com/.well-known/caldav
curl -I https://cloud.example.com/.well-known/carddavBeide sollten 301 Moved Permanently zurückgeben mit Location-Header auf /remote.php/dav/.
Nächste Schritte
Nextcloud läuft — und jetzt? Hier sind sinnvolle nächste Schritte:
- Collabora Online integrieren — Eigenes Office im Browser (Word/Excel/PowerPoint-kompatibel)
- Authentik als SSO — Verbindet Nextcloud mit eurem Authentik-Setup
- OnlyOffice als Alternative zu Collabora
- Nextcloud Talk mit TURN-Server — Video-Calls auch hinter NAT
- External Storage — S3, SFTP, SMB als Mount in Nextcloud
- High Performance Backend für Files —
notify_pushfür Live-Sync ohne Polling - Server-Side Encryption — Verschlüsselung sensibler Daten
Nextcloud ist die Schaltzentrale eures digitalen Lebens. Die offizielle Admin-Doku ist sehr umfangreich.
Habt ihr Fragen oder Probleme? Schreibt es in die Kommentare — ich helfe gerne!