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

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

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

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

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

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

Ändere die folgende Zeile:

INI

Kopieren

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

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

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

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

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

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

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

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.

Quelle: vultr.com

Jetzt 200€ Guthaben sichern

Registrieren Sie sich jetzt in unserer ccloud³ und erhalten Sie 200€ Startguthaben für Ihr Projekt.

Das könnte Sie auch interessieren:

Moderne Hosting Services mit Cloud Server, Managed Server und skalierbarem Cloud Hosting für professionelle IT-Infrastrukturen

TensorRT und ONNX: High-Performance-ML auf NVIDIA-GPUs

AI/ML, Tutorial
Vijonavor 2 Stunden Machine-Learning-Frameworks, Modell-Tools und Deployment-Strategien in der ML-Pipeline Machine-Learning-Frameworks, spezialisierte Modell-Tools und Deployment-Lösungen übernehmen jeweils unterschiedliche Aufgaben innerhalb eines Machine-Learning-(ML)-Workflows. In jeder Phase – von der Modellerstellung über Training…