Ein paar irrelevante Tutorials

Nextcloud

Voraussetzungen

Diese Beschreibung setzt auf einem installierten Ubuntu Linux Server in aktueller LTS-Version auf. Die Ressourcenanforderungen sind normalerweise überschaubar. Das hängt vom vorgesehenen Anwendungszweck ab. Ich betreibe eine Nextcloud in einer VM mit 4 GiB RAM und 2 Prozessorkernen und eine bei einem Hoster, die mit 8 GiB RAM und 6 virtuellen Prozessorkernen total überdimensioniert ist. Beim Massenspeicher sollte man nicht zu geizig sein, schließlich soll sie ja Daten speichern und bereithalten. Diese Beschreibung geht außerdem davon aus, dass der Server über eine Domain von außen erreichbar ist. Hier tut es natürlichauch eine dynamische Domain oder eine Tunnellösung wie Cloudflare oder Pangolin.

Installation

Nach der Basisinstallation eines Linux-Servers loggt man sich per Remote-Shell auf dem Server ein. Um die weiteren Befehle im Root-Modus ohne vorgestelltes "sudo" absetzen zu können, wechselt man zunächst mit
sudo su
in den Root-Modus. Danach ist zunächst der Apache Webserver zu installieren.
apt install apache2 -y
Anschließend wird das Repository für die benötigten Programme hinzugefügt.
apt install software-properties-common
add-apt-repository ppa:ondrej/php
apt update
Dann werden die benötigten Module installiert. 
apt install php8.3 libapache2-mod-php8.3 php8.3-zip php8.3-xml php8.3-mbstring php8.3-gd php8.3-curl php8.3-imagick libmagickcore-6.q16-6-extra php8.3-intl php8.3-bcmath php8.3-gmp php8.3-cli php8.3-mysql php8.3-zip php8.3-gd  php8.3-mbstring php8.3-curl php8.3-xml php-pear unzip php8.3-apcu redis-server php8.3-redis php8.3-smbclient php8.3-ldap php8.3-bz2
Der Apache Webserver wird über die Datei /etc/php/8.3/apache2/php.ini konfiguriert. Dazu öffnet man sie mit nano zum bearbeiten:
nano /etc/php/8.3/apache2/php.ini
Hier sucht man die folgenden Parameter (strg+w) und ändert sie wie folgt ab:
memory_limit = 4096M
upload_max_filesize = 20G
post_max_size = 20G
date.timezone = Europe/Berlin
output_buffering = Off
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

Nun wird der Datenbankserver installiert.
apt install mariadb-server
und konfiguriert:
mysql_secure_installation
Die vorgestellten Werte können weitestgehend übernommen werden. Es ist aber ein DB-Passwort vorzugeben. Danach ist die Datenbank zu erstellen und einzurichten sowie der DB-User zu generieren.
mysql
CREATE DATABASE nextcloud;
CREATE USER 'nextclouduser'@'localhost' IDENTIFIED BY 'PASSWORT';
GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextclouduser'@'localhost';
FLUSH PRIVILEGES;
EXIT;

Zunächst ist die neueste Version von Nextcloud herunter zu laden, zu entpacken und in den Webordner zu verschieben:
cd /tmp && wget https://download.nextcloud.com/server/releases/latest.zip
unzip latest.zip
mv nextcloud /var/www/
Nun liegen die Dateien im richtigen Ordner. Jetzt ist die Config-Datei dazu zu erstellen:
nano /etc/apache2/sites-available/nextcloud.conf

<VirtualHost *:80>
ServerAdmin master@domain.com
DocumentRoot /var/www/nextcloud/
ServerName
<Directory /var/www/nextcloud/>
Options +FollowSymlinks
AllowOverride All
Require all granted
<IfModule mod_dav.c>
Dav off
</IfModule>
SetEnv HOME /var/www/nextcloud
SetEnv HTTP_HOME /var/www/nextcloud
</Directory>

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
 
Nun wird die Site im Webserver aktiviert:
a2ensite nextcloud.conf
und die Default-Website muss noch deaktiviert werden, sonst liefert der Apache unter der Adresse, über die er ansprechbar ist, nur seine Statusseite aus:
a2dissite 000-default.conf
Danach sind noch einige Apache-Module zu aktivieren:
a2enmod rewrite
a2enmod headers
a2enmod env
a2enmod dir
a2enmod mime
Damit das wirksam wird, muss der Apache-Webserver neu gestartet werden.
service apache2 restart
Der Datenordner ist zu erstellen und vorzubereiten.
mkdir /home/data/
chown -R www-data:www-data /home/data/
chown -R www-data:www-data /var/www/nextcloud/
chmod -R 755 /var/www/nextcloud/

Nachinstallationsarbeiten

SSL-Absicherung mit Let's Encrypt

 
Zur Absicherung wird ein SSL-Zertifikat benötigt. Das gibt es kostenlos von Let's Encrypt. Dazu wird zunächst der Bot installiert, der das Zertifikat installiert und mit dem man es regelmäßig erneuern kann:
apt install certbot python3-certbot-apache
und angewendet
certbot --apache -m master@domain.com -d cloud.domain.com
Damit das Zertifikat regelmäßig erneuert wird, ergänzen wir die Datei /etc/crontab um die Zeilen
0 11 3 *rootcertbot renew >> /var/log/letsencrypt-renew.log && service apache2 reload > /dev/null 2>&1
0 11 6 *rootcertbot renew >> /var/log/letsencrypt-renew.log && service apache2 reload > /dev/null 2>&1
0 11 9 *rootcertbot renew >> /var/log/letsencrypt-renew.log && service apache2 reload > /dev/null 2>&1
0 11 12 *rootcertbot renew >> /var/log/letsencrypt-renew.log && service apache2 reload > /dev/null 2>&1

Wartungscronjob einrichten

Nun muss noch der Cronjob eingerichtet werden, der die regelmäßigen Verwaltungsaufgaben der Cloud anstößt. Dazu wird die Datei /etc/crontab ergänzt um die Zeile:
*/5  *  *  *  * php -f /var/www/nextcloud/cron.php

Abschlussarbeiten, Warnungen beheben

Jetzt kann man die Domain ansurfen und die Installation abschließen. Noch werden einige Fehler und Warnungen angezeigt. Darum sind noch ein paar Änderungen notwendig.
 
In der Datei "/etc/php/8.3/mods-available/apcu.ini" ist apc zu aktivieren:
 apc.enable_cli=1
und die Datei "/var/www/nextcloud/config/config.php" zu ergänzen:
  "default_language" => "de",
"default_locale" => "de",
'default_phone_region' => 'DE',
'skeletondirectory' => '',
"loglevel" => 3,
'filelocking.enabled' => 'true',
'maintenance_window_start' => '1',
'memcache.local' => '\OC\Memcache\APCu',
'memcache.locking' => '\OC\Memcache\Redis',
'redis' => array(
'host' => 'localhost',
'port' => 6379,
),
HSTS aktivieren:
nano /etc/apache2/sites-enabled/nextcloud-le-ssl.conf
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains;preload"
</IfModule>
 
Wartungsfenster auf 1:00 Uhr nachts einstellen, Memory Cache einrichten und Default-Telefon-Zone einstellen, um Warnhinweise zu vermeiden:
nano /var/www/nextcloud/config/config.php
'maintenance_window_start' => 1,
'filelocking.enabled' => true,
'memcache.locking' => '\OC\Memcache\Redis',
'redis' => array(
'host' => 'localhost',
'port' => 6379,
'timeout' => 0.0,
),

'memcache.local' => '\OC\Memcache\APCu',
'memcache.distributed' => '\OC\Memcache\Redis',
'memcache.locking' => '\OC\Memcache\Redis',
'redis' => [
'host' => 'localhost',
'port' => 6379,
],

'logtimezone' => 'Europe/Berlin', 'default_phone_region' => 'DE',
'opcache.save_comments' => 1,
'opcache.revalidate_freq' => 60,
'opcache.interned_strings_buffer' => 10,
Apache neustarten, um die Änderungen zu übernehmen:
service apache2 restart

Virenschutz

Möchte man die Nextcloud-App "Antivirus for files" nutzen, dann muss auf dem Server ein Virenschutz installiert sein. Hier ist die Beschreibung für die Installation von ClamAV. Zunächst sind die Pakete zu installieren:
apt install clamav clamav-freshclam clamav-daemon -y
ClamAV stoppen und Virendatenbanken aktualisieren:
 
service clamav-freshclam stop
freshclam
service clamav-freshclam start
Clamav Konfiguration anpassen, um größere Dateien (50MB) und Container-Dateien mit bis zu 25 Unterverzeichnissen scannen zu können:
cp /etc/clamav/clamd.conf /etc/clamav/clamd.conf.bak
sed -i "s/MaxFileSize.*/MaxFileSize 50M/" /etc/clamav/clamd.conf
sed -i "s/MaxDirectoryRecursion.*/MaxDirectoryRecursion 25/" /etc/clamav/clamd.conf
sed -i "s/PCREMaxFileSize.*/PCREMaxFileSize 50M/" /etc/clamav/clamd.conf
sed -i "s/StreamMaxLength.*/StreamMaxLength 50M/" /etc/clamav/clamd.conf
Im Anschluss daran werden die ClamAV relevanten Dienste neu gestartet:
service clamav-freshclam restart && service clamav-daemon restart
Mit der Adminkennung ist zunächst in der Nextcloud die App „Antivirus for files“ zu aktivieren. Unter Verwaltungseinstellungen/Sicherheit sind dann die Parameter wie folgt einzustellen: 

Sonstiges

Trusted Domains

Wenn beim Ansurfen der Nextcloud eine Fehlermeldung kommt, die darauf hinweist, dass man über eine nicht vertrauenswürdige Domain zugreift, dann muss man die Datei "config.php", die sich im Web-Verzeichnis (in meinem Fall und in der Regel "/var/www/nextloud") im Unterordner "config" befindet, ergänzen:

 'trusted_domains' => 
array (
0 => 'nexcloudhome.tld',
1 = > '173.37.47.11" ),

Hier sind alle Domains, unter denen man die Nextcloud aufrufen möchte, anzugeben. Das können auch IP-Adressen sein. Damit das wirksam wird, muss wieder einmal der Apache neu gestartet werden:

service apache2 restart

Protokolle löschen

Die Protokolle werden wohl nicht automatisch bereinigt. Daher kann die entsprechende Datei sehr groß werden und die Darstellung der Protokolle im Browser lange dauern. Wenn man die Nextcloud-Protokolldatei zunächst wegkopieren und dann leeren möchte, dann geht das auf der Konsole mit den Befehlen: 
sudo cp /home/data/nextcloud.log /home/data/nextcloudlog.bup
sudo truncate /home/data/nextcloud.log --size 0

OCC-Kommandos ausführen.

Manchmal findet man im Web Hinweise zur Lösung auftretender Problemey, bei denen man OCC-Kommandos ausführen soll. Das geht folgendermaßen: Man wechselt auf der Konsole in den Ordner, indem sich die Datei occ befindet (hier: /var/www/nextcloud) und setzt das Kommando ab:
 
sudo -u www-data php occ {Kommando}

Datensicherung

Zur Absicherung gegen Datenverluste und eigene Dummheit sollten die Daten des Web-Verzeichnisses, das Datenverzeichnis und ein Dump der Datenbank regelmäßig gesichert werden. Mit diesen gesicherten Daten lässt die die Nextcloud komplett neu wieder aufbauen. Das klappt, ich hatte Gelegenheit, das zu testen :-(
 
Dazu wird zunächst regelmäßig mit einem Cron-Job ein Dump der DB erzeugt:
0 1* * *hanswurst  mysqldump -u nextclouduser --password=************ nextcloud > /home/hanswurst/sicherung/nextcloud.sql
Dann werden die zu sichernden Daten jede Nacht vom lokalen Server abgeholt:
0 0* * * hanswurst  rsync -avE -e "ssh -p 22" hanswurst@{IP}:/home/data  /backup/
0 1* * * hanswurst rsync -avE -e "ssh -p 22" hanswurst@{IP}:/var/www/nextcloud /backup/
0 2* * * hanswurst rsync -avE -e "ssh -p 22" hanswurst@{IP}:/home/hanswurst/sicherung/nextcloud.sql /backup/
Hierzu ist keine Passwortübergabe erforderlich, weil der Connect per Zertifikat erfolgt (s. Server absichern). Die Vorgabe des Ports (-p 22) ist nur erforderlich, wenn man auf dem Zielsystem den Standardport für den SSH-Zugriff geändert haben sollte. Dann verwendet man natürlich die geänderte Portnummer. Ansonsten kann man den Parameter auch weglassen.
 
Auf dem lokalen Server liegen die Daten dann im Verzeichnis /backup. Der lokale Server wird bei mir jede Nacht per Proxmox Backup Server gesichert. Diese Sicherungen werden 7 Tage aufbewahrt. So lassen sich auch die Sicherungen der Nextcloud jeweils für 7 Tage recovern.