Nextcloud 17 mit Ubuntu Server 18.04

Auf dieser Seite zeige ich, wie ich Nextcloud 17 erfolgreich mit Ubuntu Server 18.04 installiert habe. Basis für die Installation ist ein rudimentär aufgesetzter Ubuntu Server, wie ich es hier gezeigt habe: Ubuntu Server 18.04 LTS Minimal in einer VirtualBox installieren

tl;dr

  • Apache2, PHP7.2 und MySQL-Server installieren
  • Zusätzliche für Nextcloud 17 erforderliche Pakete installieren
  • Nextcloud 17 herunterladen und entpacken
  • Apache, PHP und MySQL konfigurieren
  • Nextcloud installieren
  • Feintuning
  • Bonus: SSL-Zertifikat(e) installieren

Apache, PHP und MySQL

Nextcloud läuft als Webseite, ist in PHP programmiert und speichert Informationen z.B. in einer MySQL-Datenbank (oder MariaDB). Zunächst müssen wir also die ganzen Dienste auf unserem Ubuntu Server installieren.

sudo apt install apache2 php mysql-server

Das sorgt für den Download von etwa 28 MB und spült entpackte 185 MB auf die Platte. Nach der Installation läuft der Apache-Webserver bereits, wir können uns durch folgenden Aufruf kurz davon überzeugen:

wget -O - http://localhost/

Läuft PHP auch? Klar.

php --version
PHP 7.2.24-0ubuntu0.18.04.1 (cli) (built: Oct 28 2019 12:07:07) ( NTS )
...

Der MySQL-Server läuft ebenfalls bereits:

mysql --version
mysql  Ver 14.14 Distrib 5.7.28, for Linux (x86_64) using  EditLine wrapper

Zusätzliche Pakete installieren

Nextcloud 17 benötigt für den Betrieb weitere Pakete, wie dies im Nextcloud-Admin-Manual beschrieben ist. Diese Pakete installieren wir folgendermaßen:

sudo apt install php7.2-gd php7.2-mysql php7.2-curl php7.2-mbstring
sudo apt install php7.2-intl php-imagick php7.2-xml php7.2-zip
sudo apt install php-apcu

Diese Pakete und ein Haufen davon abhängiger Libs werden damit heruntergeladen und installiert.

Nextcloud 17 herunterladen und entpacken

Nun das aktuelle Installations-Archiv von der Nextcloud-Webseite herunterladen:

cd /tmp
wget https://download.nextcloud.com/server/releases/nextcloud-17.0.2.tar.bz2

Ich installiere optionalen Krempel gerne unterhalb von /opt – kann man auch anders machen, wir machen es halt hier so. Wechseln wir also nach /opt und entpacken dort das heruntergeladene Archiv:

cd /opt
sudo tar xvfpj /tmp/nextcloud*.tar.bz2

Das Verzeichnis /opt/nextcloud und alle darunter befindlichen Dateien und Verzeichnisse gehören nobody:nogroup. Da der Ubuntu-Apache als Benutzer www-data:www-date läuft, ändern wir nun noch rekursiv die Benutzer- und Gruppenzugehörigkeit des Nextcloud-Verzeichnisses:

sudo chown -R www-data:www-data nextcloud

Apache, PHP und MySQL konfigurieren

Apache, PHP und MySQL laufen zwar schon, Nextcloud liegt bereits auf der Platte, aber nun müssen wir noch…

  • das Verzeichnis /opt/nextcloud an den Apache anbinden
  • PHP „tunen“
  • dem MySQL-root-Benutzer ein Kennwort vergeben

Fangen wir mit dem Apache an. Zunächst sorgen wir dafür, dass beim Aufruf von http://localhost/nextcloud/ der Apache auf die Dateien im Verzeichnis /opt/nextcloud/ zugreift. Dazu richten wir einen Alias als Site ein, der auf das entsprechende Verzeichnis zeigt. Die Standard-alias.conf im Verzeichnis mods-available ist dafür eine gute Grundlage:

cd /etc/apache2
sudo cp mods-available/alias.conf sites-available/nextcloud.conf

Nun bearbeiten wir die Konfigurationsdatei, so dass sie folgendes enthält (siehe dazu auch das Nextcloud-Admin-Manual):

sudo vi sites-available/nextcloud.conf

<IfModule alias_module>
    Alias /nextcloud/ "/opt/nextcloud/"

    <Directory "/opt/nextcloud/">
        Require all granted
        Options FollowSymlinks MultiViews
        AllowOverride All
    </Directory>

    <IfModule mod_dav.c>
        Dav off
    </IfModule>

    SetEnv HOME /opt/nextcloud
    SetEnv HTTP_HOME /opt/nextcloud

</IfModule>

Nun müssen wir die neue Site / den Alias noch aktivieren:

sudo a2ensite nextcloud

Wie dem Nextcloud-Manual zu entnehmen ist, werden die folgenden Apache-Module empfohlen. Duech eine kleine Bash-Schleife aktivieren wir diese Module nacheinander, sofern dies nicht eh schon geschehen ist:

for mod in rewrite headers env dir mime; do sudo a2enmod $mod; done

Um die Änderungen wirksam werden zu lassen, müssten wir den Apache einmal neu starten bzw. ihm sagen, dass er seine Konfiguration neu laden soll. Wir sparen uns das momentan noch auf, da wir auch noch PHP ein wenig „tunen“ wollen.

Das Nextcloud-Manual empfiehlt, den PHP-OPcache zu aktivieren, der compilierten Bytecode zwischenspeichert, um dafür zu sorgen, dass PHP und damit der Webserver und die Nextcloud schneller reagieren. Ich kann bestätigen, dass dadurch die Schwuppdizität der Nextcloud spürbar steigt, also führen wir die entsprechenden Schritte kurz durch. Wir öffnen die php.ini und kopieren den ganzen Block an entsprechender Stelle (hinter [opcache]) hinein:

sudo vi /etc/php/7.2/apache2/php.ini

...
[opcache]
; <dh>
; see https://docs.nextcloud.com/server/17/admin_manual/installation/server_tuning.html#enable-php-opcache
opcache.enable=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1
; </dh>
...


Tipp: Anfang und Ende meiner Änderungen in Konfigurationsdateien markiere ich gerne mit meinen Initialen, daher dieses vielleicht merkwürdige <dh> und </dh>.

Nun starten wir den Apache einmal neu, um all die durchgeführten Änderungen zu aktivieren:

sudo systemctl restart apache2

Abschließend werden wir noch manuell die MySQL-Datenbank und -Datenbankbenutzer für Nextcloud anlegen. In MySQL 5.7 ist bezüglich des Logins als MySQL-root irgendetwas geändert, nach der Installation per apt wird kein root-Paßwort abgefragt und der Login funktioniert nur als (Ubuntu)-root über „sudo mysql“. Das klingt alles nach doofem Ärger beim Start des Nextcloud-Installers, daher gehen wir diesem aus dem Weg, legen eine nextcloud-Datenbank und einen nextcloud-Datenbankbenutzer vorab an (als Kennwort bitte nicht „geheim“ verwenden und notieren).

sudo mysql -u root mysql
...
mysql> create database nextcloud;
Query OK, 1 row affected (0.00 sec)

mysql> create user nextcloud@localhost identified by 'geheim';
Query OK, 0 rows affected (0.00 sec)

mysql> grant all on nextcloud.* to nextcloud@localhost;
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> quit;
Bye

Wenn das alles funktioniert hat, dann sollte die Verbindung nun für den Benutzer „nextcloud“ zur Datenbank „nextcloud“ funktionieren. Das testen wir mit…

mysql -u nextcloud -p nextcloud

Nun müsste alles bereits sein, dass wir mit dem Webbrowser die abschließende Nextcloud-Installation starten. Dazu starten wir Firefox / Chrome / Chromium / Opera / Vivaldi / younameit und rufen unseren Webserver auf. Wenn alles auf der lokalen Kiste läuft halt unter http://localhost/nextcloud/, wenn wir von einem anderen Rechner auf unseren Webserver zugreifen entsprechend http://$SERVERNAME/nextcloud/.

Es öffent sich nun das Formular für die Nextcloud-Installation, in der wir folgende Informationen eintragen:

  • Name des Nextcloud-Administrators (z.B. „admin“)
  • Paßwort des Nextcloud-Administrators (bitte nicht „admin“)
  • Das Datenverzeichnis auf der Platte, wo Dateiuploads abgelegt werden (kann man so lassen)
  • Name des Datenbankbenutzers („nextcloud“, siehe oben)
  • Kennwort des Datenbankbenutzers (bitte nicht „geheim“, siehe oben)
  • Name der Datenbank (auch „nextcloud“, siehe oben)
  • Host der Datenbank (für gewöhnlich „localhost“)

Wenn alles korrekt eingegeben wurde, richtet nun der Nextcloud-Installer alles Notwendige für den Betrieb der Nextcloud ein. Je nach Leistungsfähigkeit der Serverhardware dauert dies nur wenige Sekunden/Minuten, bis man von der Nextcloud begrüßt wird.

Wir sind nun als Nextcloud-Administrator eingeloggt. Es empfiehlt sich, zunächst oben rechts auf den runden Kringel mit Großbuchstaben (bei „admin“ halt ein „A“) zu klicken und die „Einstellungen“ anzuklicken, anschließend links im Menü auf „Verwaltung/Übersicht“.

Sollte dort „Die PHP-Speichergrenze liegt unterhalb des empfohlenen Wertes von 512MB.“ zu lesen sein, ändern wir dies. Wir öffnen die php.ini, suchen nach „memory“, kommentieren die Voreinstellung aus und setzen den Wert auf 512MB.

sudo vi /etc/php/7.2/apache2/php.ini

;memory_limit = 128M
; <dh>
memory_limit = 512M
; </dh>

:wq

sudo systemctl restart apache2

Taucht dort ein großer Bereich mit Warnungen über „bigint“ auf, führe man jetzt diesen Befehl aus (siehe dazu auch das Nextcloud-Manual):

cd /opt/nextcloud
sudo -u www-data php occ db:convert-filecache-bigint

Keine Sorge bezüglich „This can take up to hours“, wenn die Datenbank noch leer ist. Im frisch installierten Zustand dauert das alles nur ein paar Sekunden.

Wir erkennen auf „Verwaltung / Übersicht“ zudem die Meldung „Es wurde kein PHP-Memory-Cache konfiguriert“. Das ist korrekt, das holen wir nun noch nach – schließlich haben wir oben bereits mit „sudo apt install php-apcu“ die Voraussetzungen dafür geschaffen (siehe dazu auch das Nextcloud-Manual zum Thema „Memory Caching“). Dazu fügen wir die Zeile mit ‚memcache.local‘ in der config.php ein:

cd /opt/nextcloud/config/
vi config.php
...
 'memcache.local' => '\OC\Memcache\APCu',
);

Wen nun noch die beiden Hinweise stören, dass die Konfiguration für „/.well-known/carddav“ und „/.well-known/caldav“  nicht passt, möge folgendes durchführen (siehe dazu das Nextcloud-Manual). Im DocumentRoot des Apache legen wir in einer .htaccess die rewrite-Regeln für diese URLs ab. Dazu die .htaccess öffnen und die Zeilen hineinkopieren:

sudo vi /var/www/html/.htaccess

<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteRule ^\.well-known/host-meta /nextcloud/public.php?service=host-meta [QSA,L]
  RewriteRule ^\.well-known/host-meta\.json /nextcloud/public.php?service=host-meta-json [QSA,L]
  RewriteRule ^\.well-known/webfinger /nextcloud/public.php?service=webfinger [QSA,L]
  RewriteRule ^\.well-known/carddav /nextcloud/remote.php/dav/ [R=301,L]
  RewriteRule ^\.well-known/caldav /nextcloud/remote.php/dav/ [R=301,L]
</IfModule>

Damit der Apache überhaupt die .htaccess im DocumentRoot liest, müssen wir noch folgende Regel in der Server-Konfiguration hinzufügen:

vi /etc/apache2/sites-available/000-default.conf

 ...
 <Directory /var/www/html/>
    AllowOverride All
 </Directory>
 ...

Nun noch einmal den Apache neu starten, danach sollten die Warnungen auf der Seite verschwunden sein, bis halt auf den noch nicht möglichen Zugriff über https. Aber das ist halt ein längeres Thema…

sudo service apache2 restart

Bonus: SSL-Zertifikat(e) und HTTPS-Zugriff

Demnächst ausführlicher, versprochen…

 

Ein Gedanke zu „Nextcloud 17 mit Ubuntu Server 18.04“

  1. Hallo Dirk,

    vielen Dank für dein Howto. Es gibt schon einige HowTos zu diesem Thema. Du bist aber der Erste, der das Problem mit den .well-known/caldav-Meldungen gelöst hat.

    Vielen Dank dafür
    Frank

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.