Nextcloud 17 auf CentOS 8 mit Nginx, PHP 7.3 und MariaDB installieren
Diese Anleitung erklärt Schritt für Schritt, wie Sie Nextcloud 17 auf einem CentOS 8-Server mit Nginx, PHP‑FPM 7.3 und MariaDB installieren und mit einem kostenlosen Let’s Encrypt‑Zertifikat absichern. Enthalten sind SELinux‑Konfiguration, Firewall‑Anweisungen, Troubleshooting‑Checks und empfehlenswerte Security‑Einstellungen.
Kurzüberblick: Was Sie benötigen
- Ein CentOS 8 Server (empfohlen: mindestens 2 GB RAM, 2 CPU, 25 GB freier Speicher).
- Eine öffentliche Domain, z. B. cloud.example.com, die auf die Server-IP zeigt.
- Root‑ oder sudo‑Zugriff auf den Server.
Was wir tun werden
- Nginx installieren und konfigurieren
- PHP‑FPM 7.3 installieren und anpassen
- MariaDB installieren und Datenbank anlegen
- Let’s Encrypt Zertifikat per certbot erstellen
- Nextcloud 17 herunterladen und konfigurieren
- Nginx Virtual Host für Nextcloud anlegen
- SELinux‑Kontext setzen
- Post‑Installation, Tests und Security‑Hardening
Voraussetzungen und Hinweise
- Diese Anleitung setzt CentOS 8 voraus. Für andere Distributionen (Ubuntu, Debian, RHEL) weichen Paketnamen und Repo‑Schritte ab.
- Beispielkonfigurationen (Domain, Passwörter, Pfade) müssen an Ihre Umgebung angepasst werden.
- In Beispielkonfigurationen wird als Zeitzone Europe/Berlin verwendet; passen Sie date.timezone bei Bedarf an.
Schritt 1 - Nginx installieren
Zuerst installieren Sie Nginx aus den CentOS AppStream‑Repos und öffnen HTTP/HTTPS in firewalld.
sudo dnf install nginxStarten und aktivieren Sie den Dienst:
systemctl start nginx
systemctl enable nginxPrüfen Sie den Status:
systemctl status nginxSie sollten sehen, dass der nginx‑Dienst läuft.

Fügen Sie HTTP und HTTPS zur Firewall hinzu und laden Sie die Regeln neu:
firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent
firewall-cmd --reload
Hinweis: Wenn Sie einen externen Load Balancer verwenden, öffnen Sie die Ports dort statt lokal.
Schritt 2 - PHP‑FPM 7.3 installieren
Nextcloud 17 empfiehlt PHP 7.2 oder 7.3. Wir verwenden hier PHP 7.3 aus dem REMI‑Repository.
Aktivieren Sie PowerTools, installieren Sie EPEL und fügen Sie das REMI‑Release hinzu:
sudo dnf config-manager --set-enabled PowerTools
sudo dnf install epel-release
sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpmPrüfen Sie die Repos:
dnf repolistAktivieren Sie das REMI PHP 7.3 Modul:
dnf module list php
dnf module enable php:remi-7.3Installieren Sie PHP‑FPM und die Nextcloud‑üblichen Erweiterungen:
sudo dnf install php-fpm php-cli php-devel php-gd php-mysqlnd php-pear php-xml php-mbstring php-pdo php-json php-pecl-apcu php-pecl-apcu-devel php-pecl-imagick-devel php-intl php-opcache php-zipSchritt 3 - PHP‑FPM konfigurieren
Anpassungen in php.ini und PHP‑FPM verbessern Performance und Kompatibilität.
Bearbeiten Sie /etc/php.ini:
vim /etc/php.iniSetzen oder ändern Sie unter anderem folgende Werte:
memory_limit = 512M
date.timezone = Europe/Berlin
cgi.fixpathinfo = 0Erklärung: memory_limit = 512M erhöht den Speicher für PHP‑Prozesse; cgi.fixpathinfo = 0 verhindert unsichere Pfadauflösungen.
Optimieren Sie Opcache (/etc/php.d/10-opcache.ini):
opcache.enable=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1Konfigurieren Sie PHP‑FPM www‑Pool (/etc/php-fpm.d/www.conf):
user = nginx
group = nginx
listen = /run/php-fpm/www.sockAktivieren Sie Umgebungsvariablen und opcache file cache in der Pool‑Datei:
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
php_value[opcache.file_cache] = /var/lib/php/opcacheErstellen Sie Verzeichnisse für Sessions & Opcache und setzen Sie Besitzrechte:
mkdir -p /var/lib/php/{session,opcache}
chown -R nginx:nginx /var/lib/php/{session,opcache}Starten und aktivieren Sie php-fpm:
systemctl enable php-fpm
systemctl start php-fpmPrüfen Sie Socket/Status:
netstat -pl | grep php
systemctl status php-fpm

Ergebnis: php-fpm läuft und hört auf /run/php-fpm/www.sock.
Schritt 4 - MariaDB installieren und konfigurieren
Installieren Sie MariaDB und setzen Sie root‑Sicherung:
sudo dnf install mariadb mariadb-server
systemctl start mariadb
systemctl enable mariadbFühren Sie mysql_secure_installation aus, um das Root‑Passwort zu setzen und unsichere Defaults zu entfernen:
mysql_secure_installationBeantworten Sie die Fragen (Setzen Sie ein starkes Root‑Passwort, entfernen Sie anonyme Benutzer, Testdatenbank, reload privileges).
Erstellen Sie die Nextcloud‑Datenbank und den Benutzer (ersetzen Sie Passwort durch ein sicheres Passwort):
mysql -u root -p
create database nextcloud_db;
create user 'nextclouduser'@'localhost' identified by 'nextcloudpassdb';
grant all privileges on nextcloud_db.* to 'nextclouduser'@'localhost' identified by 'nextcloudpassdb';
flush privileges;
exit;
Wichtiger Hinweis: In produktiven Umgebungen empfehlen sich separate Zugänge, restrictivere Rechte und ggf. externe DB‑Backups.
Schritt 5 - SSL mit Let’s Encrypt (certbot)
Installieren Sie certbot und erstellen Sie ein Webroot‑Zertifikat. Ersetzen Sie Domain und E‑Mail durch Ihre Werte:
sudo dnf install certbot
certbot certonly --webroot --webroot-path /usr/share/nginx/html --agree-tos -m [email protected] -d cloud.hakase-labs.ioDie Zertifikate liegen unter /etc/letsencrypt/live/
ls -lah /etc/letsencrypt/live/cloud.hakase-labs.io/Wichtig: Automatische Erneuerung einrichten (cron/systemd timer) oder certbot renew testen.
Schritt 6 - Nextcloud herunterladen und installieren
Installieren Sie unzip, laden Sie Nextcloud 17 herunter und entpacken Sie sie:
sudo dnf install unzip
cd /var/www/
wget https://download.nextcloud.com/server/releases/nextcloud-17.0.2.zip
unzip nextcloud-17.0.2.zipErstellen Sie das Datenverzeichnis und setzen Sie Rechte:
mkdir -p /var/www/nextcloud/data/
sudo chown -R nginx:nginx /var/www/nextcloud
Schritt 7 - Nginx Virtual Host für Nextcloud
Erstellen Sie /etc/nginx/conf.d/nextcloud.conf und passen Sie Domain und Pfade an. Beispielkonfiguration (ersetzen Sie ssl_certificate Pfade):
upstream php-handler {
#server 127.0.0.1:9000;
server unix:/run/php-fpm/www.sock;
}
server {
listen 80;
listen [::]:80;
server_name cloud.hakase-labs.io;
# enforce https
return 301 https://$server_name:443$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name cloud.hakase-labs.io;
ssl_certificate /etc/ssl/nginx/fullchain.pem;
ssl_certificate_key /etc/ssl/nginx/privkey.pem;
add_header Referrer-Policy "no-referrer" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Download-Options "noopen" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Permitted-Cross-Domain-Policies "none" always;
add_header X-Robots-Tag "none" always;
add_header X-XSS-Protection "1; mode=block" always;
fastcgi_hide_header X-Powered-By;
root /var/www/nextcloud;
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location = /.well-known/carddav {
return 301 $scheme://$host:$server_port/remote.php/dav;
}
location = /.well-known/caldav {
return 301 $scheme://$host:$server_port/remote.php/dav;
}
client_max_body_size 512M;
fastcgi_buffers 64 4K;
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 application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject 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;
location / {
rewrite ^ /index.php;
}
location ~ ^\/(?:build|tests|config|lib|3rdparty|templates|data)\/ {
deny all;
}
location ~ ^\/(?:\.|autotest|occ|issue|indie|db_|console) {
deny all;
}
location ~ ^\/(?:index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|oc[ms]-provider\/.+)\.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;
}
location ~ ^\/(?:updater|oc[ms]-provider)(?:$|\/) {
try_files $uri/ =404;
index index.php;
}
location ~ \.(?:css|js|woff2?|svg|gif|map)$ {
try_files $uri /index.php$request_uri;
add_header Cache-Control "public, max-age=15778463";
add_header Referrer-Policy "no-referrer" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Download-Options "noopen" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Permitted-Cross-Domain-Policies "none" always;
add_header X-Robots-Tag "none" always;
add_header X-XSS-Protection "1; mode=block" always;
access_log off;
}
location ~ \.(?:png|html|ttf|ico|jpg|jpeg|bcmap)$ {
try_files $uri /index.php$request_uri;
access_log off;
}
}Prüfen und neu starten:
nginx -t
systemctl restart nginxKontrollieren Sie offene Ports:
netstat -plntu
Schritt 8 - SELinux für Nextcloud konfigurieren
Wenn SELinux im Enforcing‑Modus läuft, setzen Sie passende Kontexte, sonst kann Nginx nicht schreiben.
Installieren Sie das Management‑Werkzeug:
sudo dnf install policycoreutils-python-utilsSetzen Sie die Kontexte und wenden Sie restorecon an:
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/data(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/config(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/apps(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/assets(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/.htaccess'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/.user.ini'
restorecon -Rv '/var/www/nextcloud/'Ergebnis: SELinux erlaubt Webserverprozessen das Schreiben in benötigte Verzeichnisse.
Schritt 9 - Nextcloud Webinstaller und Post‑Installation
Öffnen Sie im Browser:
Füllen Sie das Formular aus: Administrator‑Account, Datenverzeichnis (Standard /var/www/nextcloud/data), Datenbank: MySQL/MariaDB und die zuvor erstellten DB‑Zugangsdaten.
Klicken Sie auf “Finish Setup”. Nach erfolgreicher Installation sehen Sie das Nextcloud Dashboard.


Herzlichen Glückwunsch — Nextcloud 17 ist installiert.
Zusätzliche Empfehlungen und erweiterte Themen
Faktenbox: Wichtige Zahlen und Pfade
- Empfohlener Arbeitsspeicher: ≥ 2 GB RAM
- Empfohlenes PHP: 7.2 oder 7.3
- Standard‑Webroot: /var/www/nextcloud
- Nextcloud Datenverzeichnis: /var/www/nextcloud/data
- PHP‑FPM Socket: /run/php-fpm/www.sock
- Let’s Encrypt Zertifikate: /etc/letsencrypt/live/
/
Kompatibilitätsmatrix (Kurz)
- PHP: 7.2, 7.3 → empfohlen; 7.1 nicht empfohlen für Nextcloud 17.
- Datenbanken: MySQL/MariaDB, PostgreSQL, Oracle, SQLite (nur sehr kleine Instanzen).
- Webserver: Nginx empfohlen bei hoher Last; Apache ebenfalls vollständig unterstützt.
Alternative Installationsansätze
- Apache statt Nginx: Wenn Sie bereits Apache nutzen, folgen Sie der offiziellen Nextcloud Apache‑Konfiguration.
- Docker: Nextcloud‑Container vereinfachen Deployment und Updates; eignen sich für isolierte Umgebungen.
- Snap/Appliance: Für einfache, selbstverwaltungslosen Instanzen ist Snap nützlich, aber es bietet weniger Konfigurationsfreiheit.
- Kubernetes: Für skalierbare, hochverfügbare Umgebungen, erfordert jedoch deutlich mehr Infrastruktur.
Wann die Alternativen sinnvoll sind: Docker/Kubernetes, wenn Sie Container‑Orchestrierung nutzen; Apache, wenn mod_php oder bestimmte Module benötigt werden.
Sicherheits‑Hardening (Empfehlungen)
- Aktivieren Sie HSTS nach Prüfung: add_header Strict-Transport-Security “max-age=15768000; includeSubDomains; preload;” always;
- Setzen Sie Content Security Policy (CSP) in Nextcloud (config.php) bei Bedarf.
- Verwenden Sie fail2ban mit Regeln für Nextcloud‑Logins und bruteforce Schutz.
- Regelmäßige Updates für OS, PHP, Nginx und Nextcloud einplanen.
- Backups: Tägliche Datenbank‑Dumps + inkrementelle Dateisicherungen. Testen Sie Restore‑Prozesse.
Datenschutz und GDPR‑Hinweise
- Halten Sie die Datenhoheit: Stellen Sie klar, wo Daten gespeichert werden (Rechenzentrum/Land).
- Beschränken Sie Log‑Daten und setzen Sie Retention‑Regeln.
- Informieren Sie Nutzer über Verarbeitung und holen Sie ggf. Einwilligungen ein (bei personenbezogenen Daten).
SELinux und häufige Fehler
- Symptom: Nginx meldet 403 beim Upload → Prüfen Sie SELinux‑Kontext (restorecon) und Dateirechte.
- Symptom: PHP‑FPM antwortet nicht → socket prüfen (/run/php-fpm/www.sock) und Dienststatus.
- Symptom: Zertifikatfehler → certbot renew testen und nginx Zertifikatspfade prüfen.
Testfälle und Abnahme‑Kriterien
- Login: Admin‑Login funktioniert, Dashboard lädt fehlerfrei.
- Datei‑Upload: Benutzer kann Datei (z. B. 100 MB) hochladen.
- Synchronisation: Desktop‑Client verbindet sich und synchronisiert automatisch.
- SSL: HTTPS ohne Mixed Content, Zertifikat gültig, HSTS optional.
- Backup/Restore: Datenbank‑Dump erfolgreich importierbar.
Rollenbasierte Checklisten
Administrator:
- DNS auf Server‑IP zeigen lassen
- Firewall‑Regeln prüfen
- Zertifikate testen und Erneuerung einrichten
DevOps:
- Monitoring für nginx, php-fpm, mariadb einrichten
- Backup‑Jobs konfigurieren
- Automatisierte Updates planen (oder manuell testen)
Security Officer:
- HSTS, CSP, CSP Reports prüfen
- fail2ban und Audit‑Logs konfigurieren
- Datenschutzdokumentation prüfen
Mini‑Playbook: Incident Beispiele
- PHP‑FPM down
- Prüfen: systemctl status php-fpm
- Neustart: systemctl restart php-fpm
- Logs: journalctl -u php-fpm -n 200
- Prüfen Socket: ls -l /run/php-fpm/www.sock
- Let’s Encrypt Zertifikat abgelaufen
- Test: certbot renew –dry-run
- Wenn fehlerhaft: prüfen Sie Webroot‑Pfad und nginx Konfiguration, dann certbot renew ausführen
- Datenbank langsam / Verbindungsfehler
- Prüfen: systemctl status mariadb
- Logs: journalctl -u mariadb -n 200
- Ressourcen: top / free -m prüfen, ggf. DB‑Tuning
Migrationshinweise (ownCloud → Nextcloud, Upgrades)
- Bei Migration von ownCloud prüfen Sie Versionskompatibilität und Backup vor jedem Schritt.
- Testen Sie Upgradeablauf in einer Staging‑Umgebung.
- Bei größeren Nextcloud‑Upgrades prüfen Sie Breaking‑Changes in den Release‑Notes.
Akzeptanzkriterien (Kurz)
- Nextcloud‑Webinterface reagiert, Dateien werden korrekt gespeichert und wiederhergestellt.
- SSL funktioniert und Browser zeigt grünes Schloss.
- PHP‑FPM, Nginx, MariaDB laufen stabil ohne wiederkehrende Fehler in Logs.
1‑Zeilen Glossar
- php-fpm: PHP FastCGI Process Manager, verarbeitet PHP‑Anfragen.
- certbot: Client zur Verwaltung von Let’s Encrypt Zertifikaten.
- SELinux: Sicherheitsframework in CentOS/RHEL mit Mandatory Access Controls.
Zusammenfassung
- Diese Anleitung führt Sie durch die komplette Installation von Nextcloud 17 auf CentOS 8 mit Nginx, PHP‑FPM 7.3 und MariaDB.
- Wichtige Punkte: PHP‑Einstellungen, Besitzerrechte, SELinux‑Kontexte, HTTPS über Let’s Encrypt und Nginx‑Virtual‑Host.
- Sichern Sie die Installation durch regelmäßige Backups, Monitoring und Security‑Härten.
Wichtig: Lesen Sie die offiziellen Nextcloud‑Dokumente für weiterführende Optionen und aktuelle Sicherheitsempfehlungen.
Referenz
Ähnliche Materialien
Podman auf Debian 11 installieren und nutzen
Apt-Pinning: Kurze Einführung für Debian
FSR 4 in jedem Spiel mit OptiScaler
DansGuardian + Squid (NTLM) auf Debian Etch installieren
App-Installationsfehler auf SD-Karte (Error -18) beheben