Dieser Artikel beschreibt die Installation eines Nextcloud Servers auf Ubuntu Server, der mit einem kostenlosen und sich automatisch erneuernden Let’s Encrypt SSL-Zertifikat abgesichert ist.
Was ist Nextcloud?
Viele Firmen würden gerne Daten einfach ablegen und über einen Link zur Verfügung stellen, scheuen sich aber vor der kostenintensiven und unsicheren Speicherung bei Diensten wie Dropbox, OneDrive, iCloud, etc.
Die kostenlose Open-Source Software Nextcloud bietet mit ihren sehr praktischen Funktionen eine kostenlose und ausgereifte Alternative:
- Installierbar auf der Server-Infrastruktur des eigenen Unternehmens (Private Cloud)
- Ankopplung an das Active Directory des Unternehmens (Benutzer, Gruppen und Anmelde-Kennwort)
- Platzbegrenzung nur durch den verfügbaren Plattenplatz
- Komfortables Web-Interface
- sehr leistungsfähige Client-Software für Windows, Mac, Linux, Android und iOS
- Ordner und Dateien können auch via Link an andere Personen zur Verfügung gestellt werden
(optionalem Passwort, optionales Ablaufdatum, optionale Bearbeitungsfreigabe) - Interne Datensicherung
Was ist ein Let’s Encrypt Zertifikat?
Um einen Web Server mit https (SSL) abzusichern, musste man bisher ein teures Server-Zertifikat bei einer Zertifizierungsstelle kaufen, und jedes Jahr kostenpflichtig erneuern.
Das Non-Profit Industrie-Konsortium Internet Security Research Group bietet seit kurzem kostenlose Web-Server-Zertifikate unter dem Namen Let’s Encrypt an. Der Nextcloud Server wird dann mit diesem https-Zertifikat ausgestattet, das sich sogar regelmässig automatisch erneuert.
Warum Nextcloud Ubuntu Server?
Als Betriebsystem für die Nextcloud-Software verwende ich hier Ubuntu Server 16.04 LTS (Long Time Support). Es lässt sich relativ einfach installieren und unterstützt alle benötigten Komponenten sehr gut. Die LTS-Version wird auch länger durch Updates unterstützt. Die automatische Konfiguration des Apache Web Servers auf Ubuntu durch den Let’s Encrypt Client ist auch implementiert.
Für maximale Flexibilität und Betriebssicherheit installiert den Server am besten als virtuelle Maschine unter Hyper-V, VMware oder KVM.
Betriebsystem-Installation
Der erste Schritt ist die Installation und Update des Servers
- Ubuntu Server 20.04 LTS im ISO Format herunterladen und die virtuelle Maschine damit installieren
- bei Software-Optionen LAMP Server und OpenSSH Server wählen
- feste LAN IP-Adresse zuweisen
- Port 80 (http) und 443 (hhtps) vom Internet zugänglich machen (Destination NAT in der Firewall)
- der öffentliche Domain-Name für den Nextcloud server (z.B. cloud.testfirma.com) muss auf die externe NAT-Adresse zeigen
- der Einfachkeit halber wird hier die Installation unter dem root-Account durchgeführt
Damit alle notwendigen Komponenten vorhanden sind, werden sie nachinstalliert und ein Update durchgeführt:
apt-get --yes update apt-get --yes upgrade apt-get --yes install git apt-get --yes install zip apt-get --yes install mysql-server apt-get --yes install apache2 apt-get --yes install libapache2-mod-php apt-get --yes install php7.4-xml apt-get --yes install php7.4-dom apt-get --yes install php7.4-xmlwriter apt-get --yes install php7.4-zip apt-get --yes install php7.4-gd apt-get --yes install php7.4-curl apt-get --yes install php7.4-mbstring apt-get --yes install php7.4-mysql apt-get --yes install php7.4-ldap
Jetzt sollte man den Server neu starten.
Datenbereich erstellen
Um den Betriebsystem-Bereich vor Platznot zu schützen, sollte man eine eigene virtuelle Festplatte als Datenbereich definieren.
Damit man sie später erweitern kann, sollte man LVM (Logical Volume Manager) verwenden. Das optimale Dateisystem ist das moderne btrfs.
Sobald man die neue virtuelle Platte erzeugt hat (hier z.B. 200GB, dynamisch wachsend) an die virtuelle Maschine angehängt hat, ist sie im ubuntu-Server unter /dev/sdb sichtbar.
Das Physical Volume für LVM wird dann so erzeugt und überprüft:
pvcreate /dev/sdb pvs PV VG Fmt Attr PSize PFree /dev/sdb vgdata lvm2 a-- 200.00g 0
Die Volume Group und das logische Volume folgen:
vgcreate vgdata /dev/sdb lvcreate -l 100%FREE -n data vgdata lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert data vgdata -wi-ao---- 200.00g
Das Dateisystem btrfs auf dem Logical Volume wird erzeugt:
mkfs.btrfs /dev/vgdata/data
Mount Point erzeugen:
mkdir /data
Diese Zeile an /etc/fstab anhängen, damit der neue Datenbereich beim Starten gemountet wird
/dev/vgdata/data /data btrfs defaults,autodefrag,inode_cache 0 1 mount /data
Web Server konfigurieren
Es wird ein Ordner für die Nextcloud Software und ihren Dateibereich erzeugt
mkdir /data/store chown www-data /data/store
Die Apache Konfiguration /etc/apache2/sites-enabled/000-default.conf kann dann so aussehen:
<VirtualHost *:80> ServerAdmin webmaster@firma.com DocumentRoot /data/nextcloud ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined <Directory /data/nextcloud/> Options Indexes FollowSymLinks MultiViews AllowOverride All Require all granted </Directory> </VirtualHost>
Dann wird Apache aktiviert:
systemctl enable apache2 service apache2 restart
Datenbank anlegen
Damit die ownCloud gut wachsen kann, verwende ich MariaDB/MySQL für diese Installation.
Um MySQL zu aktivieren und zu starten ist folgendes einzugeben:
systemctl enable mysql service mysql restart
Als Beispiel soll hier das root-Passwort 2Secret4u für den MariaDB-Server vergeben werden:
mysqladmin password 2Secret4u
Nun kann man sich bei MariaDB anmelden und eine Datenbank erstellen:
mysql --password=2Secret4u CREATE DATABASE nextcloud; ALTER DATABASE nextcloud CHARSET utf8; CREATE USER 'nextcloud'@'%' IDENTIFIED BY '2Secret4u'; GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextcloud'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES; QUIT
Nextcloud Software Installieren
Zunächst gehen wir in das /data Verzeichnis und holen die aktuelle Server-Software.
Es ist sinnvoll auf https://nextcloud.com/install/#instructions-server den Link auf die aktuelle, stabile Version zu kopieren und mit wget zu laden, zum Beispiel:
cd /data wget https://download.nextcloud.com/server/releases/nextcloud-18.0.4.zip unzip nextcloud-18.0.4.zip chown -R www-data.root /data/nextcloud
Nachdem die Software entpackt ist, sollte sie sich direkt im Verzeichnis /data/nextcloud befinden und der Browser sollte bei der Eingabe von http://cloud.testfirma.com die Initialisierungs-Dialog von Nextloud angezeigt werden.
Dort muss man dann diese Parameter eingeben:
- Benutzer: admin
- admin-Passwort festlegen
- Datenverzeichnis: /data/store
- mySQL wählen
- Datenbank: nextcloud
- Datenbank-Benutzer: dba
- Datenbank-Passwort: 2Secret4u
- Datenbank-Host: localhost
Weitere Dokumentationen findet man unter https://docs.nextcloud.com.
Let’s Encrypt Software Installieren
Als Let’s Encrypt Client verwenden wir certbot. Durch dieses Kommando wird certbot installiert:
apt-get --yes install python-certbot-apache
Den Client für die automatische Apache-Konfiguration startet man so:
certbot --authenticator standalone --installer apache -d cloud.firma.com --pre-hook "service apache2 stop" --post-hook "service apache2 start"
Falls es mehrere DNS Namen gibt, kann man weitere anhängen (-d aaa.xxx.com -d bbb.xxx.com …)
Bei der https-Umleitungs-Frage wählen wir Option 2
Um zu gewährleisten, dass das Zertifikat regelmässig erneuert wird, kann ein Script /etc/cron.monthly/certbot-renew mit folgendem Inhalt erstellen:
#!/bin/bash
/usr/bin/certbot renew
service apache2 restart
Ausführbar machen:
chmod 755 /etc/cron.monthly/certbot-renew
Dann cron Service neu starten:
service cron restart
Ab jetzt ist der Nextcloud Server unter https://cloud.firma.com erreichbar.
Gibt man nur http://cloud.firma.com ein, wechselt der Browser gleich auf https://cloud.firma.com.
Plattenplatz erweitern
Falls der Datenbereich zu klein wird, kann man ihn in einer virtualisierten Umgebung (VMware, Hyper-V, etc.) einfach erweitern. Nachdem man der virtuellen Platte /dev/sdb mit Hilfe des jeweiligen VM-Managers mehr Plattenplatz zugewiesen hat, wird die virtuelle Nextcloud-Maschine erstmal neugestartet.
Dann wird dem LVM die Plattenerweiterung mitgeteilt:
pvresize /dev/sdb
Jetzt folgt die Erweiterung des logical volume:
lvextend -l +100%FREE /dev/vgdata/data
Nun kann das Filesystem erweitert werden:
btrfs filesystem resize max /data
Fertig!