Nextcloud Ubuntu Server mit Let’s Encrypt Zertifikat

In Implementierung, Private Cloud, Tech-Blog, Web Services by Ralf Lueders

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!