Logo d-photos

Nextcloud: Cloud-Speicher in der Hetzner Cloud

Warum

Es gibt zahlreiche Möglichkeiten seine Daten zu sichern: Auf der guten externen Festplatte, im privaten Netzwerk auf einem NAS und/oder auf einem von unzähligen Cloud-Diensten. Ich hatte bisher zwei externe Festplatten für echte Backups und ein NAS im RAID 5 von QNAP. Die Tage meines NAS’ sind allerdings gezählt: Zu laut, zu unflexibel und eine Neuanschaffung auch einfach zu teuer. Vor allem wenn man auf Grund der Lautstärke SSDs einsetzen möchte.

Meine Alternative?

Eine Kombination von Cloud Server und Storage Box von Hetzner Online.

Zwar bietet Hetzner auch eine „Storage Share“-Lösung auf Basis von Nextcloud an, allerdings ist mir hier die Einbindung des Speichers zu unflexibel. Außerdem nutze ich den Cloud Server nicht nur für den Nextcloud-Dienst.

Das Setup?

In meinem Fall habe ich einen ARM64 Cloud Server CAX21 (4 vCPUs, 8 GB RAM, OS: Ubuntu LTS 22.04) und eine Storage Box BX21 (5 TB Speicher)

Die Kosten?(Stand: 15.05.23)

  • Take-my-Money-Budget: 9,15 € (CAX21 inkl. Server-Backup und IPv4) + 48,31 € (20 TB Storage BX41) = 57,46 € pro Monat
  • Mein Setup: 9,15 € (CAX21 inkl. Server-Backup und IPv4) + 12,97 € (5 TB Storage BX21) = 22,12 € pro Monat
  • Low-Budget: 5,29 € (CAX11 inkl. Server-Backup und IPv4) + 3,36 € (1 TB Storage BX11) = 8,65 € pro Monat

Welche Kenntnisse sollte ich haben?

Du solltest keine Angst vor dem Umgang mit dem Terminal haben und Seiten wie Stack Overflow kennen und nutzen :)

Los geht’s
Vorbereitung des Servers

  1. Unter console.hetzner.cloud eine Cloud-Instanz mit der gewünschten Leistung und Ubuntu 20.04 an einem beliebigen Standort anlegen (SSH-Key und automatisches Backup nicht vergessen!)
  2. Danach unter www.hetzner.de/storage/storage-box eine Storage Box in der gewünschten Größe bestellen (dauert in der Regel ein paar Minuten bis zur Bereitstellung)
  3. Sobald die Storage Box eingerichtet ist, kann über die Robot-Oberfläche ein Passwort gesetzt werden. Für den späteren Zugriff wird Samba aktiviert und (falls nicht benötigt) der externe Zugriff deaktiviert:
    Storage Box Konfiguration
  4. Wenn der Server erstellt wurde und hochgefahren ist, sollte das System erstmal auf den neusten Stand gebracht werden. Bei einem Kernel-Update sollte das System noch neugestartet werden:
    apt update && apt upgrade && reboot
  5. Danach folgt die Hochzeit zwischen Cloud-Instanz und Storage-Box. Dafür werden mit nano /etc/backup-credentials.txt die Zugangsdaten der Storage Box hinterlegt:
    username=u237601
    password=faNgbJy12KSid761
  6. Dann wird der Eintrag in der /etc/fstab-Datei hinzugefügt:
    //u237601.your-storagebox.de/backup /storage cifs vers=3.1.1,iocharset=utf8,rw,credentials=/etc/backup-credentials.txt,gid=www-data,file_mode=0660,dir_mode=0770 0 0

    Falls ein Sub-Account der Storage Box verwendet wird, muss statt `backup` der Name des Sub-Accounts verwendet werden. Also beispielsweise: //u123456-sub1.your-storagebox.de/u123456-sub1

    Hier finden sich weiterführende Informationen zur Samba-Version

  7. Bevor das Storage eingebunden wird, müssen noch ein paar Schritte erledigt werden:
    # Zugriffsrechte für die Zugangsdaten einschränken
    chmod 400 /etc/backup-credentials.txt

    # Mountpoint anlegen
    mkdir /storage

    # NGINX, PHP8.1 und weitere Tools installieren
    apt install certbot cifs-utils keyutils \
    linux-modules-extra-$(uname -r) mysql-server-8.0 nginx \
    php-apcu php-imagick php8.1 php8.1-bcmath php8.1-bz2 \
    php8.1-cli php8.1-common php8.1-curl php8.1-fpm php8.1-gd \
    php8.1-gmp php8.1-imap php8.1-intl php8.1-mbstring \
    php8.1-mysql php8.1-opcache php8.1-readline php8.1-xml \
    php8.1-zip python3-certbot-nginx unzip
  8. „Sie dürfen das Storage jetzt mounten“:
    mount -a
  9. Im Idealfall kommt keine Fehlermeldung und die Storage Box ist nun unter /storage eingebunden.

Ring frei, Runde zwei
Installation der Nextcloud

  1. Zunächst wird die NGINX-Konfiguration vorbereitet. Diese umfasst im ersten Schritt noch kein SSL-Zertifikat, da dieses durch den Certbot automatische in die Konfiguration geschrieben wird:
    nano /etc/nginx/sites-available/cloud.domain.tld.conf
    Eine exemplarische Konfiguration findet sich auf gist.github.com oder bei Nextcloud.
  2. Nun wird die Konfiguration aktiviert und die Standard-Konfiguration deaktiviert:
    ln -s /etc/nginx/sites-available/cloud.domain.tld.conf /etc/nginx/sites-enabled/
    rm /etc/nginx/sites-enabled/default
    nginx -t
    systemctl reload nginx
  3. Im Anschluss kann das SSL-Zertifikat mit dem Certbot erstellt werden. Bitte beachten, dass Certbot immer eine Verbindung über IPv6 versucht, sobald ein AAAA-Record für die Domain gesetzt ist:
    certbot --nginx -d cloud.domain.tld
  4. Nachdem der NGINX bereit ist, wird das aktuelle Nextcloud-Archiv heruntergeladen und entpackt:
    cd /var/www/
    wget https://download.nextcloud.com/server/releases/latest.zip
    unzip latest.zip
  5. Danach werden die Zugriffsrechte und der Ordner-Name angepasst:
    chown -R www-data nextcloud
    mv nextcloud cloud.domain.tld
  6. Nun muss noch eine MySQL-Datenbank und ein dazugehöriger Nutzer angelegt werden. Ab MySQL 8 wird standardmäßig eine lokale Socket-Verbindung genutzt, daher ist kein Passwort nötig:
    mysql

    mysql> CREATE USER 'nextcloud'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
    mysql> CREATE DATABASE IF NOT EXISTS nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
    mysql> GRANT ALL PRIVILEGES on nextcloud.* to 'nextcloud'@'localhost'; mysql> FLUSH PRIVILEGES;
  7. Im Browser wird nun ein Administratoren-Account angelegt, das Datenverzeichnis auf der Storage Box /storage/Nextcloud definiert und die Datenbankverbindung konfiguriert:
    https://cloud.domain.tld
    Nextcloud Setup
  8. Abschließend können noch die Standard-Apps für einen einfacheren Einstieg installiert werden.
    Weitere Anpassungen und Optimierungen sind direkt in der Nextcloud Dokumentation einsehbar und wurden an dieser Stelle bewusst ausgelassen, da sich diese bei Updates ändern können und sich weiterhin je nach Bedarf unterscheiden.