NextCloud unter Ubuntu 18.04 mit Nginx installieren (LEMP Stack)

Dieses Tutorial zeigt dir, wie du NextCloud auf Ubuntu 18.04 LTS mit dem Nginx Webserver installieren kannst.
Eine Anmerkung zum Tutorial: Wir ermutigen unsere Benutzer, Tutorials auszuprobieren, aber sie werden nicht vollständig von unserem Team unterstützt – wir können nicht immer Unterstützung bieten, wenn etwas schief läuft. Prüfe unbedingt, mit welchem Betriebssystem und welcher Version es getestet wurde, bevor du weitermachst.

Dieses Tutorial zeigt dir, wie du NextCloud auf Ubuntu 18.04 LTS mit dem Nginx Webserver installieren kannst.

Was ist Nextcloud?

NextCloud ist eine kostenlose Open Source Cloud-Software für die verschlüsselte Speicherung von Daten in einer Cloud oder auf eigenen Servern. Nextcloud ist eine Alternative zu Cloud-Speichern wie Dropbox, Google Drive und OneDrive und wurde erstmals im Jahr 2016 als ein Fork der Owncloud Cloud-Software veröffentlicht.

Wenn du dir Sorgen um deine Privatsphäre machst, kannst du zu NextCloud wechseln, die du auf deinem privaten Heimserver oder auf einem Virtual Private Server (VPS) installieren kannst. Die Dateien kann man via NextCloud auf den Server hochladen und dann mit dem Desktop-Computer, Laptop oder Smartphone synchronisieren. Auf diese Weise hast du die volle Kontrolle über deine Daten.

NextCloud Besonderheiten

  • Kostenlos und OpenSource
  • End-to-End-Verschlüsselung, d.h. Dateien können auf dem Client-Gerät verschlüsselt werden, bevor sie auf den Server hochgeladen werden, so dass selbst wenn jemand deinen Server stiehlt, kann er deine Dateien nicht sehen.
  • Kann mit einer Online-Office-Suite (Collobora, OnlyOffice) integriert werden, so dass du deine Doc-, ppt- und xls-Dateien direkt aus NextCloud erstellen und bearbeiten kannst.
  • Der App Store enthält hunderte von Apps zur Erweiterung der Funktionalität (wie Kalender-App, Notizen- und Videokonferenz-App, etc.).
  • Die Sync-Clients sind für Linux, MacOS, Windows, iOS und Android verfügbar.

Voraussetzungen

NextCloud ist in der Programmiersprache PHP geschrieben. Um diesem Tutorial zu folgen, musst du zuerst den LEMP-Stack unter Ubuntu 18.04 installieren. Falls du das noch nicht getan hast, schau dir bitte das folgende Tutorial an.

Du kannst NextCloud auf deinem Heimserver oder einem VPS (Virtual Private Server) installieren. Außerdem benötigt man einen Domainnamen.

Schritt 1: NextCloud auf Ubuntu 18.04 herunterladen

Meld dich bei deinem Ubuntu 18.04 Server an. Lade dir dann das NextCloud Zip-Archiv auf deinen Server herunter. Gehen auf https://nextcloud.com/install und klicke dann auf den Download-Button, um die neueste Version zu sehen und zu erhalten.

Du kannst den folgenden Befehl ausführen, um dir die aktuelle Version auf deinen Server zu laden

wget https://download.nextcloud.com/server/releases/nextcloud-17.0.2.zip

Du kannst immer das obige URL-Format verwenden, um NextCloud herunterzuladen. Wenn eine neue Version herauskommt, ersetze einfach 17.0.2 mit der aktuellen Versionsnummer.

Du kannst immer das obige URL-Format verwenden, um NextCloud herunterzuladen. Wenn eine neue Version herauskommt, ersetze einfach 17.0.2 mit der aktuellen Versionsnummer.

Nach dem Download entpacke das heruntergeladene Archiv mit unzip.

sudo apt install unzip
sudo unzip nextcloud-17.0.2.zip -d /usr/share/nginx/

Die Option -d gibt das Zielverzeichnis an. NextCloud-Webdateien werden nach /usr/share/nginx/nextcloud/ entpackt. Dann müssen wir den Besitzer dieses Verzeichnisses auf www-data ändern, damit der Webserver (Nginx) in dieses Verzeichnis schreiben und lesen kann.

sudo chown www-data:www-data /usr/share/nginx/nextcloud/ -R

Schritt 2: Erstellen einer Datenbank und eines Benutzers in MariaDB

Melde dich mit folgendem Befehl am MariaDB-Datenbankserver an.

sudo mysql

Da MariaDB das unix_socket Plugin zur Authentifizierung der Benutzeranmeldung verwendet, ist die Eingabe des MariaDB Root-Passwortes nicht mehr notwendig. Wir müssen nur den mysql Befehl mit sudo voranstellen.

Alternativ kann man auch diesen Befehl zum Einloggen verwenden.

sudo mariadb

Dann erstelle eine Datenbank für NextCloud. Dieses Tutorial nennt die Datenbank nextcloud. Du kannst aber auch jeden anderen Namen für die Datenbank verwenden.

create database nextcloud;

Lege nun den Datenbankbenutzer an. Auch hier kannst deinen bevorzugten Namen für diesen Benutzer verwenden. Ersetze das Passwort durch dein Wunschpasswort.

create user nextclouduser@localhost identified by 'your-password';

Gewähren nun diesem Benutzer alle Privilegien auf der nextcloud Datenbank.

grant all privileges on nextcloud.* to nextclouduser@localhost identified by 'your-password';
flush privileges;
exit;

Schritt 3: Erstellen einer Nginx-Konfigurationsdatei für Nextcloud

Erstelle eine Datei nextcloud.conf im Verzeichnis /etc/nginx/conf.d/

sudo nano /etc/nginx/conf.d/nextcloud.conf

Füge den folgenden Inhalt in die nextcloud.conf Datei ein. Ersetze nextcloud.your-domain.com mit deiner eigenen Domain.

server {
    listen 80;
    server_name nextcloud.your-domain.com;

    # Add headers to serve security related headers
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Robots-Tag none;
    add_header X-Download-Options noopen;
    add_header X-Permitted-Cross-Domain-Policies none;
    add_header Referrer-Policy no-referrer;

    #I found this header is needed on Ubuntu, but not on Arch Linux. 
    add_header X-Frame-Options "SAMEORIGIN";

    # Path to the root of your installation
    root /usr/share/nginx/nextcloud/;

    access_log /var/log/nginx/nextcloud.access;
    error_log /var/log/nginx/nextcloud.error;

    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

    # The following 2 rules are only needed for the user_webfinger app.
    # Uncomment it if you're planning to use this app.
    #rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
    #rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json
    # last;

    location = /.well-known/carddav {
        return 301 $scheme://$host/remote.php/dav;
    }
    location = /.well-known/caldav {
       return 301 $scheme://$host/remote.php/dav;
    }

    location ~ /.well-known/acme-challenge {
      allow all;
    }

    # set max upload size
    client_max_body_size 512M;
    fastcgi_buffers 64 4K;

    # Disable gzip to avoid the removal of the ETag header
    gzip off;

    # Uncomment if your server is build with the ngx_pagespeed module
    # This module is currently not supported.
    #pagespeed off;

    error_page 403 /core/templates/403.php;
    error_page 404 /core/templates/404.php;

    location / {
       rewrite ^ /index.php$uri;
    }

    location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ {
       deny all;
    }
    location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) {
       deny all;
     }

    location ~ ^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+|core/templates/40[34])\.php(?:$|/) {
       include fastcgi_params;
       fastcgi_split_path_info ^(.+\.php)(/.*)$;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       fastcgi_param PATH_INFO $fastcgi_path_info;
       #Avoid sending the security headers twice
       fastcgi_param modHeadersAvailable true;
       fastcgi_param front_controller_active true;
       fastcgi_pass unix:/run/php/php7.4-fpm.sock;
       fastcgi_intercept_errors on;
       fastcgi_request_buffering off;
    }

    location ~ ^/(?:updater|ocs-provider)(?:$|/) {
       try_files $uri/ =404;
       index index.php;
    }

    # Adding the cache control header for js and css files
    # Make sure it is BELOW the PHP block
    location ~* \.(?:css|js)$ {
        try_files $uri /index.php$uri$is_args$args;
        add_header Cache-Control "public, max-age=7200";
        # Add headers to serve security related headers (It is intended to
        # have those duplicated to the ones above)
        add_header X-Content-Type-Options nosniff;
        add_header X-XSS-Protection "1; mode=block";
        add_header X-Robots-Tag none;
        add_header X-Download-Options noopen;
        add_header X-Permitted-Cross-Domain-Policies none;
        add_header Referrer-Policy no-referrer;
        # Optional: Don't log access to assets
        access_log off;
   }

   location ~* \.(?:svg|gif|png|html|ttf|woff|ico|jpg|jpeg)$ {
        try_files $uri /index.php$uri$is_args$args;
        # Optional: Don't log access to other assets
        access_log off;
   }
}

Speichere und schließe die Datei. Teste nun die Nginx-Konfiguration und starte dann Nginx neu, damit die Änderungen wirksam werden.

sudo nginx -t
sudo systemctl reload nginx

Schritt 4: Installieren und Aktivieren von PHP-Modulen

Führe die folgenden Befehle aus, um die von NextCloud benötigten oder empfohlenen PHP-Module zu installieren.

sudo apt install php-imagick php7.4-common php7.4-mysql php7.4-fpm php7.4-gd php7.4-json php7.4-curl  php7.4-zip php7.4-xml php7.4-mbstring php7.4-bz2 php7.4-intl

Schritt 5: HTTPS (SSL) aktivieren

Jetzt kannst du den Nextcloud Webinstallations-Assistenten in deinem Browser aufrufen, indem du den Domainnamen für deine Nextcloud-Installation eingibst.

Wenn die Webseite nicht geladen werden kann, musst du wahrscheinlich Port 80 bzw. Port 443 in der Firewall öffnen.

sudo iptables -I INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -I INPUT -p tcp --dport 443 -j ACCEPT

Bevor du sensible Informationen eingibst, solltest du eine sichere HTTPS-Verbindung für NextCloud aktivieren. Du kannst ein kostenloses TLS-Zertifikat von Let’s Encrypt erhalten. Installiere Let’s Encrypt Client (certbot) aus dem Ubuntu 18.04 Repository.

sudo apt install certbot python3-certbot-nginx

python3-certbot-nginx ist das Nginx-Plugin. Führe als nächstes den folgenden Befehl aus, um ein kostenloses TLS-Zertifikat mit dem Nginx-Plugin zu erhalten. Ersetze your-email-address mit deiner Mail Adresse und nextcloud.your-domain.com mit deiner eigenen Domain.

sudo certbot --nginx --agree-tos --redirect --staple-ocsp --email your-email-address -d nextcloud.your-domain.com

Du wirst gefragt, ob du E-Mails von der EFF (Electronic Frontier Foundation) erhalten möchtest. Nachdem du Y oder N gewählt hast, wird dein TLS-Zertifikat automatisch bezogen und für dich konfiguriert.

Ich habe festgestellt, dass Certbot nicht automatisch einen HSTS-Header in der Nginx-Konfigurationsdatei für Nextcloud hinzufügt. Wenn du HSTS (HTTP Strict Transport Security) aktivieren möchtest, dann editiere die nextcloud.conf Datei.

sudo nano /etc/nginx/conf.d/nextcloud.conf

Füge folgende Zeile in den SSL-Server-Block hinzu, um den HSTS-Header zu aktivieren.

add_header Strict-Transport-Security "max-age=31536000" always;

Außerdem kannst du das HTTP2-Protokoll aktivieren, indem du die Option http2 hinzufügst.

listen 443 ssl http2; # managed by Certbot

Speichere und schließe die Datei. Teste nun die Nginx-Konfiguration und starte dann Nginx neu, damit die Änderungen wirksam werden.

sudo nginx -t
sudo systemctl reload nginx
Beende die Installation in deinem Webbrowser.

Jetzt kannst du über eine HTTPS-Verbindung auf den Nextcloud-Webinstallationsassistenten zugreifen. Um die Installation abzuschließen, musst du ein Admin-Konto erstellen, den Pfad des Nextcloud-Datenordners und die zuvor erstellten Datenbankdetails eingeben. Du kannst den standardmäßigen localhost als Hostadresse verwenden oder localhost:3306 eingeben, da MariaDB auf Port 3306 lauscht.

Der Datenordner ist der Ordner, in dem die Dateien der Benutzer gespeichert werden. Aus Sicherheitsgründen ist es am besten, das Datenverzeichnis außerhalb der Nextcloud Web-Root zu platzieren.

Anstatt also die Dateien der Benutzer unter /usr/share/nginx/nextcloud/data/ zu speichern, solltest du diesen in /usr/share/nginx/nextcloud-data mit dem folgenden Befehl ändern.

sudo mkdir /usr/share/nginx/nextcloud-data
sudo chown www-data:www-data /usr/share/nginx/nextcloud-data -R

Sobald es fertig ist, wirst du das Webinterface von Nextcloud sehen. Herzlichen Glückwunsch! Du kannst jetzt damit beginnen, deinen privaten Cloud-Speicher zu nutzen.

Schritt 6: PHP-Speicherlimit erhöhen (Optional)

Das Standard-PHP-Speicherlimit beträgt 128MB. NextCloud empfiehlt 512MB für eine bessere Leistung. Um das PHP-Speicherlimit zu ändern, bearbeite die Datei php.ini.

sudo nano /etc/php/7.4/fpm/php.ini

Suche die folgende Zeile. (Zeile 406)

memory_limit = 128M

Ändere den Wert

memory_limit = 512M

Speichere und schließe die Datei. Alternativ kannst du auch den folgenden Befehl ausführen, um den Wert zu ändern, ohne die Datei manuell zu öffnen.

sudo sed -i 's/memory_limit = 128M/memory_limit = 512M/g' /etc/php/7.4/fpm/php.ini

Dann starte den PHP-FPM-Dienst neu, damit die Änderungen wirksam werden.

sudo systemctl reload php7.4-fpm

Schritt 7: Einrichten von PHP zur korrekten Abfrage von Systemumgebungsvariablen (Optional)

Bearbeite die Datei www.conf.

sudo nano /etc/php/7.4/fpm/pool.d/www.conf

Suche die folgende Zeile. (Zeile 381).

;clear_env = no

Entferne das Semikolon, um diese Zeile unkommentiert zu lassen.

clear_env = no

Speichere und schließe die Datei. Alternativ kannst du auch den folgenden Befehl ausführen, um den Wert zu ändern, ohne die Datei manuell zu öffnen.

sudo sed -i 's/;clear_env = no/clear_env = no/g' /etc/php/7.4/fpm/pool.d/www.conf

Dann starte den PHP-FPM-Dienst neu, damit die Änderungen wirksam werden.

sudo systemctl reload php7.4-fpm

Schritt 8: Das Upload-Limit für die Dateigröße erhöhen

Die von Nginx vorgegebene maximale Upload-Dateigröße ist standardmäßig auf 1MB begrenzt. Um das Hochladen großer Dateien auf Ihren NextCloud-Server zu ermöglichen, bearbeite die Nginx-Konfigurationsdatei für NextCloud.

sudo nano /etc/nginx/conf.d/nextcloud.conf

Wir haben in dieser Datei bereits die maximale Dateigröße festgelegt, durch

client_max_body_size 512M;

Möchtest du aber Dateien mit einer Dateigröße über 512MB hochladen, solltest du den Wert folgendermaßen ändern

client_max_body_size 1024M;

Speichere und schließe die Datei. Teste nun die Nginx-Konfiguration und starte dann Nginx neu, damit die Änderungen wirksam werden.

sudo systemctl reload nginx

PHP setzt auch ein Limit für das Uploaden von Dateien. Die standardmäßige maximale Dateigröße für den Upload beträgt 2MB. Um das Upload-Größenlimit zu erhöhen, bearbeite die PHP-Konfigurationsdatei.

sudo nano /etc/php/7.4/fpm/php.ini

Suche die folgende Zeile (Zeile 827).

upload_max_filesize = 2M

Und ändere diese wie folgt ab

upload_max_filesize = 1024M

Speichere und schließe die Datei. Alternativ kannst du auch den folgenden Befehl ausführen, um den Wert zu ändern, ohne die Datei manuell zu öffnen.

sudo sed -i 's/upload_max_filesize = 2M/upload_max_filesize = 1024M/g' /etc/php/7.4/fpm/php.ini

Dann starte den PHP-FPM-Dienst neu, damit die Änderungen wirksam werden.

sudo systemctl reload php7.4-fpm

Schritt 9: Redis Cache für NextCloud konfigurieren

Wenn du auf die Seite NextCloud-Einstellungen -> Übersicht gehst, wirst du vielleicht die folgende Warnung sehen:

Es wurde kein Memory Cache konfiguriert. Um die Leistung zu verbessern, konfigurieren Sie bitte einen Cache-Speicher, sofern vorhanden.

Wir werden das Speicher-Caching für NextCloud mit Hilfe von Redis aktivieren. Führe den folgenden Befehl aus, um den Redis-Server aus dem Ubuntu-Repository zu installieren.

sudo apt install redis-server

Jetzt können wir prüfen, ob der redis-Server läuft.

systemctl status redis

Und wenn die Autostartfunktion beim Booten nicht aktiviert ist, kannst du den folgenden Befehl verwenden, um es zu aktivieren:

sudo systemctl enable redis-server

Um Redis als Cache für nextCloud zu konfigurieren, müssen wir die PHP-Erweiterung für die Schnittstelle zu Redis installieren und die Schnittstelle aktivieren.

sudo apt install php-redis
sudo phpenmod redis

Als nächstes solltest du die nextCloud Konfigurationsdatei anpassen.

sudo nano /usr/share/nginx/nextcloud/config/config.php

Fügen die folgenden Zeilen über der Zeile ); ein.

'memcache.distributed' => '\OC\Memcache\Redis',
'memcache.local' => '\OC\Memcache\Redis',
'memcache.locking' => '\OC\Memcache\Redis',
'redis' => array(
     'host' => 'localhost',
     'port' => 6379,
     ),

Speichere und schließe die Datei und starte den PHP-FPM-Dienst neu, damit die Änderungen wirksam werden.

sudo systemctl restart nginx php7.4-fpm

Nun gehe wieder zur NextCloud Admin Seite, die Warnung über das Memory Caching sollte verschwunden sein.

Schritt 10: Wie man 4-Byte-Zeichen in MariaDB aktiviert, um Emojis anzuzeigen

Wenn du die folgende Meldung auf der Seite NextCloud-Einstellungen -> Übersicht siehst, dann musst du in der MariaDB die 4-Byte-Zeichen aktivieren.

MySQL wird als Datenbank verwendet, unterstützt aber keine 4-Byte-Zeichen. Um 4-Byte-Zeichen (wie z.B. Emojis) ohne Probleme in Dateinamen oder Kommentaren verarbeiten zu können, wird empfohlen, die 4-Byte-Unterstützung in MySQL zu aktivieren.

Zuerst empfehle ich, den MariaDB-Server auf die neueste stabile Version zu aktualisieren, indem du die folgenden Befehle ausführst.

sudo apt-get install software-properties-common
sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
sudo add-apt-repository 'deb [arch=amd64,arm64,ppc64el] http://mirror.lstn.net/mariadb/repo/10.4/ubuntu bionic main'
sudo apt update
sudo apt install mariadb-server

Dann loggen dich in die MariaDB-Konsole ein.

sudo mysql -u root

Ändern den Zeichensatz und die Sortierung der nextcloud-Datenbank.

ALTER DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

Danach logge dich wieder aus MariaDB-Konsole aus

exit;

Wechsle nun in das NextCloud-Installationsverzeichnis.

cd /usr/share/nginx/nextcloud/

Aktiviere mysql.utf8mb4 in der config.php

sudo -u www-data php occ config:system:set mysql.utf8mb4 --type boolean --value="true"

Dann reparieren die Zuordnung der MariaDB.

sudo -u www-data php occ maintenance:repair

Nun sollte die Warnung auf der NextCloud Einstellungen -> Übersicht Seite verschwunden sein und du kannst Emojis in deinen Dateinamen, Kalenderereignissen und Kommentaren verwenden.