logo
Artikel Diskussion (0)
nextcloud
(it.linux.nextcloud)
    

Inhalt
          1. 1. Übersicht
          2. 2. Hardware
             2.1. Raspberry/Desktop AMD/Intel NUC
             2.2. Raspberry PI
             2.3. INTEL NUC Kit NUC5PPYH
          3. 3. Betriebssystem, z.B. Debian/raspian
             3.1. Begriff
             3.2. update debian/raspbian/ubuntu
             3.3. Major Update von einer LTS zur nächsten LTS
                3.3.1. Einleitung
                3.3.2. Vorgehen/Befehle
                3.3.3. troubleshooting
                3.3.4. snap-store
          4. 4. Webserver
             4.1. nginx
             4.2. apache2
                4.2.1. Installation/Konfiguration
             4.3. nginx
             4.4. Konfiguration
          5. 5. PHP, aktuell 8.3
             5.1. Memory
             5.2. Update
             5.3. für nextcloud
             5.4. Upstream-Handler
             5.5. php.ini
             5.6. Notwendige Module für PHP:
                5.6.1. Modul ZIP (php-zip)
                5.6.2. Modul APCu - OCPHintException: [0]: Memcache OCMemcacheAPCu not available for local cache (Is the matching PHP module installed and enabled?)
          6. nextcloud
                6.1. Installation
                6.2. Major-Updates
                6.3. OCC-Kommandos/Maintenance-Mode
                   6.3.1. occ Befehle ausführen
                   6.3.2. Maintenance-Mode
                   6.3.3. Maintenance Zeit einstellen
                   6.3.4. Wenn die Installation stecken bleibt:
                6.4. cron
             6.1. allgemein
             6.2. nextcloud
          7. 6. mariadb
             7.1. Installation/Konfiguration
             7.2. Problem: Exception File Locked
          8. https/letsencrypt.org (apache)
             8.1. Neu (nginx)
             8.2. alt (apache)
             8.3. Erneuern:
             8.4. Problem: Fehlercode: SSL_ERROR_RX_RECORD_TOO_LONG
          9. https/letsencrypt.org (nginx)
          10. DynDNS
          11. RAID-System
          12. nmon
          13. Autoshutdown/Wake on LAN
             13.1. Änderungslog nextcloud mit Problemen

1. 1. Übersicht

Nextcloud, PHP (z.B. Vers. 7.0), Webserver (z.B. apache2 oder nginx), Datenbank (postgres oder maria), Betriebssystem (z.B. Linux) und Hardware (z.B. raspberry Pi mit Harddisks) sind sechs verschiedene Komponenten die aufeinander aufbauen aber überwiegend austauschbar sind und zusammen den Betrieb einer "eigenen" cloud ermöglichen.

2. 2. Hardware

2.1. Raspberry/Desktop AMD/Intel NUC

Als Hardware kann ein raspberry oder ein beliebiger AMD/Intel-PC genutzt werden. Empfehlenswert der Einsatz von schnellen SSD-Platten um die Zugriffszeiten so kurz wie möglich zu halten. Dazu kommt ein Netzwerkanschluss mit möglichst hohem UP-/DOWN-Link, wenn die Cloud nicht nur im internen Netzwerk arbeiten soll.

Bei der Hardwareauswahl sollte ein Kompromiss zwischen Stromverbrauch und Leistung gefunden werden, hier kommt es auf jedes Watt an, da der Server ja 24/7 laufen wird. Ein an sich ausreichender 5 Jahre alter Desktop PC mit einer max. Leistungsaufnahme von 350 KW verursacht nennenswert mehr Stromkosten als z.B. ein Intel NUC (max. 10 Watt) oder rasperry PI (max 7.6 Watt).

  1. 350 Watt bei 0,29 Cent verursachen im Dauerbetrieb rund 880,-/Jahr
  2. 10 Watt bei 0,29 Cent verursachen im Dauerbetrieb rund 25,-/Jahr
  3. 7,6 Watt bei 0,29 Cent verursachen im Dauerbetrieb rund 19,25/Jahr
  4. Quelle: https://www.wiwo.de/tools/stromkostenrechner

D.h. im Vergleich mit Kosten für externes Hosting (192,- Euro/Jahr für 200 GB) fällt die Nutzung eines alten Desktops als Alternative weg, auch wenn man die Einmalkosten für einen NUC (ca. 130,- für 240 GB) oder Raspberyy (ca. 100,- Euro) berücksichtigt.

2.2. Raspberry PI

Funktioniert grundsätzlich ohne Probleme. Die Anbindung von Hdd-Festplatten über USB führt allerdings zu Verzögerungen beim Zugriff.

2.3. INTEL NUC Kit NUC5PPYH

Auch ein NUC Kit NUC5PPYH von Intel kommt in Betracht. Zu Einschränkung kann es insoweit mit der Kompatibilität zu verschiedenen Linux Distributionen kommen. Siehe unten

3. 3. Betriebssystem, z.B. Debian/raspian

Auf die Hardware setzt ein Betriebssystem auf, üblicherweise eine Linux-Variante. Raspbian für raspberry Pi oder debian für Desktopsysteme. Das gewählte Betriebssystem ist mittels Bootimages auf die gewünschte Hardware aufzuspielen. Bie Debian kann z.B. unter Windows mittels der Software Rufus eine USB-Stick/CD-ROM erstellt werden.

Das NUC Kit NUC5PPYH hatte Probleme mit dem X-Server unter Debian 10 (Buster), ohne Probleme hingegen liess sich ein Ubutunu 20.04 installieren.

Das Clear-Linux von Intel habe ich nicht probiert.

3.1. Begriff

Ubuntu ist eine linux Distribution. Das LTS steht für Long Term Support, d.h. eine Version die länger als die "Standard-Versionen" mit Updates versorgt wird.

3.2. update debian/raspbian/ubuntu

$ sudo apt-get upgrade

$ sudo apt-get update

3.3. Major Update von einer LTS zur nächsten LTS

3.3.1. Einleitung

In Kurzform:

Backup der Daten erstellen, die bestehende LTS auf den aktuellen Stand bringen, dann den release-Updater laufen lassen.

3.3.2. Vorgehen/Befehle

Mit ssh eine Verbindung aufbauen sofern das System headless läuft. In der shell dann:

sudo apt upgrade
suod apt update
sudo do-release-upgrade

Die Session läuft dann durch bis zu einer Neustartanforderung. An dieser Stelle geht die ssh-Session verloren was unproblematisch ist.

Es ist aus meiner Sicht einfacher die config-Dateien aus dem alten System zu übernehmen und soweit notwendig anzupassen (z.B. der Verweis auf die aktuelle ... in der Nginx-Config).

3.3.3. troubleshooting

Sollte bei einem Update über ssh vor dem Neustart ,die Verbindung zum Server verloren gehen, kann man nur versuchen eine neue Verbindung zu bekommen und mit

sudo apt update
weiter zu machen, dem stand ein blockierender Prozess aus der abgebrochenen ssh-Verbindung entgegen. Ich habe dann zunächst gewartet bis dieser Prozess zu Ende war, man konnte über top nachvollziehen. Ein weiterer sudo apt update hat dann gezeigt, dass die Installation im Hintergrund jetzt von dpkg blockiert wurde, der Prozess (...)
3.3.4. snap-store
Processing snap replacements

refreshing snap core22

installing snap firmware-updater

refreshing snap snap-store

snap-store is now tracking 2/stable/ubuntu-24.04

If needed, you can revert to your previous revision with:

$ snap revert snap-store

4. 4. Webserver

4.1. nginx

Unter ubuntu muss man sich darüber klaren werden, ob man die stabilen Quellen des Pakets oder die aktuelleren des Herstellers verwenden möchte.

4.2. apache2

Da nextcloud ein webbasierter Dienst, muss ein Webserver, wie z.B. apache2 oder nginx laufen.

4.2.1. Installation/Konfiguration

Um Apache zu installieren ist der Befehl:

apt-get install apache2 

Apache2 wird über

/etc/apache2/apache2.conf
und über die ins das Verzeichnis
/etc/apache2/mods-enabled
verlinkten Dateien aus dem Verzeichnis der verfügbaren (= available)
/etc/apache2/mods-available
konfiguriert. Das Gleiche gilt für die Konfigurationen (confs).

Beispiel: Nach der Installation von PHP müssen die beiden Dateien

php7.0.conf
und
php7.0.load
in das Verzeichnis
/etc/apache2/mods-enabled
verlinkt werden:
cd /etc/apache2/mods-enabled
sudo ln -s ../mods-available/php7.0.conf
sudo ln -s ../mods-available/php7.0.load

Mit dem Befehlt:

apachectl -t -D DUMP_MODULES

Können die geladenen Module angezeigt werden.

$ sudo service apache2 restart

error-log

/var/log/apache2/error.log

Notwendige weitere Installationspakete

  1. libapache2-mod-php
  2. wget [wird später für zum Download des nextcloud.zip gebraucht]
  3. unzip [wird zum auspacken des nextcloud.zip gebraucht]

4.3. nginx

4.4. Konfiguration

Die zentrale Konfigurationsdatei ist

/etc/nginx/nginx.conf

Alle weiteren, auch die nachstehenden, werden nur geladen, wenn diese über in der nginx.conf entsprechend nachgeladen werden (include ./site-enabled/*).

Bei Systemen mit nur einer Webadresse (singlesites) liegt die sitespezifsche Konfiguration in der Default-Datei unter:

/etc/nginx/site-enabled

Welches aber unter ubuntu ein Link ist auf die Datei:

/etc/nginx/site-available

(...)

Die Alternatvie zu apache is nginx. Im wesentlichen ist nginx wie apache zu bedienen. Es gilt z.B. auch für einen Neustart:

sudo service nginx restart

5. 5. PHP, aktuell 8.3

PHP Hypertext Preprocessor. PHP ist eine sog. serverseitig interpretierte Skriptsprache. Dies ermöglicht die dynamische Erzeugung von HTML-Code auf Basis von Benutzereingaben. Nextcloud basiert z.B. auf PHP. PHP kann somit einen Teil der Aufgaben übernehmen, die sonst von CGI-Scripts erledigt werden, daher kann man PHP selbst als eine CGI-Variante betrachten.

Im Gegensatz zu javascript wird PHP nicht vom Client ausgeführt, sondern von einem Programm (Interpreter) auf dem Server der die Seiten zur Verfügung stellt. Der vom Interpreter erzeugte HTML-Code kann von jedem Browser gelesen werden.

PHP, dessen Syntax sich an C orientiert, liegt seit 2000 in Version 4 vor. Und mittlerweile (2024) in Version 8.

5.1. Memory

memory_limit = 512MB

Erfordert einen Neustart. Unklar ist noch wo überall das Limit geändert werden muss.

5.2. Update

Vorversion: PHP 8.1.2-1ubuntu2.19. PHP 8.1

Am einfachsten ist es, wenn einem Major-Update auf eine neu LTS auch ein neues PHP kommt, dann genügt das Majo-Update mit anschließender Anpassung des Systems.

5.3. für nextcloud

PHP muss in apache2 oder nginx intergriert werden und kann insoweit als Modul von apache2 betrachtet werden.

5.4. Upstream-Handler

Wenn es Probleme mit dem Upstream-Handler gibt, sollten man prüfen, ob unter

/etc/nginx/conf.d

der für die Version richtige Handler eingetragen ist:

upstream php-handler {    server unix:/run/php/php8.1-fpm.sock;

5.5. php.ini

Die php.ini enthält die Konfigurationsdaten für das PHP-Modul. Es gibt jeweils eine davon in den Verzeichnissen

/etc/php/8.1/cli/
/etc/php/8.1/fpm/
/etc/php/8.1//phpdbg/

Dabei sind die Einstellungen im Unterverzeichnis cli (= Comand Line Interface) maßgeblich für die PHP-Skripte die über die Lokal über das Command Line Interface interpretiert werden. Überprüfen kann man mit dem Befehl:

php --ini | grep php.ini

Die Antwort lautet dann:

Configuration File (php.ini) Path => /etc/php/7.4/cli
Loaded Configuration File => /etc/php/7.4/cli/php.ini

Die php.ini im Verzeichnis ./fpm ist maßgeblich für die Interpretation der PHP-Skripte durch den Webservr (z.B. nginx). Was man wiederum über eine index.php mit dem folgendem Befehl als einzigem Inhalt:

phpinfo();
ermittlen kann. Die Antwort sollte lauten:
PHP Version => 8.1.2-1ubuntu.2.17
(...)
Configuration File (php.ini) Path 	/etc/php/8.1/fpm
Loaded Configuration File 	/etc/php/8.1/fpm/php.ini
Scan this dir for additional .ini files 	/etc/php/8.1/fpm/conf.d 

D.h. je nach Anwendungsfall (Command Line oder Webserver) wird eine andere ini-Datei gelesen.

Ergänzend werden die jeweiligen .ini-Datein in dem jeweiligen Verzeichnis conf.d eingelesen. Hier gibt es für verschiedene PHP-Module nochmals eigene Einstellungen.

5.6. Notwendige Module für PHP:

Folgende Module müssen auch mit

apt-get install ...
geladen werden. Dass kann in einem Befehl zusammengefasst werden:
apt-get install php-xml php-cli ...

Mit dem Kommando

php -m
kann man sich zuvor die installierten Module anzeigen lassen.

php-xml 
php-cli 
php-cgi 
php-mbstring 
php-gd 
php-curl
php-apcu
Modul ZIP (php-zip)
Modul APCu - OCPHintException: [0]: Memcache OCMemcacheAPCu not available for local cache (Is the matching PHP module installed and enabled?)

APCu (= APC User Cache) Ist eine Form des APC (Alternative PHP Cache) der zur Beschleunigung von Zugriffen auf PHP-Sites dient.

Ist Nextcloud für die Nutzung von APCu konfiguriert führt ein fehlen des Moduls zu einem "Internal Server Error".

In dem file:

/etc/php/8.1/mods-available/apcu.ini

Muss am Ende eingefügt werden:

apc.enable_cli=1

6. nextcloud

Nextcloud selbst ist ein auf PHP basierender Dienst der innerhalb des Webservers apache2 läuft.

6.1. Installation
Das Paket wird mit dem Befehl
wget https://download.nextcloud.com/server/releases/nextcloud-18.0.4.zip

heruntergeladen. Dabei sollte die 18.0.4 durch die aktuelleste Versionsnummer ersetzt werden, die man ggf. googlen kann.

Die Dateien sollten dann nach
/var/www/html/
verschoben werden mit
sudo mv nextcloud-18.0.4.zip /var/www/html/

Dort muss dass Paket dann "unziped" werden und der Inhalt in das html-Verzeichnis kopiert werden, dessen Rechte/Eigentümerschaft angepasst werden müssen (www-data:www-data), damit apache2 zugreifen kann.

6.2. Major-Updates
6.3. OCC-Kommandos/Maintenance-Mode
6.3.1. occ Befehle ausführen

Hinweis! OCC Kommandos müssen entweder im nextcloud-Ordner ausgeführt werden oder dem occ-Kommando muss der Pfad "/var/www/" vorangestellt werden.

6.3.2. Maintenance-Mode
$ sudo -u www-data php occ maintenance:mode --on

$ sudo -u www-data php occ maintenance:mode --off
6.3.3. Maintenance Zeit einstellen
sudo -u www-data php occ config:system:set maintenance_window_start --type=integer --value=1
6.3.4. Wenn die Installation stecken bleibt:
sudo -u www-data php nextcloud/occ maintenance:repair
/var/www/html/
sudo -u www-data php occ [Kommando]

Die Configurationsdatei unter:

/var/www/html/config/

6.4. cron

6.1. allgemein

Ein linux-Programm das in festlegaberen Intervallen festglegbare Befehle/Programme ausführt.

crontab -e
su crontab -eu www-data

6.2. nextcloud

Nextcloud bentöigt für regelmäßige Wartungsaufgaben im Hintergrund ein Skript das regelmäßig ausgeführt wird. Eine der Lösungen dafür ist cron.

Das cron-skript liegt unter:

/var/www/nextcloud/cron.php

Das Skript wird über einen cron Eintrag für den User:

www-data
ausgeführt.

Entsprechend kann auch

7. 6. mariadb

7.1. Installation/Konfiguration

Installiert wird die Datenbank MariaDB/mySQL auch über

apt-get install mariadb-server 

Wichtig ist dass auch das php-Modul:

php-mysql
installiert worden ist/wird.

Es muss dann ein Root-User, eine Datenbank und ein Datenbanknutzer angelegt werden.

Augerufen wird die Datenbank über den Befehl:

mysql -u root -p

Auf das -u folgt der Nutzername (hier root), das -p führt zur Passwordabfrage.

7.2. Problem: Exception File Locked

nextcloud in maintenancemode versetzen!

$ sudo mariadb --password=XXXXX
MariaDB[(none)]>  show databases;

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| nextcloud          |
| performance_schema |
+--------------------+
4 rows in set (0.00 sec)

MariaDB[(none)]> use nextcloud;
MariaDB[(none)]> delete from oc_file_locks where 1;
MariaDB[(none)]> exit;
$ 

maintenance-mode beenden!

https/letsencrypt.org (apache)

Um sicherzustellen, dass die Kommunikation mit einer Website nicht überwacht werden kann und um sicherzustellen, dass die Inhalte tatsächlich von der eingegebenen Website stammen, gibt es die Möglichkeit die Verbindung mit SSL-Zertifikaten zu sichern. Für Details siehe unter Secure Socket Layer (SSL). D.h. der Webserver (nginx/apache) muss Zugriff auf einen privaten und einen öffentlichen Schlüssel haben.

Die Erstellung des Schlüssels und die Verbindung mit dem Webserver wird im folgenden beschrieben.

Neu (nginx)

Es gibt verschiedene Programme die das Erstellen und erneuern von Zeritfikaten vereinfachen. Z.B. certbot. Mit dem Befehl

certbot --nginx -d www.lexexakt.de

werden RSA-Zertifikate über den Anbieter letsencrypt erzeugt und auf dem Server gespeichert. Das Erzeugen selbst ist intransparent - man kann dann aber die Schlüssel auf dem Server prüfen.

Die Zeritfikate für die SSL-Verbindung (von letencrypt) liegen bei Ubuntu im Pfad:

/etc/letsencrypt/sub.example.com
oder
/etc/letsencrypt/live/sub.example.com

Es gibt RSA und ECC Zertifikate. Diese erfüllen die gleiche Aufgabe. ECC-Zertfikate gelten als sicherer.

Für Nginx muss der Pfad zu den Zertfikaten unter

/etc/nginx/conf.d/HttpGateway.conf
eingetragen werden. Der Eintrag sieht z.B. wie folgt aus:
# RSA certificates
ssl_certificate /etc/letsencrypt/live/www.lexexakt.de/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/www.lexexakt.de/privkey.pem; # managed by Certbot

Zum aktualisieren der Zertfikate genügt:

sudo certbot renew

alt (apache)

Unter:

:/etc/apache2/sites-available#

liegt eine Konfigurationdatei für den virtuellen SSL-Host z.B.

000-default-le-ssl.conf

Diese Konfiguration muss aktiviert werden mit dem Kommando

a2ensite 000-default-le-ssl.conf
und verweist auf den Speicherort für die Schlüsseldateien.

Z.B: /etc/letsencrypt/live/domain.de/

This directory contains your keys and certificates.

`privkey.pem`  : the private key for your certificate.
`fullchain.pem`: the certificate file used in most server software.
`chain.pem`    : used for OCSP stapling in Nginx >=1.3.7.
`cert.pem`     : will break many server configurations, and should not be used
                 without reading further documentation (see link below).

We recommend not moving these files. For more information, see the Certbot
User Guide at https://certbot.eff.org/docs/using.html#where-are-my-certificates.

8.3. Erneuern:

sudo /etc/letsencrypt/letsencrypt-auto renew

(...)
-------------------------------------------------------------------------------
Congratulations, all renewals succeeded. The following certs have been renewed:
  /etc/letsencrypt/live/sub.example.com/fullchain.pem (success)
-------------------------------------------------------------------------------

Achtung der Prozess benötigt an der Stelle

Creating virtual environment...
Installing Python packages...
mehrere Minuten für die Ausführung.

Nach Abschluss muss ggf. der Server (z.B. apache2) neu gestartet werden (siehe dort).

8.4. Problem: Fehlercode: SSL_ERROR_RX_RECORD_TOO_LONG

1. Https läuft über Port 443, daher muss der Port offen sein. Dass kann wie folgt überprüft werden:

$ nmap host.com

Starting Nmap 7.01 ( https://nmap.org ) at 2019-10-12 13:15 CEST
Nmap scan report for host.com (192.168.178.35)
Host is up (0.020s latency).
Other addresses for host.com (not scanned): 2003:dd:9f48:de00:ec7a:6c4d:6313:7bff
Not shown: 995 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh
80/tcp  open  http
139/tcp open  netbios-ssn
443/tcp open  https
445/tcp open  microsoft-ds

Nmap done: 1 IP address (1 host up) scanned in 0.48 seconds

2. Der virtuelle SSL host (VHOST) muss aktiviert sein:

apachectl -t -D DUMP_VHOSTS
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, 
using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
VirtualHost configuration:
*:443                  host.com (/etc/apache2/sites-enabled/000-default-le-ssl.conf:2)
*:80                   127.0.1.1 (/etc/apache2/sites-enabled/000-default.conf:1)

Läuft kein virtueller Host für https auf Port 443 muss dieser host aktiviert werden. Siehe oben.

https/letsencrypt.org (nginx)

10. DynDNS

11. RAID-System

Alle Blockdevices anzeigen:

$ blockdev --report

sudo apt-get install mdadm -y

sudo mdadm --create /dev/md0 --level=mirror --raid-devices=2 /dev/sda1 /dev/sdb1

Status abfragen

cat /proc/mdstat

Auswerten:;

  • [UU]
    Array ist intakt und synchron
  • [U_]
    Eine Platte ist nicht synchron

Ist eine Platte nicht synchron ist es sinnvoll die Details abzufragen:

Details abfragen

$ mdadm --detail /dev/md0

Je nach Status muss die fehlende Platte wieder hinzugefügt (siehe unten) oder ein resync durchgeführt werden.

Platte entfernen

$ mdadm /dev/md1 -r /dev/sdb1

Platte hinzufügen

$ mdadm /dev/md0 -a /dev/sdb1

12. nmon

Mit nmon kann über die Konsole ein ...

13. Autoshutdown/Wake on LAN

Über cron (user root) wird alle 20 Minuten (kann mit [crontab -u root -e] geändert werdeSkriptmit dem Namen

checkshutdown.sh 
aufgerufen.

Das Skript liegt in:

/usr/local/sbin$

13.1. Änderungslog nextcloud mit Problemen

Update auf 21.0.3:

$ sudo -u www-data php /var/www/nextcloud/occ  maintenance:repair
An unhandled exception has been thrown:
OCHintException: [0]: Memcache OCMemcacheAPCu not available for local 
cache (Is the matching PHP module installed and enabled?)

Lösung: in

/etc/php/8.0/mods-available/apcu.ini
ist die Zeile
apc.enable_cli=1
einzufügen. Es wird auch empfohlen die Zeile in der php.ini (siehe oben) zu ergänzen.

Werbung:

Auf diesen Artikel verweisen: keine Verweise