Nextcloud ist eine Open-Source-Plattform für die Dateisynchronisierung und -freigabe sowie für die Zusammenarbeit. Sie ermöglicht Benutzern das Speichern, Synchronisieren und Teilen von Dateien, Kalendern, Kontakten und mehr über verschiedene Geräte hinweg. Nextcloud bietet zudem erweiterbare Funktionen wie Online-Office-Anwendungen, Integration von Drittanbieter-Apps und eine sichere Datenverwaltung auf eigenen Servern oder Cloud-Diensten.
Grundlagen |
Installation |
Konfiguration |
Cloudsoftware | Installation Apache / MySQL | Konfiguration Apache Webserver |
Installation Nextcloud | Konfiguration Nextcloud | |
Installation PHP Cache | Konfiguration PHP Cache | |
Terminal Befehle | Installation der SSL Software Certbot | |
Tipps und Tricks | OnlyOffice ( Office Suite ) | Konfiguration Datenbank |
———————————————- | ———————————————- | ———————————————- |
Cloudsoftware
Nextcloud ist eine Open-Source-Plattform, die Cloud-Speicher- und Kollaborationsdienste bereitstellt. Sie ermöglicht Benutzern, ihre Dateien, Kalender, Kontakte und mehr in der Cloud zu speichern und von verschiedenen Geräten aus darauf zuzugreifen. Im Gegensatz zu kommerziellen Cloud-Diensten erlaubt Nextcloud die Installation auf eigenen Servern, wodurch Nutzer die Kontrolle über ihre Daten behalten können. Es bietet außerdem Funktionen wie Online-Office-Anwendungen, Ende-zu-Ende-Verschlüsselung und die Möglichkeit zur Integration von Drittanbieter-Apps für erweiterte Funktionalität.
Installation Apache / MySQL
Mit dem folgenden Befehl wird der Apache und MySQL Server sowie einige von Nextcloud benötigte Pakete installiert:
1 |
sudo apt install -y mariadb-server mariadb-client apache2 apache2-utils php-bcmath php-curl php-cli php-common php-mbstring libmemcached-tools php-gd php-gmp php-imagick php-intl php-mbstring php-bz2 php-xml php-mysql php-zip php-dev php-curl php-fpm php-dompdf redis-server php-redis php-smbclient php-ldap wget curl unzip |
MySQL Datenbank Setupscript für Mariadatenbanken ausführen:
1 |
sudo mysql_secure_installation |
Ausgabe des Setupscripts:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY! In order to log into MariaDB to secure it, we’ll need the current password for the root user. If you’ve just installed MariaDB, and you haven’t set the root password yet, the password will be blank, so you should just press enter here. Enter current password for root (enter for none): OK, successfully used password, moving on… Setting the root password ensures that nobody can log into the MariaDB root user without the proper authorisation. Set root password? [Y/n] y New password:your-password Re-enter new password:your-password Password updated successfully! Reloading privilege tables.. … Success! By default, a MariaDB installation has an anonymous user, allowing anyone to log into MariaDB without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? [Y/n] y … Success! Normally, root should only be allowed to connect from ‚localhost‘. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? [Y/n] y … Success! By default, MariaDB comes with a database named ‚test‘ that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? [Y/n] y – Dropping test database… … Success! – Removing privileges on test database… … Success! Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? [Y/n] y … Success! Cleaning up… All done! If you’ve completed all of the above steps, your MariaDB installation should now be secure. Thanks for using MariaDB! |
Nextcloud benötigt einige Apache Module sowie das php-fpm Modul. Diese werden wie folgt aktiviert:
1 |
a2enmod proxy_fcgi setenvif mpm_event rewrite headers env dir mime ssl http2 |
und danach das PHP-FPM Modul:
1 |
a2enconf php8.2-fpm |
Installation Nextcloud
Die Nextcloudsoftware ( v27) kann von der Nextcloud Webseite heruntergeladen werden und wird anschließend in das Webserververzeichnis entpackt und der Zugriff für den Webserver (www-data) gesetzt:
1 2 3 4 |
cd /var/www/ sudo wget <a href="https://download.nextcloud.com/server/releases/latest.zip" target="_blank" rel="noopener">https://download.nextcloud.com/server/releases/latest.zip</a> sudo unzip latest.zip sudo chown -R www-data.www-data nextcloud |
Installation PHP Cache
Caching-Technologien wie OPCache, APCu, Memcache und Redis sind wichtige Instrumente zur Leistungssteigerung von Webanwendungen wie Nextcloud. OPCache speichert PHP-Code im Arbeitsspeicher, um die Ausführungszeit zu verkürzen. Memcache und Redis sind In-Memory-Datenbanken, die häufig verwendete Daten und Sitzungsinformationen speichern, um den Zugriff auf Datenbanken zu minimieren. APCu (Alternative PHP Cache userland) ist eine PHP-interne Cache-Erweiterung.Diese Caching-Methoden tragen dazu bei, die Geschwindigkeit, Skalierbarkeit und Reaktionsfähigkeit von Nextcloud und ähnlichen Anwendungen zu verbessern.
OPCache | APCu | MemCache | |
Verwendungszweck | OPCache (Opcode Cache) ist ein PHP-interner Cache, der den kompilierten PHP-Code im Arbeitsspeicher speichert. Er zielt darauf ab, die Ausführungszeit von PHP-Skripten zu verkürzen, indem er den Bedarf an erneuter Kompilierung reduziert. | APCu: APCu ist ein PHP-interner Cache, der speziell für das Zwischenspeichern von PHP-Code und Daten innerhalb einer Anwendung entwickelt wurde. Er ist für Anwendungen gedacht, die auf einem einzigen Server laufen. | Memcache ist ein verteilter Cache-Speicher, der über das Netzwerk auf mehrere Server verteilt werden kann. Er wird oft verwendet, um häufig verwendete Daten wie Sitzungen oder Datenbankabfragen zwischen verschiedenen Servern zu teilen. |
Datenverwaltung | Speichert den kompilierten PHP-Code, was die Geschwindigkeit der Ausführung von PHP-Skripten erhöht. | APCu speichert Daten im Arbeitsspeicher des Servers, wodurch der Zugriff schneller wird. Es ist gut für den schnellen Zugriff auf Daten innerhalb derselben Anwendung geeignet. | Memcache ist für die schnelle Verteilung von Daten zwischen verschiedenen Servern optimiert. Er bietet eine größere Skalierbarkeit und eignet sich gut für Anwendungen mit mehreren Servern. |
Anwendungsbereiche | Wird verwendet, um die Ausführung von PHP-Code zu beschleunigen, indem der bereits kompilierte Code im Arbeitsspeicher gespeichert wird. | Geeignet für Anwendungen, die auf einem einzelnen Server laufen und den PHP-Code und spezifische Anwendungsdaten zwischenspeichern möchten. | Geeignet für Anwendungen mit hoher Last und/oder mehreren Servern, die Daten über das Netzwerk verteilen müssen. |
Integration | Ist ein Teil des PHP-Kerns und wird standardmäßig in modernen PHP-Versionen aktiviert. | Ist eine PHP-interne Cache-Erweiterung und erfordert keine separate Cache-Server-Installation. Es ist spezifisch für PHP-Anwendungen. | Ist ein eigenständiger Cache-Server und erfordert eine separate Installation und Konfiguration. Er kann von verschiedenen Anwendungen und Programmiersprachen genutzt werden. |
Installation | sudo apt install php-opcache | sudo apt install php-ACPu | sudo apt install php-memcache |
Danach wird der Apache Webserver und PHP-fpm neu gestartet:
1 |
sudo systemctl restart apache2 php8.2-fpm |
Installation der SSL Software Certbot
Die Verwaltung von SSL Zertifikaten übernimmt der LetsEncrypt Certbot mit Hilfe des Apache Plugins.
1 |
sudo apt install python3-certbot-apache certbot |
Konfiguration Apache Webserver
Die grundlegende Apache Konfiguration wird in der Datei /etc/apache2/apache2.conf
vorgenommen. Um alle .htaccess Datein im Verzeichnis /var/www zu berücksichtigen muss folgender Eintrag geändert werden:
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
zu:
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
Damit die Nextcloud Dateien (/var/www/nextcloud) mit dem Apache Webserver verarbeitet werden können, muss hierzu eine Apache Konfigurationsdatei erstellt werden. Die Konfigurationsdateien für Webseiten befinden sich im Verzeichnis /etc/apache/sites-available. Innerhalb dieses Verzeichnisses wird dann die Nextcloud Webseiten Konfiguration (/etc/apache2/sites-available/nextcloud.conf) mit folgendem Inhalt erstellt.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
Alias /nextcloud "/var/www/nextcloud/" <Directory /var/www/nextcloud/> Options +FollowSymlinks AllowOverride All <IfModule mod_dav.c> Dav off </IfModule> SetEnv HOME /var/www/nextcloud SetEnv HTTP_HOME /var/www/nextcloud <IfModule mod_headers.c> Header always set Strict-Transport-Security "max-age=15552000;$ </IfModule> </Directory> ## use php 8.2 // not used for debian 12 - default is php8.2 #<FilesMatch \.php$> ## For Apache version 2.4.10 and above, use SetHandler to run PHP as a fastCGI process server #SetHandler "proxy:unix:/run/php/php8.2-fpm.sock|fcgi://localhost" #</FilesMatch> |
Um HTTP/2 zu aktivieren muss die /etc/apache2/apache2.conf
Datei um folgende Zeile ergänzt werden:
1 |
Protocols h2 h2c http/1.1 |
Damit ist die Apache Konfiguration abgeschlossen.
Konfiguration Nextcloud
Die Konfiguration von Nextcloud selbst wird über die Datei /var/www/nextcloud/config/config.php festgelegt. Ist die Datei nicht vorhanden ( Neuinstallation ) kann mittels kopieren der vorkonfigurieten config.sample.php ( /var/www/nextcloud/config/config.sample.php ) die config.php erstellt werden. Folgende Änderungen sollten an der vorkonfigurieten config.php vorgenommen werden
-
- Datenbankkonfiguration
123'dbname' => '<Datenbankname>','dbuser' => '<Datenbank Benutzer>','dbpassword' => '<Datenbank PAsswort>', - Zugriff konfigurieren
12345'trusted_domains' =>array (0 => '<IP Nummer>',1 => '<Nextcloud/Server URL>',), - Cache aktivieren ( APCu )
1'memcache.local' => '\OC\Memcache\APCu',
- Datenbankkonfiguration
Konfiguration PHP Cache
Der Einsatz von Cache Systemen, wie beispielsweise ACPu oder MemCache, beschleunigt den Zugriff und die Leistung von Anwendungen. Im Gegensatz zu MemCache beschleunigt APCu auch Skriptausführungszeiten und bereits kompilirten PHP Code. Dies ermöglicht beispielsweise die Nutzung von APCu zur Steigerung der Ausführungsleistung, während gleichzeitig MemCache für die Zwischenspeicherung verwendet wird. ACPu ist auf lokale Ausführungen beschränkt, wodurch ACPu schneller ist als MemCache aber dafür weniger skalierbar. Im Gegensatz zu MemCache geht bei einem System-, oder Dienstneustart von ACPu der Cacheinhalt verloren.
Die PHP (v8.2) Konfiguration ist in der Datei /etc/php/8.2/fpm/php.ini
enthalten. Welche PHP Konfigurationsdatei aktuell geladen wurde kann mit folgendem Befehl angezeigt werden:
1 |
php -i | grep "Loaded Configuration File" |
Auflistung aktivierter PHP Optionen:
1 |
cat $(php -i | grep "Loaded Configuration File" | cut -d">" -f2) | grep -v "^;\|^$" | sed 's/^\[/\n\[/g' |
PHP Caching für PHP 8.2 aktivieren
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
UsedPHPConfig=$(php -i | grep "Loaded Configuration File" | cut -d">" -f2) # PHP interne Funktionen cat << EOF >> $UsedPHPConfig opcache.enable=1 opcache.enable_cli=1 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=10000 opcache.memory_consumption=128 opcache.save_comments=1 opcache.revalidate_freq=1 # PHP externe Funktionen cat << EOF >> $UsedPHPConfig max_execution_time = 300 max_input_time = 600 memory_limit = 512M upload_max_filesize = 10240M EOF |
APCu Cache aktivieren
1 2 3 4 5 6 |
UsedPHPConfig=$(php -i | grep "Loaded Configuration File" | cut -d">" -f2) # PHP Cache aktivieren cat << EOF >> $UsedPHPConfig apc.enabled=1 EOF |
Danach wird der Apache Webserver und PHP-fpm neu gestartet:
1 |
sudo systemctl restart apache2 php8.2-fpm |
Infosource : docs.nextcloud.com | bobcares.com | addictedtocode.de
Konfiguration Datenbank
Nextcloud benötigt eine SQL Datenbank. Dazu wird ein Datenbenutzer ( nextcloud_user ) mit dem dazugehörigen Passwort ( password ) sowie die Datenbank ( nextcloud_db1 ) mit folgendem Befehl erstellt:
1 |
sudo mysql -e " create database nextcloud_db1; create user nextcloud_user1@localhost identified by 'password'; grant all privileges on nextcloud_db1.* to nextcloud_user1@localhost; flush privileges;" |
Die Datenbank samt Benutzer und Passwort kann alternativ mit einem grafischen Werkzeug wie beispielsweise phpmyadmin erstellt werden.
Somit ist alles für die abschließende Einrichtung der Nextcloud Software eingerichtet und die finale Konfiguration kann nun über den Browser erfolgen. Ein Aufruf ( http://<URL/ServerIP>/nextcloud) der Server URL/IP gefolgt von dem in der Datei /etc/apache2/sites-available/nextcloud.conf definierten Apache Alias ( Alias /nextcloud “/var/www/nextcloud/”) verweist nun auf das Nextcloud Installations Interface/Webseite. Hier wird das Nextcloud Administrator Konto erstellt sowie der Datenbankzugriff konfiguriert und die Datenbank mit den Nextcloud spezifischen Daten erstellt.
Terminal Befehle
Nextcloud erfordert unter Umständen, wie z.B. dem Ausfall des Webinterfaces einige Terminaleingaben. Die wichtigsten sind im Folgenden gelistet:
- Datenverzeichnis aller User neu einlesen :
1sudo -u www-data php /var/www/nextcloud/console.php files:scan --all - Datenverzeichnis einzelner User neu einlesen :
1sudo -u www-data php /var/www/nextcloud/console.php files:scan Nutzername - Nextcloud update via Terminal :
1sudo -u www-data php /var/www/nextcloud/updater/updater.phar
oder
1sudo -u www-data php /var/www/nextcloud/occ upgrade - Maintenance Modus / Nextcloud-Online-Updater zurücksetzen
1sudo -u www-data php /var/www/nextcloud/occ maintenance:repair
Tipps und Tricks
-
- Zugriff auf das HostdateisystemMit der “External storage support ” Erweiterung ist der Zugriff auf lokale oder entfernte Dateisysteme möglich. Für den lokalen Zugriff müssen jedoch die Rechte der entsprechenden Verzeichnisse korrekt gesetzt sein. Soll beispielsweise der Lese sowie Schreibzugriff auf das Verzeichnis /home/user/Archiv über das Nextcloud Webinterface gewährt werden, müssen Lese-, und Schreibrechte auf das Verzeichniss für den Webserverbenutzer (www-data) ermöglicht werden:
1sudo chown -R www-data.www-data /home/user/Archiv
Um dem Benutzer <user> ebenfalls vollen Zugriff auf das Verzeichnis /home/user/Archiv zu gewähren, muss Dieser der Gruppe www-data hinzugefügt werden
1sudo adduser user www-data
und Lese-, sowie Schreibrechte sämtlicher Verzeichnisse und Dateien innhalb von /home/user/Archiv für den Besitzer (www-data) und die Gruppe (www-data) gewährt werden
12sudo chmod -R 775 /home/user/Archiv # für Verzeichnisse und Dateiensudo chmod -R 664 /home/user/Archiv # für nicht auszuführende Dateien, sicherer als 775
ACHTUNG ! Vollzugriff des Webserverbenutzers auf Verzeichnisstrukuren außerhalb des Verzeichnisses /var/www können ein Sicherheitsrikio darstellen
- Nextcloud-Online-Updater zurücksetzenMit unter kann es passieren das ein Nextcloud Update nicht korrekt durchläuft und bei einem Schritt (step) hängen bleibt. Es gibt zwei Möglichkeiten den Updateprozesse zurückzusezten:
- Zugriff auf das HostdateisystemMit der “External storage support ” Erweiterung ist der Zugriff auf lokale oder entfernte Dateisysteme möglich. Für den lokalen Zugriff müssen jedoch die Rechte der entsprechenden Verzeichnisse korrekt gesetzt sein. Soll beispielsweise der Lese sowie Schreibzugriff auf das Verzeichnis /home/user/Archiv über das Nextcloud Webinterface gewährt werden, müssen Lese-, und Schreibrechte auf das Verzeichniss für den Webserverbenutzer (www-data) ermöglicht werden:
-
-
- 1. Shellbefehl : sudo -u www-data php /var/www/nextcloud/occ maintenance:repair
- 2. den Ordner /var/www/nextcloud/updater-<various string> komplett löschen
-
Sonstiges
-
-
- Nextcloud Installations Skript : https://www.c-rieger.de/nextcloud-installation-mit-nur-einem-skript-zero-sh/
- Externe Datenverzeichnisse in nextcloud automatisch einlesen : https://decatec.de/home-server/nextcloud-direkter-zugriff-auf-dateien-ueber-das-dateisystem/
- Nextcloud v21 PHP8 nachrüsten: https://www.c-rieger.de/nextcloud-21-mit-php-8-0-nachruesten/
- Nextcloud v21 installieren und updaten: https://www.c-rieger.de/manuelles-nextcloud-upgrade/
-
PHP Version für nextcloud festlegen
Um Nextcloud mit einer abweichenden PHP Version als der auf dem Server voreingestellen Version zu nutzen, kann die PHP Version in der entsprechenden Apache Konfiguration ( z.b /etc/apache2/sites-available/website.conf ) festgelegt werden. Dazu wird folgender Absatz für die Nutzung von PHP 8.2 in Apachekonfigurationsdatei ( etc/apache2/sites-available/nextcloud.conf ) hinzugefügt:
1 2 3 4 |
<FilesMatch \.php$> # For Apache version 2.4.10 and above, use SetHandler to run PHP as a fastCGI process server SetHandler "proxy:unix:/run/php/php8.2-fpm.sock|fcgi://localhost" </FilesMatch> |
by Speefak | www.markus-blog.de | docs.nextcloud.com | www.c-rieger.de | www.digitalocean.com |