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 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.
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.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
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;
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
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
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:
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

Tripwire auf Ubuntu 16.04 installieren und konfigurieren

Split View auf dem Mac effektiv nutzen

Word: Bilder als Aufzählungszeichen hinzufügen

iPhone-Cache leeren ohne App zu löschen
PSP reinigen: Schritt-für-Schritt Anleitung
