Technologieführer

Nextcloud 17 auf CentOS 8 mit Nginx, PHP 7.3 und MariaDB installieren

7 min read Anleitung Aktualisiert 21 Oct 2025
Nextcloud 17 auf CentOS 8 installieren
Nextcloud 17 auf CentOS 8 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 nginx

Starten und aktivieren Sie den Dienst:

systemctl start nginx
systemctl enable nginx

Prüfen Sie den Status:

systemctl status nginx

Sie sollten sehen, dass der nginx‑Dienst läuft.

Nginx mit systemd starten

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

Firewall für HTTP/HTTPS konfigurieren

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.rpm

Prüfen Sie die Repos:

dnf repolist

Aktivieren Sie das REMI PHP 7.3 Modul:

dnf module list php
dnf module enable php:remi-7.3

Installieren 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-zip

Schritt 3 - PHP‑FPM konfigurieren

Anpassungen in php.ini und PHP‑FPM verbessern Performance und Kompatibilität.

Bearbeiten Sie /etc/php.ini:

vim /etc/php.ini

Setzen oder ändern Sie unter anderem folgende Werte:

memory_limit = 512M
date.timezone = Europe/Berlin
cgi.fixpathinfo = 0

Erklä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=1

Konfigurieren Sie PHP‑FPM www‑Pool (/etc/php-fpm.d/www.conf):

user = nginx
group = nginx
listen = /run/php-fpm/www.sock

Aktivieren 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/opcache

Erstellen 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-fpm

Prüfen Sie Socket/Status:

netstat -pl | grep php
systemctl status php-fpm

PHP 7.3 konfigurieren

PHP-FPM Sock prüfen

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 mariadb

Führen Sie mysql_secure_installation aus, um das Root‑Passwort zu setzen und unsichere Defaults zu entfernen:

mysql_secure_installation

Beantworten 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;

Nextcloud Datenbank anlegen

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.io

Die 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.zip

Erstellen Sie das Datenverzeichnis und setzen Sie Rechte:

mkdir -p /var/www/nextcloud/data/
sudo chown -R nginx:nginx /var/www/nextcloud

Nextcloud herunterladen

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 nginx

Kontrollieren Sie offene Ports:

netstat -plntu

Nginx für Nextcloud konfigurieren

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-utils

Setzen 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:

https://cloud.hakase-labs.io/

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.

Nextcloud Webinstaller

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

  1. 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
  1. 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
  1. 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

Autor
Redaktion

Ähnliche Materialien

Tripwire auf Ubuntu 16.04 installieren und konfigurieren
Sicherheit

Tripwire auf Ubuntu 16.04 installieren und konfigurieren

Split View auf dem Mac effektiv nutzen
macOS

Split View auf dem Mac effektiv nutzen

Word: Bilder als Aufzählungszeichen hinzufügen
Produktivität

Word: Bilder als Aufzählungszeichen hinzufügen

iPhone-Cache leeren ohne App zu löschen
iPhone Tipps

iPhone-Cache leeren ohne App zu löschen

PSP reinigen: Schritt-für-Schritt Anleitung
Retro Hardware

PSP reinigen: Schritt-für-Schritt Anleitung

Musik-Widget vom iPhone‑Sperrbildschirm entfernen
iPhone

Musik-Widget vom iPhone‑Sperrbildschirm entfernen