====== Nextcloud LAMP ======
===== Lernziel =====
Installation einer Nextcloud
Diese Anleitung ist für **Ubunut 24.04** und **Nextcloud Hub 25 Autumn (32.0.5)** - 2026.02
===== Voraussetzungen =====
* Grundkentnisse der Linux CLI.
* Verständniss zur Software Installation auf einem Linux System.
===== Theorie =====
Diese Dokumentation beschreibt die installierten Systempakete und PHP-Konfigurationen, die für den stabilen Betrieb einer Nextcloud-Instanz unter Ubuntu 24.04 erforderlich sind. Die Auswahl der Pakete und die Optimierung der php.ini-Werte gewährleisten dabei maximale Performance, eine zuverlässige Verarbeitung großer Dateiuploads und die Unterstützung für Echtzeit-Benachrichtigungen.
===== Installation der notwendiben Pakete =====
apt install -y apache2 mariadb-server openssl zip unzip wget curl php php-gmp php-intl \
php-gd php-mysql php-curl redis-server php-redis php-apcu php-imagick libmagickcore-6.q16-6-extra \
php-mbstring php-bcmath php-zip php-xml php-bz2 php-pear php-memcached
systemctl enable --now redis-server
systemctl enable --now apache2
^ Paketname ^ Funktion ^
| apache2 | Der Webserver, der die Nextcloud-Anfragen verarbeitet. |
| mariadb-server | Das Datenbanksystem zum Speichern von Benutzerdaten und Metadaten. |
| openssl | Tool für Verschlüsselung (wichtig für HTTPS/SSL-Zertifikate). |
| zip, unzip | Programme zum Packen und Entpacken von Dateiarchiven. |
| wget, curl | Kommandozeilen-Tools zum Herunterladen von Dateien und Senden von API-Requests. |
| php | Das Basispaket der Skriptsprache PHP. |
| php-gmp | Unterstützung für große Zahlen (wichtig für Verschlüsselung/WebAuthn). |
| php-intl | Internationalisierungs-Funktionen (Sprachunterstützung). |
| php-gd | Grafikbibliothek zur Erstellung von Vorschaubildern (Thumbnails). |
| php-mysql | Schnittstelle zwischen PHP und der MariaDB-Datenbank. |
| php-curl | Ermöglicht PHP die Kommunikation mit anderen Servern. |
| redis-server | In-Memory Datenbank für schnelleres Caching. |
| php-redis | PHP-Erweiterung zur Anbindung an den Redis-Server. |
| php-apcu | Lokaler Cache im Arbeitsspeicher für PHP-Performance. |
| php-imagick | Bildbearbeitung (unterstützt mehr Formate als GD). |
| libmagickcore-6.q16-6-extra | Erweiterte Formatsunterstützung für die ImageMagick-Bibliothek (z. B. SVG/PDF). |
| php-mbstring | Verarbeitung von Multi-Byte-Strings (notwendig für UTF-8/Sonderzeichen). |
| php-bcmath | Präzise mathematische Berechnungen (wichtig für Passwort-Hashing). |
| php-zip | Ermöglicht PHP das Lesen und Schreiben von ZIP-Archiven. |
| php-xml | Verarbeitet XML-Daten (zwingend erforderlich für WebDAV). |
| php-bz2 | Unterstützung für Bzip2-komprimierte Dateien. |
| php-pear | Repository für PHP-Erweiterungen und Komponenten. |
| php-memcached | Alternative oder Ergänzung zu Redis für Objekt-Caching. |
===== Konfigurationsdateien =====
==== PHP ====
vim /etc/php/8.3/apache2/php.ini
memory_limit = 4096M
upload_max_filesize = 20G
max_file_uploads = 20
post_max_size = 20G
date.timezone = Europe/Berlin
output_buffering = Off
opcache.enable=1
opcache.enable_cli=1
opcache.max_accelerated_files=30000
opcache.memory_consumption=2048
opcache.interned_strings_buffer=64
opcache.save_comments=1
opcache.revalidate_freq=60
^ PHP-Einstellung ^ Funktion / Bedeutung ^
| memory_limit = 4096M | Maximaler Arbeitsspeicher, den ein PHP-Skript verbrauchen darf. |
| upload_max_filesize = 20G | Maximale Größe für eine einzelne Datei beim Hochladen. |
| max_file_uploads = 20 | Maximale Anzahl an Dateien, die gleichzeitig hochgeladen werden dürfen. |
| post_max_size = 20G | Maximalgröße der Daten, die per POST-Methode gesendet werden (sollte >= upload_max_filesize sein). |
| date.timezone = Europe/Berlin | Festlegung der Standard-Zeitzone für Zeitstempel in PHP. |
| output_buffering = Off | Deaktiviert die Pufferung der Ausgabe (zwingend erforderlich für Nextcloud-Performance). |
| opcache.enable = 1 | Aktiviert den Bytecode-Cache, damit PHP-Skripte nicht bei jedem Aufruf neu geladen werden müssen. |
| opcache.enable_cli = 1 | Aktiviert den OPcache auch für PHP-Befehle auf der Kommandozeile (wichtig für Cronjobs). |
| opcache.max_accelerated_files = 30000 | Maximale Anzahl an Dateien, die im OPcache zwischengespeichert werden können. |
| opcache.memory_consumption = 2048 | Reservierter Arbeitsspeicher in MB für den OPcache. |
| opcache.interned_strings_buffer = 64 | Speicherplatz für identische Textstrings innerhalb der PHP-Skripte zur RAM-Optimierung. |
| opcache.save_comments = 1 | Kommentare im Code werden gespeichert (wichtig, da Nextcloud diese für Annotationen ausliest). |
| opcache.revalidate_freq = 60 | Zeitintervall in Sekunden, in dem PHP prüft, ob sich Skripte geändert haben. |
==== MariaDB ====
mysql_secure_installation
Enter current password for root (enter for none):
Switch to unix_socket authentication [Y/n] Y
Change the root password? [Y/n] Y
New password: sqlroot
Re-enter new password: sqlroot
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
...
...
Thanks for using MariaDB!
----
mysql
MariaDB [(none)]> create database nextcloud;
Query OK, 1 row affected (0.001 sec)
MariaDB [(none)]> create user 'nc_user'@'localhost' identified by 'nc_pass';
Query OK, 0 rows affected (0.001 sec)
MariaDB [(none)]> grant all privileges on nextcloud.* to 'nc_user'@'localhost' identified by 'nc_pass';
Query OK, 0 rows affected (0.001 sec)
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.001 sec)
MariaDB [(none)]> exit;
Bye
==== Apache Webserver ====
rm /etc/apache2/sites-enabled/000-default.conf
**Apache Konfiguration**
vi /etc/apache2/sites-available/netxcloud.con
# 1. Basis-Informationen
ServerAdmin master@domain.com
DocumentRoot /var/www/nextcloud/
# Ersetze 'deine-domain.de' durch deine tatsächliche Domain!
ServerName deine-domain.de
# 2. Verzeichnis-Konfiguration
Options +FollowSymlinks MultiViews
AllowOverride All
Require all granted
# Deaktiviert WebDAV von Apache, da Nextcloud sein eigenes mitbringt
Dav off
# Wichtig für die korrekte Pfaderkennung und zur Vermeidung von
# Warnungen in der Nextcloud-Übersicht
SetEnv HOME /var/www/nextcloud
SetEnv HTTP_HOME /var/www/nextcloud
# 3. High Performance Backend (Notify Push)
# Leitet Push-Benachrichtigungen an den internen Client weiter
ProxyPass /push/ http://127.0.0.1:7867/push/
ProxyPassReverse /push/ http://127.0.0.1:7867/push/
# 4. Logging
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
----
ln -s /etc/apache2/sites-available/netxcloud.conf /etc/apache2/sites-enabled/nextcloud.conf
# Aktiviert das Basis-Proxy-Modul
a2enmod proxy
# Aktiviert die Unterstützung für HTTP-Proxys (wichtig für Port 7867)
a2enmod proxy_http
# Sicherheitshalber auch Rewrite aktivieren (braucht Nextcloud fast immer)
a2enmod rewrite
# Bindet PHP direkt in den Apache Webserver ein, damit .php-Dateien verarbeitet werden
a2enmod php8.3
systemctl restart apache2
==== Nextcloud ====
cd /var/www/
wget https://download.nextcloud.com/server/releases/latest.zip
unzip latest.zip
chown -R www-data:www:data nextcloud
----
vim /var/www/nextcloud/config/config.php
'memcache.locking' => '\\OC\\Memcache\\Redis',
'redis' => array(
'host' => 'localhost',
'port' => 6379,
'timeout' => 0.0,
),
'memcache.local' => '\\OC\\Memcache\\APCu'
'default_phone_region' => 'DE',
'maintenance_window_start' => 1,
----
sudo -u www-data php occ maintenance:repair --include-expensive
sudo -u www-data php occ db:add-missing-indices
**Es gibt einige Fehler in Ihrer Systemkonfiguration.**
AppAPI-Bereitstellungs-Daemon
Der Standard-Deploy-Daemon von AppAPI ist nicht eingerichtet. Bitte in den Einstellungen einen Standard-Deploy-Daemon registrieren, um externe Apps (Ex-Apps) zu installieren.
* Kann in den App-Einstellungen deaktiviert werden.
HTTPS-Zugriff und URLs
Unsicherer Zugriff auf die Website über HTTP. Es wird dringend empfohlen, Ihren Server so einzurichten, dass HTTPS erforderlich ist. Ohne HTTPS funktionieren einige wichtige Webfunktionen wie "Kopieren in die Zwischenablage" oder "Service Worker" nicht!
* Es wird ein gültiges SSL Zertifikat benötigt.\\
* Wenn man eine Webserver mit Öffentlich erreichbarer IP hat: https://certbot.eff.org/
E-Mail-Test
Sie haben Ihre E-Mail-Serverkonfiguration noch nicht festgelegt oder überprüft. Gehen Sie bitte zu den "Grundeinstellungen", um diese festzulegen. Benutzen Sie anschließend den Button "E-Mail senden" unterhalb des Formulars, um Ihre Einstellungen zu überprüfen.
* Einrichten eines Gültigen Email Accoutes
----
{{tag>cli installation nextcloud}}
----