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:
- Ein Benutzernamen und ein sichers Passwort für den Administratoren Account
- Ein Ort für das Daten Verzeichniss
- Datenbankuser: ncuser
- Datenbankpassword: ncpassword
- Datenbank Name: nextcloud
- 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:
