NextCloud – Manuelle Installation mit Apache2 & MariaDB

Dies ist eine Neuauflage meiner langen Anleitung zu NextCloud installieren – Komplette Installation inkl. Fix der „Probleme“.
In dieser Anleitung installieren wir NextCloud von Hand und nutzen dabei Apache2 als Webserver und MariaDB als Datenbank.
Diese Anleitung beinhaltet alle notwendigen Schritte, damit die NextCloud am Ende vollständig funktionsfähig ist.
Was wir hier nicht behandeln, ist die Installation von Erweiterungen, welche auch zum Teil extra Software auf dem Server brauchen.

Mit dieser Anleitung kannst du deine eigene NextCloud Zuhause oder im Büro installieren.
Löse dich von der Abhängigkeit von Firmen wie Google, Amazon, Microsoft oder Apple.
Deine Daten – Deine Cloud – Deine Privatsphäre!
Sie setzt allerdings das Mitdenken voraus, da an manchen Stellen individuelle Einstellungen gesetzt werden können oder müssen.
Meine Meinung zu NextCloud findest du HIER.

Warum mit Apache2 statt nginx?

Über die letzten 6 Jahre hinweg hatte ich persönlich weniger Probleme mit Apache2 als Webserver für NextCloud als mit nginx.
nginx kann als Proxy-Server davor geschaltet werden.
Gerade die „KI“-Erweiterungen und alles was auf Docker im Hintergrund läuft, hat mit Apache2 problemloser funktioniert.
Auch liefert die NextCloud GmbH mehr Infos und Konfigurationsbeispiele für Apache2 als für nginx.
Ja, nginx ist ein etwas flotterer Webserver, aber das Ding muss erst mal sauber laufen und das tuts eben mit Apache2.

Warum von Hand und nicht mit Docker?

Je nach Einsatzszenario ist die händische Installatio zu Bevorzugen.
Gerade wenn es etwas spezieller wird (z.B. mit LDAP), hat man so weniger Probleme.
Auch sind die meisten Anleitungen im Internet auf die händische Installation ausgelegt.

Was werden wir machen?

  1. Den Linux-Server mit allen notwendigen Paketen ausstatten
  2. Ein Webserver – Apache2 – installieren
  3. Ein SQL-Server installieren und einrichten>> MySQL / MariaDB
  4. Die aktuellste PHP-Version installieren (Bei Erstellung der Anleitung war php8.5 aktuell)
  5. OPTIONAL: Den Server via SSL / HTTPS absichern
  6. Den Webserver und php etwas editieren
  7. NextCloud herunterladen und installieren
  8. Offene Punkte noch fixen

Was brauchen wir dafür?

  • Ein Linux-Server (Egal ob vServer, Root-Server, Dedicated Server oder Raspberry Pi)
  • Vollen SSH-Zugriff (Root-Account)
  • Vielleicht die ein oder andere Linux-Kentniss 😉

Optinal sind:

  • Zugriff auf einen lokalen DNS-Server (z.B. Pi-Hole, Technitium, AdGuard Home, ….)
  • Eine Domain für gültige SSL-Zertifikate
  • Viele Ressourcen für z.B. die Talk oder KI-Erweiterungen
  • Extra Festplatten für die Daten

Hinweis

Diese Anleitung wurde auf Basis von Debian 13 erstellt.
Andere Distributionen funktionieren auch, es können aber teilweise andere Befehle und / oder Pakete erforderlich sein.


Die Nachfolgenden Befehle sind alle mit dem root-Account auszuführen.
Es wurde bewusst auf sudo verzichtet, da dies kein Standardpaket bei Debian 13 ist.

1. Alle notwendigen Pakete installieren

Dieser Schritt kann ggf. übersprungen werden, wenn du bereits passende Tools installiert hast und dich mit diesen Vertraut gemacht hast.
Wir installieren hier notwendige Pakete, die gerade bei Debian 13 noch nicht vorhanden sind, aber später für den Betrieb benötigt werden.

apt update && apt upgrade
apt install -y curl gnupg2 git lsb-release ssl-cert ca-certificates apt-transport-https htop btop net-tools zip unzip bzip2 libfile-fcntllock-perl libfontconfig1 libfuse2 wget -y

Je nach System, sollte die aktuelle Zeitzone noch sauber gesetzt werden, damit die Logs später korrekte Zeitstempel haben.
Gerade wer ein LXC in Proxmox nutzt, muss die Zeitzone von Hand setzen.

timedatectl set-timezone Europe/Berlin

2. Apache2 installieren

Apache2 installieren und alle notwendigen Erweiterungen aktivieren.

apt install apache2 libapache2-mod-php -y
a2enmod rewrite
a2enmod proxy
a2enmod proxy_fcgi
a2enmod headers
a2enmod env
a2enmod dir
a2enmod mime
a2enmod setenvif
a2enmod ssl

Die Konfiguration von Apache2 folgt später, da manche Pakete noch fehlen. Das würde sonst fehler geben.

3. Den SQL-Server installieren

Wir installieren hier nun MySQL bzw. MariaDB und sichern die Instanz ab.
Anschließend legen wir einen Account für NextCloud an.

apt install mariadb-server mariadb-client

Installation absichern:

mariadb-secure-installation
Switch to unix_socket authentication [Y/n] y
Change the root password? [Y/n] y
Remove anonymous users? [Y/n] y
Disallow root login remotely? [Y/n] y
Remove test database and access to it? [Y/n] y
Reload privilege tables now? [Y/n] y

6x mit Y für YES bestätigen und 1x ein Root-Passwort setzten. Das wars.

Nun legen wir einen Account für NextCloud an.
Vergebe daher ein neues SICHERES Passwort bei „PASSWORT-HIER-EINTRAGEN“.
Jede Zeile ist ein ganzer Befehl und muss so abgeschickt werden!

# mysql -u root -p
CREATE DATABASE nextcloud;
CREATE USER 'nextclouduser'@'localhost' IDENTIFIED BY 'PASSWORT-HIER-EINTRAGEN';
GRANT ALL ON nextcloud.* TO 'nextclouduser'@'localhost' IDENTIFIED BY 'PASSWORT-HIER-EINTRAGEN' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EXIT;

Wer die Befehle und ihre Auswirkung kennt, kann den Datenbanknamen oder den Nutzernamen auch gerne anpassen.

Hinweis: Beim Passwort nur große und kleine Buchstaben sowie Zahlen verwenden. Datenbanken mögen Sonderzeichen teilweise nicht. Lege einfach ein langes komplexes Passwort an. (A-Z,a-z,0-9)

4. PHP installieren

Hinweis: Bei der Erstellung dieser Anleitung war PHP8.5 aktuell. Je nach dem wann du diese Anleitung liest, gibt es eine neuere Version! Passe in dem Fall einfach die Nummer der Pakete an 😉

Die offiziellen php-Repositorys anbinden:

curl -fsSLo deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg
install -m 0644 deb.sury.org-php.gpg /usr/share/keyrings/deb.sury.org-php.gpg
rm -f deb.sury.org-php.gpg
. /etc/os-release
printf 'Using suite: %s\n' "$VERSION_CODENAME"
case "$VERSION_CODENAME" in
trixie | bookworm | bullseye)
  printf '%s\n' \
    "Types: deb" \
    "URIs: https://packages.sury.org/php/" \
    "Suites: $VERSION_CODENAME" \
    "Components: main" \
    "Signed-By: /usr/share/keyrings/deb.sury.org-php.gpg" | sudo tee /etc/apt/sources.list.d/php.sources >/dev/null
  ;;
*)
  printf 'Sury PHP unterstützt Debian trixie, bookworm, or bullseye.\n' >&2
  ;;
esac

Alle notwendigen php-Pakete installieren:

apt update
apt install php8.5-fpm php8.5-mbstring php8.5-bcmath php8.5-gmp php8.5-xmlrpc php8.5-soap php8.5-apcu php8.5-smbclient php8.5-ldap php8.5-redis php8.5-gd php8.5-xml php8.5-intl php8.5-imagick php8.5-mysql php8.5-cli php8.5-ldap php8.5-zip php8.5-curl redis-server libmagickcore-7.q16-10-extra php-apcu php-redis libapache2-mod-php8.5 -y

Öffne folgende Datei und ändere die Einträge ab bzw. entferne einfach das ; am Anfang der Zeile.

nano /etc/php/8.5/cli/php.ini

Zu ändern:

date.timezone = UTC
memory_limit = 512M
upload_max_filesize = 500M
post_max_size = 500M
max_execution_time = 300
opcache.interned_strings_buffer=64

Und das gleiche hier noch einmal:

nano /etc/php/8.5/fpm/php.ini

Zu ändern:

date.timezone = UTC
memory_limit = 512M
upload_max_filesize = 500M
post_max_size = 500M
max_execution_time = 300
opcache.interned_strings_buffer=64

Ja in beiden Dateien müssen die gleichen Einstellunge gesetzt werden.
Die Werte können aber nach Belieben angepasst werden.
Wenn du mehr RAM hast, kannst du gerne mehr als 512MB zur Verfügung stellen.

Nun müssen wir noch kurz für REDIS ein paar Parameter setzen.
Öffne die Datei:

nano /etc/php/8.5/mods-available/apcu.ini

Füge die letzten zwei Zeilen hinzu:

extension=apcu.so
apc.enabled=1
apc.enable_cli=1

Nun haben wir php und den Mem-Cache eingerichtet. Damit sollte die NextCloud flott laufen.

5. SSL-Zertifikat für HTTPS

Wir erstellen uns hier ein selbst signiertes SSL-Zertifikat.
Dein Browser wird zwar eine Warnung beim Aufrufen später ausgeben, aber wir können SSL sauber nutzen.
Hier in dem Beispiel nutzen wir die Domain wolke.loal für unsere NextCloud.
Wenn du eine andere Domain nutzen willst, ändere die Einträge ab.

Wer ein gültiges Zertifikat nutzen möchte, kann z.B. sich eins mit Let’s Encrypt ausstellen lassen.
Es wird dabei allerdings eine gültige Domain benötigt!

openssl genrsa -out /etc/ssl/private/wolke-local.pem 4096
chmod 0600 /etc/ssl/private/wolke-local.pem
chown root:root /etc/ssl/private/wolke-local.pem

Wir legen uns ein Zertifikat an, was 10 Jahre lang gültig ist.

openssl req -new -x509 \
  -key /etc/ssl/private/wolke-local.pem \
  -out /etc/ssl/certs/wolke-local.pem \
  -days 3650 \
  -sha256 \
  -subj "/CN=wolke.local" \
  -addext "subjectAltName=DNS:wolke.local"
cp /etc/ssl/certs/wolke-local.pem /etc/ssl/certs/wolke-lokal-chain.pem
chmod 0644 /etc/ssl/certs/wolke-lokal-chain.pem
chown root:root /etc/ssl/certs/wolke-lokal-chain.pem
openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096
chmod 0644 /etc/ssl/certs/dhparam.pem
chown root:root /etc/ssl/certs/dhparam.pem

Merke dir die Pfade der Zertifikate, die brauchen wir gleich für die Konfiguration von Apache2!

6. Apache2 Konfiguration

Lege eine neue Konfiguration für NextCloud an.

nano /etc/apache2/sites-available/nextcloud.conf

Hier ist eine Beispielkonfiguration.
Ändere die Pfade für die SSL-Zertifikate ab, wenn du andere nutzt.

# HTTP → HTTPS Redirect
<VirtualHost *:80>
    ServerName wolke.local
    ServerAlias www.wolke.local

    # Alle HTTP-Anfragen auf HTTPS umleiten
    Redirect permanent / https://wolke.local/
</VirtualHost>

# HTTPS VirtualHost
<VirtualHost *:443>
    ServerName wolke.local
    ServerAlias www.wolke.local

    DocumentRoot /var/www/nextcloud

    # SSL-Konfiguration
    SSLEngine on
    SSLCertificateFile       /etc/ssl/certs/wolke-local.pem
    SSLCertificateKeyFile    /etc/ssl/private/wolke-local.pem
    SSLCertificateChainFile  /etc/ssl/certs/wolke-lokal-chain.pem
    SSLOpenSSLConfCmd        DHParameters /etc/ssl/certs/dhparam.pem

    # Sichere SSL-Protokolle und Cipher
    SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
    SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256
    SSLHonorCipherOrder on

    # HSTS Header (HTTP Strict Transport Security)
    <IfModule mod_headers.c>
        Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
        Header always set Referrer-Policy "no-referrer"
        Header always set X-Content-Type-Options "nosniff"
        Header always set X-Frame-Options "SAMEORIGIN"
        Header always set X-XSS-Protection "1; mode=block"
        Header always set Permissions-Policy "geolocation=(), microphone=(), camera=()"
    </IfModule>

    # Nextcloud DocumentRoot Verzeichnis
    <Directory /var/www/nextcloud/>
        Require all granted
        AllowOverride All
        Options FollowSymLinks MultiViews

        # DAV deaktivieren (wichtig für Nextcloud)
        <IfModule mod_dav.c>
            Dav off
        </IfModule>

        # Umgebungsvariablen setzen
        SetEnv HOME /var/www/nextcloud
        SetEnv HTTP_HOME /var/www/nextcloud
    </Directory>

    # PHP 8.5 FPM Handler
    <FilesMatch \.php$>
        SetHandler "proxy:unix:/run/php/php8.5-fpm.sock|fcgi://localhost"
    </FilesMatch>

    # Logging
    ErrorLog ${APACHE_LOG_DIR}/nextcloud-error.log
    CustomLog ${APACHE_LOG_DIR}/nextcloud-access.log combined
</VirtualHost>

Diese Konfiguration ist eine gute Basis. Sie enthält allerdings NICHT alle Konfigurationsparameter für Erweiterungen.
Falls du spezielle Addons installierst, musst du unter Umständen die Konfiguration noch erweitern.
Diese Infos kannst du in der Regel aus der ReadME der jeweiligen Erweiterung entnehmen.

Solltest du die NextCloud gleich an einem anderen Ort ablegen wollen, passe die Pfade an (/var/www/nextcloud).
Gibt es bereits eine neue php-Verison als php8.5, ändere die Versionsangabe ebenfalls ab.

Als nächstes deaktivieren wir die Standardkonfiguration von Apache2, aktivieren unsere und testen sie einmal.
Wenn alles passt, starten wir Apache2 neu.

a2dissite 000-default.conf
a2ensite nextcloud.conf
apache2 -t
systemctl restart apache2

Damit SSL und der REDIS-Cache funktionieren, müssen wir das noch kurz aktivieren.

phpenmod -s apache2 apcu
phpenmod -s cli apcu
systemctl restart apache2

7. NextCloud installieren

NextCloud herunterladen, entpacken und im passenden Pfad ablegen.
Das ist mit sehr wenigen Schritten erledigt.

wget https://download.nextcloud.com/server/releases/latest.zip
unzip latest.zip
mv nextcloud /var/www/
chown -R www-data:www-data /var/www/nextcloud/
rm latest.zip

Nun kann die Installation im Webbrowser erfolgen.
Rufe dazu https://wolke.local auf und gebe im Installationsassistent alle notwendigen Daten ein.

– Lege ein Administrator-Konto mit Nutzername und Passwort fest
– Gebe die Zugangsdaten für die Datenbank an

Hinweis: Wir haben hier nur die php-Pakete für MySQL/MariaDB installiert. Das nutzen wir ja auch. Aus diesem Grund erscheint allerdings eine Warnung bei der Einrichtung. Das passt so, es funktioniert trotzdem.

8. Warnungen / Fehler entfernen

NextCloud spuckt eventuell ein paar Warnungen, Fehler oder Hinweise aus.
Diese kann der Installationsassistent seit über 6 Jahren nicht einfach selbst lösen.
Diese lassen sich aber recht schnell beseitigen.

Führe als erstes diesen Befehl aus:

su www-data -s /bin/sh -c 'php /var/www/nextcloud/occ maintenance:repair --include-expensive'

Jetzt sollte die Warnung mit Datenbankfehler und MIME-Formate weg sein.

Als nächstes fügen wir noch diese Zeilen in der NextCloud-Konfiguration hinzu:

nano /var/www/nextcloud/config/config.php
  'memcache.local' => '\\OC\\Memcache\\APCu',
  'memcache.distributed' => '\\OC\\Memcache\\Redis',
  'memcache.locking' => '\\OC\\Memcache\\Redis',
  'redis' => array(
     'host' => 'localhost',
     'port' => 6379,
      ),
  'maintenance_window_start' => 2,
  'default_phone_region' => 'DE',
  'instanceid' => 'Meine-Erste-NextCloud',

Damit hätten wir die Meldung zum APC / REDIS-Cache / Memcache weg, die Wartungszeiträume auf 2 Uhr Nachts gesetzt und für die Telefonnummern Deutschland als Region gesetzt.
Die Instanz-ID haben wir mal auf „Meine-Erste-NextCloud“ gesetzt.

Nun bleiben nur nur noch Meldungen zu Mailserver, Zwei-Faktor-Konfiguration und AppAPI übrig.
Das kannst du selbst im Webinterface bei Bedarf einstellen.
Das sind nur Hinweise, keine Pflicht-Themen die es zwingend zu beheben gilt!

FERTIG!

Deine NextCloud sollte nun laufen!
Im Administrationsbereich findest du zwar noch ein paar Hinweise, diese sind aber nicht kritisch und können bei Bedarf von dir selbst über das Webinterface behoben werden.
Die Grundfunktionen der NextCloud sind nun alle vorhanden!

Du kannst jetzt weitere Benutzer anlegen, den Desktop-Client oder die Smartphone-App verbinden und deine Daten über deine eigene Wolke verwalten!

In der Standardinstallation von NextCloud fehlen noch Erweiterungen wie Kalender, Kontakte, Office, …
Diese müssen bei Bedarf händisch installiert werden.

Ich wünsche viel Spaß!

Und jetzt?

>> Nutze CronJobs für Hintergrundaufgaben
>> Aktualisiere deine Cloud regelmäßig
>> Installiere Erweiterungen


Das Ende ist Nah, aber einfach

Weil alles von Hand zu machen doch etwas Zeit braucht, gibt es hier ein einfaches Bash-Script.
Das macht genau das, was alles als ausführlicher Text hier drüber steht.
Nicht mehr, nicht weniger.
Da du dich bis ans Ende dieser Seite nun begeben hast, sollte dir der Aufbau vermutlich klar sein und du kannst das Script ohne Bedenken oder große Nachfragen ausführen lassen.
Falls du die Anleitung noch nicht gelesen hast, tu es! Das Wissen brauchst du, falls mal was sein sollte.
HIER ist das Script.
Einfach mit wget auf den Server packen, chmod +x Installations-Script.sh abschicken und schon gehts los!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre, wie deine Kommentardaten verarbeitet werden.