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.
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).
- 350 Watt bei 0,29 Cent verursachen im Dauerbetrieb rund 880,-/Jahr
- 10 Watt bei 0,29 Cent verursachen im Dauerbetrieb rund 25,-/Jahr
- 7,6 Watt bei 0,29 Cent verursachen im Dauerbetrieb rund 19,25/Jahr
- 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.
Funktioniert grundsätzlich ohne Probleme. Die Anbindung von Hdd-Festplatten über USB führt allerdings zu Verzögerungen beim Zugriff.
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
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.
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.
$ sudo apt-get upgrade
$ sudo apt-get update
In Kurzform:
Backup der Daten erstellen, die bestehende LTS auf den aktuellen Stand bringen, dann den release-Updater laufen lassen.
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).
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 (...)
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
Unter ubuntu muss man sich darüber klaren werden, ob man die stabilen Quellen des Pakets oder die aktuelleren des Herstellers verwenden möchte.
Da nextcloud ein webbasierter Dienst, muss ein Webserver, wie z.B. apache2 oder nginx laufen.
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
- libapache2-mod-php
- wget [wird später für zum Download des nextcloud.zip gebraucht]
- unzip [wird zum auspacken des nextcloud.zip gebraucht]
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
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.
memory_limit = 512MB
Erfordert einen Neustart. Unklar ist noch wo überall das Limit geändert werden muss.
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.
PHP muss in apache2 oder nginx intergriert werden und kann insoweit als Modul von apache2 betrachtet werden.
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;
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.
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
Nextcloud selbst ist ein auf PHP basierender Dienst der innerhalb des Webservers apache2 läuft.
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.
Hinweis! OCC Kommandos müssen entweder im nextcloud-Ordner ausgeführt werden oder dem occ-Kommando muss der Pfad "/var/www/" vorangestellt werden.
$ sudo -u www-data php occ maintenance:mode --on
$ sudo -u www-data php occ maintenance:mode --off
sudo -u www-data php occ config:system:set maintenance_window_start --type=integer --value=1
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/
Ein linux-Programm das in festlegaberen Intervallen festglegbare Befehle/Programme ausführt.
crontab -e
su crontab -eu www-data
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
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.
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.
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).
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)
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
Mit nmon kann über die Konsole ein ...
Ü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$
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:
|