Nextcloud auf Ubuntu 16.04

1. Umgebung

Für dieses Tutorial habe ich das System auf einem V-Server installiert, aber das Vorgehen sollte für alle anderen System übertragbar sein.

1.1 Hardware

Nextcloud gibt leider wenig Informationen welche Hardware benötigt wird, ausser ein Minimum von 512MB Arbeitsspeicher.
Für diesen Test empfehle ich mindestens 1 GHz CPU, 1 GB RAM und 20 GB HDD.  Die Festplatte sollte im laufenden Betrieb erhöht werden.

1.2 Software

  • Ubuntu server 16.04 LTS with root (sudo) access
  • Apache2
  • PHP 7
  • mySQL / MariaDB
  • Nextcloud 9.0.53 or newer

2. Webserver installieren (LAMP, APCu, Redis)

Erstmal updaten wir die Maschine:

sudo apt update && sudo apt upgrade

Nun installieren wir lamp-server. Das ^ ist wichtig, es teilt apt mit das es sich um ein meta-package handelt.  Dieses Kommando installiert dann apache2, mysql 5.7, php 7.0 und einige php/apache Module.

sudo apt install lamp-server^

MySQL wird ein Passwort für den root user verlangen. Bitte nutzt ein anderes als für euren System Root User und nutzt ein starkes  Passwort.

Nun installieren wir APCu und Redis:

sudo apt install php-apcu redis-server php-redis

Und nun brauchen wir nur noch einige PHP Module für Nextcloud:

sudo apt install php-zip php-dompdf php-xml php-mbstring php-gd php-curl unzip

Da nach aktivieren wir einige Apache Module:

sudo a2enmod rewrite headers env dir mime

Und starten den Apache neu:

sudo service apache2 restart

Über den Browser können wir testen ob der Apache richtig läuft.

2.1 SSL aktivieren:

Um unseren Server abzusichern richten wir nun ein SSL Zertifikat ein. Einmal machen wir das mit einem Skript und einmal manuell. Welche Methode ihr wählt hängt von euch ab

2.1.1 Let’s Encrypt

Let’s Encrypt bietet komplett freie SSL Zertifikate an.

Als erstes wird ein Ort gewählt wohin wir den Let’s Encrypt Client laden. (in dem Fall /home/user/)

sudo wget https://dl.eff.org/certbot-auto

Diesen Client machen wir nun ausführbar:

sudo chmod a+x certbot-auto

Den Client lassen wir laufen. (Achtung bitte user@domain.org und nc.domain.org austauschen)

sudo ./certbot-auto --apache --agree-tos --rsa-key-size 4096 --email user@domain.org --redirect -d nc.domain.org

Hier nochmal ne kurze Aufschlüsslung:

–apache nutzt den Apache Plugin um die Installation direkt in die bestehende Apache Konfiguration einzufügen
–agree-tos Die Zustimmung zu den tos (term of service = Nutzungsbedingungen)
–rsa-key-size bestimmt die Länge und damit die Sicherheit des RSA Schlüssels. Standard ist 2048
–email ist die Mailadresse die bei dem Zertifikat eingetragen wird. Weiter nutzt sie Let’s Encrypt für wichtige Mitteilungen und Erinnerungen
–redirect erzeugt zum einen die SSL virtualhost Konfiguration Datei und fügt einen Umleitung von allen HTTP Verkehr auf HTTPs (also vom Port 80 zum Port 443)
-d hier wird die Domain angeben die abgesichert werden soll.

Der Let’s encrypt certbot wird bei der Installation alle notwendigen Abhänigkeiten installieren, aber da wir die Flag agree-tos wird es keine Nachfragen geben.

Zwar erzeugt certbot alles notwendige automatisch, eine kleine Anpassung muss aber noch vorgenommen werden. Die Datei dazu hat certbot hier abgelegt:

/etc/apache2/sites-available/000-default-le-ssl.conf

Der folgende Code wird bitte unter „ServerName“ eingefügt:

<Directory /var/www/html/>
       Options +FollowSymlinks
       AllowOverride All

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

       SetEnv HOME /var/www/html
       SetEnv HTTP_HOME /var/www/html
     </Directory>

     <IfModule mod_headers.c>
          Header always set Strict-Transport-Security "max-age=15768000; preload"
     </IfModule>

Das so erzeugte Zertifikat läuft nach 90 Tagen ab, um es automatisch zu erneuern legen wir ein cronjob an:

sudo crontab -e

Dort fügen wir die folgende Line ein, wobei wir natürlich den Ort angeben, wo wir vorher den certbot hingeladen haben:

0 0 * * 0 /home/user/certbot-auto renew

2.1.2. Manuel

Erstmal aktivieren wir das SSL Module für Apache.

sudo a2enmod ssl

Apache stellt selbst-unterschriebene Zertifikate als ein Teil der Installation bereit. Diese werden wir zwar nutzen, es ist aber dringend notwendige diese gegen funktionierende Zertifikate auszutauschen.  Mit dem folgenden Befehl erzeugen wir die Datei nextcloud.conf

sudo vim /etc/apache2/sites-available/nextcloud.conf

Dann kopieren wir den Inhalt rein:

<IfModule mod_ssl.c>
   <VirtualHost _default_:443>

     ServerAdmin jason@bayton.org
     ServerName nc.bayton.org
     DocumentRoot /var/www/html

     <Directory /var/www/html/>
       Options +FollowSymlinks
       AllowOverride All

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

       SetEnv HOME /var/www/html
       SetEnv HTTP_HOME /var/www/html
     </Directory>

     <IfModule mod_headers.c>
          Header always set Strict-Transport-Security "max-age=15768000; preload"
     </IfModule>

     SSLEngine on
     SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
     SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key

   </VirtualHost>
</IfModule>

Abspeicheren und schliessen, da aktivieren wir diese neue Konfiguration:

sudo a2ensite nextcloud.conf

und starten Apache neu

sudo service apache2 restart

SSL sollte nun funktionieren und wenn wir nun unsere Testseite aufrufen sollten wir ein SSL Error bekommen, da unsere Zertifikate als nicht vertrauenswürdig eingeschätzt werden. Wir können uns entweder bei Let’s Encrypt welche besorgen oder wir schauen uns dieses Tool von Mozilla genauer an. Es hilft dabei eine ordentliche SSL Zertifizierung auf einem Server einzurichten. Guckt euch die Seite einfach mal etwas genauer an.

3. Nextcloud intallieren.

Nachdem wir nun unseren Server fertig haben, kümmern wir uns um die eigentliche Nextcloud Installation.

3.1 Nextcloud herunterladen

Als erstes wechseln wir in das www-root Verzeichnis unter /var/www/html

cd /var/www/html

Dann downloaden wir dort die aktuelle Nextcloud Version.

wget https://download.nextcloud.com/server/releases/latest.zip

Entzippen

sudo unzip latest.zip

Mit ls (=list) können wir sehen das im Ordner /var/www/html/ nun ein Nextcloud Ordner ist. Wenn wir aber ls -lah (l=list, a=all, h=humanreadable) nutzen sehen wir das nextcloud derzeit noch dem Nutzer root gehört. Wir wollen das aber änderen:

sudo chown -R www-data:www-data /var/www/html/nextcloud

Abjetzt gehört der Ordner nextcloud dem Apache User, www-data, und hat damit Schreibrechte auf das Verzeichnis.

3.2 Die Nextcloud Datenbank erstellen

Der folgende Schritt ist zwar grundlegend Optional, da Nextcloud selbst in der Lage ist eine Datenbank bei der Installation anzulegen. Wir wollen aber Nextcloud nicht die root Daten übergeben, daher richten wir nun eine eigene Datenbank ein. Mit dem Kommando öffnen wir eine mysql Session, das Passwort hatten wir einige Schritte vorher ausgewählt.

mysql -u root -p

Dann erzeugen wir den Nutzer (ncuser) und die Datenbank (nextcloud):

CREATE DATABASE nextcloud;
CREATE USER 'ncuser'@'localhost' IDENTIFIED BY 'ncpassword';
GRANT ALL PRIVILEGES ON nextcloud . * TO 'ncuser'@'localhost';

Dannach schliessen wir die mysql Session mit „quit“

5.3 Nextcloud installieren – Endlich!

Nun öffnen wir im Browser unsere Adresse. Sollten wir den Nextcloud Installations Bildschirm sehen hat alles bis hierhin geklappt. Folgende Daten müssen wir nun eingeben:

  1. Ein Benutzernamen und ein sichers Passwort für den Administratoren Account
  2. Ein Ort für das Daten Verzeichniss
  3. Datenbankuser: ncuser
  4. Datenbankpassword: ncpassword
  5. Datenbank Name: nextcloud
  6. Bestätigen das die Datenbank auf dem localhost läuft

Das Datenverzeichnis im www-root liegen zu lassen ist nur solange okay wie .htaccess funktioniert. Daher ist es empfehlenswert das Datenverzeichnis zu verlegen. Idealerweise verlegen wir es ausserhalb von /var/www/
Wo es endgültig liegt ist Sache des Administrator, wichtig ist nur das www-data darauf Schreibrechte hat:

sudo chown -R www-data:www-data /path/to/data

Nun können wir das Setup abschliessen.

6. Konfigurationen

Nach unserem ersten Login stellen wir erstmal fest das Nextcloud einige Fehler meldet.

6.1 Aktivere .htaccess

Die .htaccess wird nicht funktionieren weil wir Nextcloud in den Hauptordner von www-root /var/www/html gepackt haben. Dieses Verzeichnis wird von apache.conf kontrolliert, das standardmässig .htaccess verbietet bzw. überschreibt. Wir ändern das nun:

sudo vim /etc/apache2/apache2.conf

Dort ersetzen wir

<Directory /var/www/>        
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

durch

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
</Directory>

Und starten dananch Apache neu

sudo service apache2 restart

6.2 Caching aktivieren

Caching ist extrem entscheiden und wird spätstens mit einer wachsenden Cloud entscheidend für die Geschwindigkeit. Standardmässig wird ACPu viel des caching übernehmen, wir aber wollen die Rollen zwischen Redis und ACPu etwas gerechter aufteilen um eine bessere Auslastung zu bekommen.

Beide hatten wir schon ganz am Anfang installiert nun konifiguren wir sie.

sudo vim /etc/redis/redis.conf

Nun suchen wir „port 6379“ und ändern es zu „port 0“

Zusätzlich kommentieren wir noch folgende Linie aus

unixsocket /var/run/redis/redis.sock

und wir ändern „unixsocketperm 700“ zu "unixsocketperm 770„.

Dann fügen wir noch den Redis User „redis“ zur „www-data“ Gruppe hinzu:

sudo usermod -a -G redis www-data

Wir starten wiedermal Apache neu:

sudo service apache2 restart

Und starten dann den Redis Server

sudo service redis-server start

Nach dem Redis aktiviert wurde fügen wir ihn den Nextcloud Config Datei hinzu:

sudo vim /var/www/html/nextcloud/config/config.php

Und fügen dort folgendes hinzu:

'memcache.local' => '\OC\Memcache\APCu',
'memcache.locking' => '\\OC\\Memcache\\Redis',
'filelocking.enabled' => 'true',
'redis' => 
array (
'host' => '/var/run/redis/redis.sock',
'port' => 0,
'timeout' => 0.0,
),

Ein Neustart wäre nun von Vorteil, da wir aber wollen das der Redis Server bei jedem reboot mit hochfährt:

sudo systemctl enable redis-server

Caching ist nun konfiguiert. Wenn wir uns nun in die Nextcloud einloggen sollte dort keine Fehlermeldung oder Warnung mehr erscheinen.

6.3 Maximaler Upload von Datein vergrößern

sudo vim /etc/php/7.0/apache2/php.ini

Suche und ändere die folgende Zeile:

upload_max_filesize = 2048M
post_max_size = 2058M

Die Größe könnt ihr natürlich noch höher stellen, bedenkt nur immer das post_max_size immer etwas Größer sein muss als upload_max_filesize da ihr ansonsten Fehler bekommen werdet.

Um die Änderung in Kraft tretten zu lassen starten wir den Apache neu:

sudo service apache2 restart

6.4 Nextcloud 12 + PHP Opcache

Für Nextcloud 12 sind einige zusätzliche Einstellungen notwendig um PHP Opcache richtig laufen zu lassen.

Wir öffnen also wieder die php.ini

sudo vim /etc/php/7.0/apache2/php.ini

Am Ende der Datei fügen wir folgendes ein:

; Nextcloud Opcache settings
opcache.enable=1
opcache.enable_cli=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1

Dann starten wir mal wieder den Apache neu

sudo service apache2 restart

7. Schlussbemerkungen

Da es sich hierbei um eine (gekürzte) Übersetzung handelt möchte ich mich erstmal bei JasonBayton bedanken. Sein Guide ist wirklich gut geschrieben und hilft in vielen Punkten auch unerfahren Nutzerinnen. Wenn ihr eueren Nextcloud Server Verschlüsseln wollt dann schaut euch doch mal sein Guide an, diesen Teil habe ich nämlich rausgelassen.

Installing Nextcloud on Ubuntu 16.04 LTS with Redis, APCu, SSL & Apache

Ansonsten kann ich euch nur empfehlen euch in die Nextcloud Community zu stürzen wenn ihr etwas braucht bzw. nicht mehr weiter wisst:

https://help.nextcloud.com/

 

Schreibe einen Kommentar

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

*