Nextcloud auf Rocky Linux 9 bereitstellen (Nginx oder Docker)
Überblick zu Nextcloud
Nextcloud ist eine kostenlose Open-Source-Plattform zum Hosten und Verwalten von Dateispeicher-Diensten. Sie bietet Funktionen ähnlich wie Google Drive, etwa Dateifreigaben und Zusammenarbeit, läuft jedoch komplett auf einer Infrastruktur, die du selbst kontrollierst. Der Quellcode ist öffentlich auf GitHub verfügbar und kann dort geprüft sowie weiterentwickelt werden.
Bereitstellungsoptionen auf Rocky Linux 9
In dieser Anleitung richtest du Nextcloud auf Rocky Linux 9 auf eine von zwei Arten ein: entweder klassisch per Hand mit Nginx, PHP und MariaDB oder containerbasiert mit Docker und Docker Compose. Beide Wege behandeln eine sichere Webserver-Konfiguration, die Datenbank-Einrichtung und optional HTTPS, damit der Zugriff verschlüsselt erfolgen kann.
Voraussetzungen
Bevor du loslegst, stelle sicher, dass du:
- Zugriff auf einen Rocky-Linux-9-Server hast, mit einem Nicht-Root-Benutzer, der sudo-Rechte besitzt.
- Einen DNS-A-Record angelegt hast, der auf die IP deines Servers zeigt, zum Beispiel nextcloud.example.com.
Dieser Abschnitt bereitet dein System für die Nextcloud-Installation vor. Du aktualisierst Pakete, installierst notwendige Werkzeuge und richtest die Umgebung für Web-, Datenbank- und PHP-Dienste ein.
Systempakete aktualisieren
Aktualisiere die installierten Pakete auf deinem System.
console
Copy
$ sudo dnf update
Wenn du zur Bestätigung aufgefordert wirst, drücke Y, um fortzufahren und alle verfügbaren Updates zu installieren.
Erforderliche Tools und Abhängigkeiten installieren
Installiere die grundlegenden Hilfsprogramme und Abhängigkeiten für das Setup.
console
Copy
$ sudo dnf install epel-release unzip curl wget policycoreutils-python-utils dnf-plugins-core -y
Diese Pakete liefern wichtige Werkzeuge zur Vorbereitung einer Webanwendung und zur Verwaltung von SELinux.
Nextcloud-Webanwendungsdateien herunterladen
Neueste Nextcloud-Version herunterladen
Lade das aktuellste Nextcloud-Paket herunter.
console
Copy
$ wget https://download.nextcloud.com/server/releases/latest.zip
Mit diesem Befehl wird die neueste stabile Nextcloud-Version in dein aktuelles Verzeichnis geladen.
Archiv entpacken
Entpacke die heruntergeladene ZIP-Datei.
console
Copy
$ unzip latest.zip
Dadurch entsteht ein Verzeichnis nextcloud/, das die Anwendungsdateien enthält.
Web-Root-Verzeichnis anlegen
Stelle sicher, dass das Ziel-Verzeichnis für den Web-Root existiert.
console
Copy
$ sudo mkdir -p /var/www/
Nextcloud in den Web-Root verschieben
Verschiebe das entpackte Nextcloud-Verzeichnis nach /var/www.
console
Copy
$ sudo mv nextcloud/ /var/www/
Die Nextcloud-Dateien können nun aus /var/www/nextcloud bereitgestellt werden.
MariaDB-Datenbankserver installieren
Nextcloud speichert Konfigurationen und Benutzerdaten in einer relationalen Datenbank. Unterstützt werden MySQL, PostgreSQL, SQLite und Oracle, wobei SQLite eher für Tests oder sehr kleine Umgebungen gedacht ist. In diesem Abschnitt installierst und konfigurierst du MariaDB als produktiven Datenbank-Backend.
MariaDB-Repository-Datei erstellen
Lege eine eigene Repository-Konfiguration für MariaDB an.
console
Copy
$ sudo tee /etc/yum.repos.d/MariaDB.repo > /dev/null <<EOF
[mariadb]
name = MariaDB
baseurl = https://rpm.mariadb.org/11.4/rhel/\$releasever/\$basearch
gpgkey = https://rpm.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck = 1
EOF
MariaDB-Server und Client installieren
Installiere sowohl den Datenbankserver als auch die Client-Werkzeuge.
console
Copy
$ sudo dnf install MariaDB-server MariaDB-client
MariaDB aktivieren und starten
Starte MariaDB jetzt und richte den Dienst so ein, dass er beim Systemstart automatisch mitläuft.
Konsole
Kopieren
$ sudo systemctl enable --now mariadb
MariaDB-Installation absichern
Führe das Sicherheits-Setup für MariaDB aus.
Konsole
Kopieren
$ sudo mariadb-secure-installation
Dieses Skript leitet dich durch das Setzen des Root-Passworts und durch grundlegende Härtungsoptionen. Gib bei Nachfrage ein starkes Root-Passwort ein und bestätige die restlichen Fragen mit Y, um die empfohlenen Standard-Schutzmaßnahmen zu übernehmen.
MariaDB-Datenbank für Nextcloud konfigurieren
Als MariaDB-Root anmelden
Melde dich bei MariaDB als Root-Benutzer an.
Konsole
Kopieren
$ mariadb -u root -p
Gib das Root-Passwort ein, das du während mariadb-secure-installation festgelegt hast.
Nextcloud-Datenbank erstellen
Lege eine neue Datenbank speziell für Nextcloud an.
SQL
Kopieren
MariaDB [(none)]> CREATE DATABASE nextcloud;
Eigenen Nextcloud-Datenbankbenutzer anlegen
Erstelle einen separaten MariaDB-User, den Nextcloud verwenden soll.
SQL
Kopieren
MariaDB [(none)]> CREATE USER 'nextcloud'@'127.0.0.1' IDENTIFIED BY 'StrongPass';
Ersetze StrongPass durch ein sicheres, alphanumerisches Passwort.
Vollzugriff für den Nextcloud-User vergeben
Gib diesem Benutzer vollständige Rechte auf die Nextcloud-Datenbank.
SQL
Kopieren
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextcloud'@'127.0.0.1';
Privilegien neu laden
Aktualisiere die Rechte, damit sie sofort wirksam werden.
SQL
Kopieren
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB-Konsole verlassen
Beende die MariaDB-Eingabeaufforderung.
SQL
Kopieren
MariaDB [(none)]> exit
Login mit dem neuen Datenbankuser testen
Prüfe, ob sich der neue Benutzer erfolgreich verbinden kann.
Konsole
Kopieren
$ mariadb -u nextcloud -p -h 127.0.0.1
Gib das zuvor gesetzte Passwort ein.
Existenz der Datenbank prüfen
Kontrolliere, dass die Datenbank nextcloud vorhanden ist.
SQL
Kopieren
MariaDB [(none)]> SHOW DATABASES;
Ausgabe:
+--------------------+
| Database |
+--------------------+
| information_schema |
| nextcloud |
+--------------------+
Beende die Sitzung mit exit.
MariaDB für Nextcloud optimieren
Nextcloud benötigt bestimmte MariaDB-Parameter für Kompatibilität und Performance. Passe die MariaDB-Konfiguration so an, dass sie diese Anforderungen erfüllt.
MariaDB-Konfigurationsdatei bearbeiten
Öffne die Server-Konfiguration von MariaDB in deinem Editor.
Konsole
Kopieren
$ sudo nano /etc/my.cnf.d/server.cnf
Einstellungen im Abschnitt [mysqld] ergänzen
Füge im Block [mysqld] die folgenden Zeilen ein:
INI
Kopieren
bind-address = 127.0.0.1
character_set_server = utf8mb4
collation_server = utf8mb4_general_ci
transaction_isolation = READ-COMMITTED
binlog_format = ROW
innodb_large_prefix = 1
innodb_file_format = barracuda
innodb_file_per_table = 1
bind-address = 127.0.0.1: Beschränkt Verbindungen auf localhost.
character_set_server und collation_server: Aktivieren utf8mb4 für vollständige Unicode-Unterstützung.
transaction_isolation = READ-COMMITTED: Verhindert Probleme durch das Lesen nicht bestätigter Daten.
binlog_format = ROW: Verbessert Genauigkeit bei Replikation und Wiederherstellung.
InnoDB-Optionen: Ermöglichen größere Indexpräfixe, Barracuda-Dateiformat und Tablespaces pro Tabelle.
Einstellungen im Abschnitt [server] ergänzen
Trage im Block [server] derselben Datei diese Zeilen ein:
INI
Kopieren
skip_name_resolve = 1
innodb_buffer_pool_size = 128M
innodb_buffer_pool_instances = 1
innodb_flush_log_at_trx_commit = 2
innodb_log_buffer_size = 32M
innodb_max_dirty_pages_pct = 90
query_cache_type = 1
query_cache_limit = 2M
query_cache_min_res_unit = 2K
query_cache_size = 64M
tmp_table_size = 64M
max_heap_table_size = 64M
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
skip_name_resolve: Deaktiviert DNS-Lookups und beschleunigt Verbindungen.
innodb_* Parameter: Stellen Buffer Pools, Flush-Verhalten und Log-Puffer für ausgewogene Leistung ein.
query_cache_* Parameter: Steuern den Query-Cache (Hinweis: in MariaDB 11.4 veraltet und ggf. wirkungslos).
tmp_table_size und max_heap_table_size: Definieren Limits für temporäre und In-Memory-Tabellen.
slow_query_log Optionen: Aktivieren und konfigurieren das Slow-Query-Logging zur Performance-Analyse.
MariaDB neu starten
Starte MariaDB neu, damit die Änderungen aktiv werden.
Konsole
Kopieren
$ sudo systemctl restart mariadb
Prüfen, ob MariaDB läuft
Kontrolliere den Status des MariaDB-Dienstes.
Konsole
Kopieren
$ sudo systemctl status mariadb
PHP 8 für Nextcloud installieren
Nextcloud braucht PHP, um zu funktionieren. Empfohlen wird PHP 8.3 oder neuer, da es mehr Leistung, bessere Speicherausnutzung und hohe Kompatibilität bietet. In diesem Abschnitt installierst du PHP 8.3, aktivierst die nötigen Module und richtest PHP-FPM so ein, dass es mit Nginx zusammenarbeitet.
Verfügbare PHP-Streams prüfen
Zeige die PHP-Modul-Streams an, die unter Rocky Linux 9 bereitstehen.
Konsole
Kopieren
$ sudo dnf module list php
PHP 8.3 ist unter Rocky Linux 9 standardmäßig verfügbar, allerdings könnten einzelne Pakete fehlen. Damit alle benötigten Module sicher zur Verfügung stehen, musst du das Remi-Repository für PHP 8.3 hinzufügen und aktivieren.
Remi-Repository hinzufügen
Installiere das Remi-Repository-Paket.
Konsole
Kopieren
$ sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-9.rpm
Das Remi-Repository ist eine verlässliche Drittanbieter-Quelle, die aktuelle PHP-Builds für Enterprise-Linux-Systeme bereitstellt.
Remi aktivieren und PHP-8.3-Modul einschalten
Aktiviere das Remi-Repository und stelle PHP auf den 8.3-Stream um.
Konsole
Kopieren
$ sudo dnf config-manager --set-enabled remi
$ sudo dnf module enable php:remi-8.3
PHP 8.3, PHP-FPM und Erweiterungen installieren
Installiere PHP 8.3 zusammen mit PHP-FPM sowie den benötigten Erweiterungen.
Konsole
Kopieren
$ sudo dnf install php php-fpm php-intl php-sodium php-ctype \
php-curl php-dom php-gd php-mbstring php-posix php-session \
php-xml php-zip php-zlib php83-php-pecl-redis php-mysqlnd -y
PHP-FPM auf den nginx-Benutzer umstellen
Öffne die Pool-Konfiguration von PHP-FPM.
Konsole
Kopieren
$ sudo nano /etc/php-fpm.d/www.conf
Ändere die folgenden Zeilen:
INI
Kopieren
user = nginx
group = nginx
PHP-Memory-Limit erhöhen
Bearbeite die Hauptkonfiguration von PHP, um den Speicherbedarf zu erhöhen.
Konsole
Kopieren
$ sudo nano /etc/php.ini
Ändere die folgende Zeile:
INI
Kopieren
memory_limit = 512M
PHP-FPM aktivieren und starten
Starte PHP-FPM und sorge dafür, dass es beim Booten automatisch startet.
Konsole
Kopieren
$ sudo systemctl enable --now php-fpm
SELinux für Zugriff auf den MariaDB-Socket anpassen
Richte SELinux so ein, dass PHP-FPM den MariaDB-Socket erreichen darf.
Konsole
Kopieren
$ sudo semanage fcontext -a -t mysqld_var_run_t "/var/lib/mysql/mysql.sock"
Alle Dienste neu starten
Starte die Dienste neu, damit alle Anpassungen wirksam werden.
Konsole
Kopieren
$ sudo systemctl restart php-fpm nginx mariadb
Nginx-Webserver installieren und konfigurieren
Nextcloud braucht einen Webserver, um das Frontend auszuliefern und PHP-Anfragen zu verarbeiten. Nginx ist schlank, schnell und sehr effizient, weshalb er sich für diese Aufgabe besonders eignet. Mit den folgenden Schritten installierst du ihn und richtest ihn passend ein.
Nginx installieren
Installiere das Nginx-Paket.
Konsole
Kopieren
$ sudo dnf install nginx -y
DNF übernimmt automatisch den GPG-Schlüssel und installiert die stabile Version aus dem aktivierten Repository.
Nginx aktivieren und starten
Starte Nginx jetzt und sorge dafür, dass der Dienst beim Booten automatisch mitstartet.
Konsole
Kopieren
$ sudo systemctl enable --now nginx
Bestätigen, dass Nginx aktiv ist
Prüfe, ob der Dienst läuft.
Konsole
Kopieren
$ sudo systemctl status nginx
In der Statusausgabe sollte zu sehen sein, dass der Service aktiv (running) ist.
Firewall-Ports für HTTP und HTTPS öffnen
Erlaube eingehenden Traffic auf den Ports 80 und 443.
Konsole
Kopieren
$ sudo firewall-cmd --zone=public --permanent --add-port=80/tcp
$ sudo firewall-cmd --zone=public --permanent --add-port=443/tcp
Firewall neu laden
Übernimm die Firewall-Änderungen.
Konsole
Kopieren
$ sudo firewall-cmd --reload
Rufe die IP deines Servers im Browser auf. Wenn Nginx korrekt eingerichtet ist, erscheint die Standard-Willkommensseite:
Nginx default page
Besitzrechte für das Nextcloud-Verzeichnis setzen
Ändere die Eigentümer, damit Nginx die Nextcloud-Dateien lesen und ausführen kann.
Konsole
Kopieren
$ sudo chown -R nginx:nginx /var/www/nextcloud
Verzeichnisrechte anpassen
Gib dem Besitzer Lese-, Schreib- und Ausführungsrechte für den Nextcloud-Ordner.
Konsole
Kopieren
$ sudo chmod -R 750 /var/www/nextcloud
Nextcloud-Nginx-Konfigurationsdatei erstellen
Lege eine neue Nginx-Konfiguration für Nextcloud an.
Konsole
Kopieren
$ sudo nano /etc/nginx/conf.d/nextcloud.conf
Nextcloud-Server-Block hinzufügen
Füge die folgende Konfiguration ein. Ersetze nextcloud.example.com durch deine echte Domain.
INI
Kopieren
# PHP-FPM socket
upstream php-handler {
server unix:/run/php-fpm/www.sock;
}
# Cache control for assets
map $arg_v $asset_immutable {
"" "";
default ", immutable";
}
server {
listen 80;
listen [::]:80;
server_name nextcloud.example.com;
root /var/www/nextcloud;
server_tokens off;
client_max_body_size 512M;
client_body_timeout 300s;
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 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;
client_body_buffer_size 512k;
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;
fastcgi_hide_header X-Powered-By;
include mime.types;
types {
text/javascript mjs;
}
index index.php index.html /index.php$request_uri;
location = / {
if ($http_user_agent ~ ^DavClnt) {
return 302 /remote.php/webdav/$is_args$args;
}
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location ^~ /.well-known {
location = /.well-known/carddav { return 301 /remote.php/dav/; }
location = /.well-known/caldav { return 301 /remote.php/dav/; }
location /.well-known/acme-challenge { try_files $uri $uri/ =404; }
location /.well-known/pki-validation { try_files $uri $uri/ =404; }
return 301 /index.php$request_uri;
}
location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)(?:$|/) { return 404; }
location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) { return 404; }
location ~ \.php(?:$|/) {
rewrite ^/(?!index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+|.+/richdocumentscode(_arm64)?/proxy) /index.php$request_uri;
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_max_temp_file_size 0;
}
location ~ \.(?:css|js|mjs|svg|gif|ico|jpg|png|webp|wasm|tflite|map|ogg|flac)$ {
try_files $uri /index.php$request_uri;
add_header Cache-Control "public, max-age=15778463$asset_immutable";
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;
access_log off;
}
location ~ \.(?:otf|woff2?)$ {
try_files $uri /index.php$request_uri;
expires 7d;
access_log off;
}
location /remote {
return 301 /remote.php$request_uri;
}
location / {
try_files $uri $uri/ /index.php$request_uri;
}
}
Nginx-Konfiguration testen
Prüfe die Nginx-Konfiguration auf Syntaxfehler.
Konsole
Kopieren
$ sudo nginx -t
Ausgabe:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
SELinux-Zugriff für Nginx erlauben
Setze SELinux-Labels so, dass Nginx auf die Nextcloud-Dateien zugreifen kann.
Konsole
Kopieren
$ sudo chcon -R -t httpd_sys_content_t /var/www/nextcloud
Nginx neu starten
Starte den Nginx-Webserver neu.
Konsole
Kopieren
$ sudo systemctl restart nginx
Prüfen, ob Nginx läuft
Stelle sicher, dass Nginx aktiv und erreichbar ist.
Konsole
Kopieren
$ sudo systemctl status nginx
Achte darauf, dass der Status active (running) angezeigt wird, damit klar ist, dass Nginx korrekt arbeitet.
Nextcloud mit HTTPS absichern
Mit Certbot kannst du automatisch ein TLS-Zertifikat von Let’s Encrypt anfordern und installieren. Certbot bindet sich in Nginx ein, aktiviert HTTPS und leitet HTTP-Zugriffe sicher um.
Certbot und Nginx-Plugin installieren
Installiere Certbot zusammen mit der Nginx-Integration.
Konsole
Kopieren
$ sudo dnf install certbot python3-certbot-nginx -y
TLS-Zertifikat erzeugen und installieren
Fordere das Zertifikat für deine Domain an und spiele es ein.
Konsole
Kopieren
$ sudo certbot --nginx -d nextcloud.example.com
–nginx: Nutzt das Nginx-Plugin, um HTTPS automatisch einzurichten.
-d nextcloud.example.com: Ersetze dies durch deinen eigenen Domainnamen.
Wenn du aufgefordert wirst:
- Gib deine E-Mail-Adresse an, damit du Hinweise zur Verlängerung erhältst.
- Akzeptiere die Nutzungsbedingungen.
- Wähle die Option, die sämtlichen HTTP-Traffic auf HTTPS umleitet.
Vergewissere dich vor dem Certbot-Lauf, dass die Ports 80 (HTTP) und 443 (HTTPS) in der Firewall offen sind.
Docker-Bereitstellung für Nextcloud
Docker stellt getrennte, in sich geschlossene Umgebungen bereit, um Anwendungen wie Nextcloud auszurollen. Dieser Abschnitt zeigt dir, wie du Docker auf Rocky Linux 9 installierst und die benötigte Ordnerstruktur für eine containerbasierte Nextcloud-Installation anlegst.
Docker installieren
Paketindex aktualisieren
Aktualisiere die Paket-Metadaten.
Konsole
Kopieren
$ sudo dnf makecache
Offizielles Docker-Repository hinzufügen
Füge das offizielle Docker-Repository deines Systems hinzu.
Konsole
Kopieren
$ sudo dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo
Docker-Pakete installieren
Installiere Docker Engine, CLI-Werkzeuge, die Container-Runtime und Compose-Komponenten.
Konsole
Kopieren
$ sudo dnf install docker-ce docker-ce-cli containerd.io \
docker-buildx-plugin docker-compose-plugin -y
Docker aktivieren und starten
Starte Docker sofort und aktiviere den Autostart beim Booten.
Konsole
Kopieren
$ sudo systemctl enable --now docker
Prüfen, ob Docker läuft
Kontrolliere den Status des Docker-Dienstes.
Konsole
Kopieren
$ sudo systemctl status docker
Stelle sicher, dass active (running) angezeigt wird, damit du weißt, dass Docker korrekt arbeitet.
Benutzer zur docker-Gruppe hinzufügen
Füge deinen Account zur docker-Gruppe hinzu, damit Docker-Befehle ohne sudo funktionieren.
Konsole
Kopieren
$ sudo usermod -aG docker $(whoami)
Melde dich ab und wieder an, damit die Gruppenänderung greift. Alternativ kannst du auch deine Shell neu starten.
Docker-Verzeichnis für Nextcloud vorbereiten
Nextcloud-Docker-Konfigurationsordner erstellen
Lege das Verzeichnis an, in dem Docker-Compose-Dateien und Einstellungen liegen sollen.
Konsole
Kopieren
$ sudo mkdir -p /opt/nextcloud-docker
Umgebungsdatei für Docker Compose erstellen
Lege die .env-Datei an, die von Docker Compose genutzt wird.
Konsole
Kopieren
$ sudo nano /opt/nextcloud-docker/.env
Umgebungsvariablen hinzufügen
Trage die folgenden Werte ein und ersetze Zugangsdaten sowie Domain nach Bedarf.
INI
Kopieren
MYSQL_DATABASE=nextcloud
MYSQL_USER=nextcloud
MYSQL_PASSWORD=SecurePassword123#
MYSQL_ROOT_PASSWORD=SecurePassword#
NEXTCLOUD_ADMIN_USER=admin
NEXTCLOUD_ADMIN_PASSWORD=Passw0rd123$
DOMAIN=nextcloud.example.com
EMAIL=admin@example.com
Aufschlüsselung der Variablen
MYSQL_DATABASE: Name der MariaDB-Datenbank, die Nextcloud verwenden wird.
MYSQL_USER: Datenbank-Benutzername für Nextcloud.
MYSQL_PASSWORD: Passwort für den Nextcloud-Datenbankbenutzer.
MYSQL_ROOT_PASSWORD: Root-Passwort für MariaDB im Container.
NEXTCLOUD_ADMIN_USER: Erster Admin-Benutzername für Nextcloud.
NEXTCLOUD_ADMIN_PASSWORD: Passwort für das Admin-Konto.
DOMAIN: Vollständiger Domainname, über den Nextcloud erreichbar ist.
EMAIL: E-Mail-Adresse für TLS-Zertifikatsanforderungen und Admin-Benachrichtigungen.
Speichere die Datei und beende den Editor mit CTRL+O, Enter und danach CTRL+X.
Nextcloud-Docker-Dienste einrichten
Host-Datenverzeichnis erstellen
Erstelle ein Datenverzeichnis auf dem Host, damit Uploads außerhalb des Containers gespeichert werden.
Konsole
Kopieren
$ sudo mkdir /opt/nextcloud-data
Besitzrechte auf die Standard-Nextcloud-UID/GID setzen
Ändere den Besitzer auf UID/GID 1000, da dies der Standard-User von Nextcloud in Docker ist.
Konsole
Kopieren
$ sudo chown -R 1000:1000 /opt/nextcloud-data
Einschränkende Berechtigungen setzen
Sichere das Datenverzeichnis mit strikten Rechten ab.
Konsole
Kopieren
$ sudo chmod -R 750 /opt/nextcloud-data
Docker-Compose-Konfiguration erstellen
Docker-Compose-Datei anlegen
Erstelle die docker-compose.yml für deine Dienste.
Konsole
Kopieren
$ sudo nano /opt/nextcloud-docker/docker-compose.yml
Docker-Compose-Services einfügen
Füge die folgende Konfiguration ein.
YAML
Kopieren
services:
nextcloud:
image: nextcloud:stable
container_name: nextcloud
restart: always
depends_on:
- db
- redis
env_file:
- .env
environment:
- MYSQL_HOST=db
- REDIS_HOST=redis
- VIRTUAL_HOST=${DOMAIN}
volumes:
- nextcloud_app:/var/www/html
- /opt/nextcloud-data:/var/www/html/data
ports:
- "8080:80"
networks:
- internal
db:
image: mariadb:11.4.7
container_name: nextcloud-db
restart: always
env_file:
- .env
volumes:
- db_data:/var/lib/mysql
networks:
- internal
redis:
image: redis:alpine
container_name: nextcloud-redis
restart: always
networks:
- internal
volumes:
nextcloud_app:
db_data:
networks:
internal:
driver: bridge
Passe Domainnamen, Passwörter und weitere Werte in der .env-Datei so an, dass sie zu deiner Umgebung passen.
Nextcloud-Stack starten
In das nextcloud-docker-Verzeichnis wechseln
Wechsle in den Ordner nextcloud-docker.
Konsole
Kopieren
$ cd /opt/nextcloud-docker/
Konfiguration prüfen
Kontrolliere, ob das Compose-Setup gültig ist.
Konsole
Kopieren
$ docker compose config
Container im Hintergrund starten
Bringe den Stack im Detached-Modus nach oben.
Konsole
Kopieren
$ docker compose --env-file .env up -d
Prüfen, ob der Nextcloud-Container auf Port 8080 antwortet
Teste, ob der Nextcloud-Dienst über Port 8080 erreichbar ist.
Konsole
Kopieren
$ curl -I http://localhost:8080
Du solltest eine 302-Found-Weiterleitung sehen, die auf /login verweist.
Laufende Container auflisten
Zeige an, welche Container aktuell laufen.
Konsole
Kopieren
$ docker container ls
Ausgabe:
CONTAINER ID IMAGE COMMAND PORTS NAMES
abc123... nextcloud:stable ... 8080->80/tcp nextcloud
def456... mariadb:11.4.7 ... 3306/tcp nextcloud-db
ghi789... redis:alpine ... 6379/tcp nextcloud-redis
Vertrauenswürdige Domain für den Webzugriff setzen
Trage deine Domain als vertrauenswürdigen Host für den Browser-Zugriff ein.
Konsole
Kopieren
$ docker container exec -u www-data nextcloud php occ config:system:set trusted_domains 1 --value=nextcloud.example.com
Ersetze nextcloud.example.com durch die Domain, die du tatsächlich nutzt.
Nextcloud konfigurieren
Nachdem du Nextcloud per Docker Compose bereitgestellt hast, richtest du Nginx als Reverse Proxy ein und sicherst die Umgebung per HTTPS mit Let’s-Encrypt-Zertifikaten ab.
Nginx installieren
Nginx-Webserver installieren
Installiere das Nginx-Paket.
Konsole
Kopieren
$ sudo dnf install nginx -y
Nginx aktivieren und starten
Starte Nginx und stelle sicher, dass es beim Booten automatisch startet.
Konsole
Kopieren
$ sudo systemctl enable --now nginx
Nginx als Reverse Proxy einrichten
Neue Nginx-Konfigurationsdatei erstellen
Lege eine neue Nginx-Konfiguration für Nextcloud an.
Konsole
Kopieren
$ sudo nano /etc/nginx/sites-available/nextcloud
Reverse-Proxy-Serverblock hinzufügen
Füge das Folgende ein und ersetze nextcloud.example.com durch deine eigene Domain.
INI
Kopieren
server {
listen 80;
server_name nextcloud.example.com;
location / {
proxy_pass http://localhost:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Konfiguration aktivieren
Schalte die neue Site-Konfiguration frei.
Konsole
Kopieren
$ sudo ln -s /etc/nginx/sites-available/nextcloud /etc/nginx/sites-enabled/
Nginx-Konfiguration testen
Überprüfe die Konfiguration auf Fehler.
Konsole
Kopieren
$ sudo nginx -t
Nginx neu laden
Lade Nginx neu, damit die Proxy-Einstellungen übernommen werden.
Konsole
Kopieren
$ sudo systemctl reload nginx
Prüfen, ob Nginx läuft
Bestätige den Status des Dienstes.
Konsole
Kopieren
$ sudo systemctl status nginx
Stelle sicher, dass active (running) gemeldet wird.
Nginx in der Firewall zulassen
HTTP- und HTTPS-Traffic erlauben
Öffne den Firewall-Zugriff für Nginx.
Konsole
Kopieren
$ sudo ufw allow 'Nginx Full'
Firewall neu laden
Lade UFW neu, damit die Regel aktiv wird.
Konsole
Kopieren
$ sudo ufw reload
Nextcloud mit vertrauenswürdigem SSL absichern
Certbot und das Nginx-Plugin installieren
Installiere Certbot inklusive Nginx-Modul.
Konsole
Kopieren
$ sudo apt install certbot python3-certbot-nginx -y
TLS-Zertifikat anfordern und installieren
Fordere ein Let’s-Encrypt-Zertifikat an und wende es an.
Konsole
Kopieren
$ sudo certbot --nginx -d nextcloud.example.com
Certbot passt Nginx automatisch an und erzwingt, dass alle HTTP-Anfragen über HTTPS laufen.
Automatische Erneuerung aktivieren
Certbot-Erneuerungstimer einschalten
Aktiviere den systemd-Timer, damit Zertifikate automatisch erneuert werden.
Konsole
Kopieren
$ sudo systemctl enable certbot.timer
Automatische Erneuerung testen
Führe einen Probelauf durch, um zu prüfen, dass Renewals funktionieren.
Konsole
Kopieren
$ sudo certbot renew --dry-run
Trusted Domain setzen und HTTPS erzwingen
Konfigurationsdatei aus dem Nextcloud-Container kopieren
Kopiere die config.php aus dem laufenden Container in dein Home-Verzeichnis.
Konsole
Kopieren
$ docker container cp nextcloud:/var/www/html/config/config.php ~/config.php
Dieser Befehl holt die config.php aus dem aktiven Container in deinen Home-Ordner.
config.php bearbeiten und die folgenden Zeilen aktualisieren
Öffne config.php und ändere diese Einträge.
PHP
Kopieren
'trusted_domains' => ['nextcloud.example.com'],
'overwrite.cli.url' => 'https://nextcloud.example.com',
'overwriteprotocol' => 'https',
Die aktualisierte Datei zurück in den Container kopieren
Schiebe die bearbeitete config.php wieder in den Nextcloud-Container.
Konsole
Kopieren
$ docker container cp ~/config.php nextcloud:/var/www/html/config/config.php
Interaktive Shell im Container öffnen
Starte eine Shell-Sitzung im Nextcloud-Container.
Konsole
Kopieren
$ docker container exec -it nextcloud bash
Besitzrechte der Konfigurationsdatei korrigieren
Setze den Besitzer der config.php auf www-data.
Konsole
Kopieren
# chown www-data:www-data /var/www/html/config/config.php
Korrekte Berechtigungen für die Konfigurationsdatei setzen
Vergib die passenden Rechte für config.php.
Konsole
Kopieren
# chmod 640 /var/www/html/config/config.php
Container verlassen
Beende die Shell im Container.
Konsole
Kopieren
# exit
Container neu starten
Starte Nextcloud neu, damit die Konfigurationsänderungen übernommen werden.
Konsole
Kopieren
$ docker container restart nextcloud
Nextcloud aufrufen und einrichten
Sobald die Installation abgeschlossen ist und die Container laufen, öffne deine Nextcloud-Instanz im Browser unter:
https://nextcloud.example.com
Im Einrichtungsassistenten erledigst du Folgendes:
- Lege einen Admin-Benutzernamen fest und wähle ein starkes Passwort.
- Bestimme den Pfad für das Datenverzeichnis (belasse den Standard, sofern du ihn nicht zuvor geändert hast).
- Wähle MySQL/MariaDB als Datenbanktyp.
- Trage die folgenden Angaben ein:
- Datenbankbenutzer: nextcloud
- Passwort: das von dir konfigurierte
- Datenbankname: nextcloud
- Host: db (bei Docker) oder 127.0.0.1 (bei lokaler MariaDB)
Nach der Einrichtung kannst du Nextcloud um weitere Apps erweitern, Dateien strukturieren und freigeben sowie Daten zwischen Geräten synchronisieren – entweder über die Weboberfläche oder über mobile und Desktop-Clients. So erhältst du eine zentrale Plattform für deinen privaten Cloudspeicher mit einem leicht bedienbaren Dashboard.
Fazit
In dieser Anleitung hast du Nextcloud auf Rocky Linux 9 entweder klassisch manuell oder per Docker installiert. Du hast die Umgebung mit Nginx und HTTPS abgesichert, Datenbank und Redis eingerichtet und dafür gesorgt, dass Benutzerdaten auf dem Host bleiben, damit Backups einfacher möglich sind.
Die Container-Variante bietet Isolation, effiziente Ressourcennutzung und hohe Flexibilität, während die manuelle Installation dir sehr genaue Kontrolle über die Umgebung gibt. Für weiterführende Funktionen wie externe Speicheranbindungen oder Groupware-Features findest du Details in der Nextcloud-Dokumentation.


