nextcloud auf Debian Stretch/Jessie mit Lets Encrypt SSL, nginx, MySQL, php7 (u.a. auch für Raspberry Pi)

⇨ Update Januar 2018: Für nextcloud 13 aktualisiert ⇦

In dieser Anleitung beschreibe ich wie nextCloud (der moderne nachfolger von Owncloud) auf einem frischen Debian Stretch (Debian 9) oder auch Debian Jessie (Debian 8) installiert wird. Dazu verwende ich nginx als Webserver, MySQL und php7. Warum nginx und php7? Dies Software Pakete sind auf hohe Performance ausgelegt und werden auch aktiv von den Entwicklern gepflegt. Dazu sichern wir unseren Webserver noch mit einem kostenlosen SSL Zertifikat von Lets Encrypt ab und konfigurieren nginx so dass es nur aktuelle Sicherheitseinstellungen verwendet und aktivieren zusätzlich HTTP/2. Damit haben wir ein modernes, sicheres und schnelles Setup das perfekt für nextCloud geeignet ist.

Diese Anleitung kann auch für einen Raspberry Pi verwendet werden.

Voraussetzungen
Als Basis gehe ich von einem frisch installiertem Debian 8 Jessie aus, auf das auch bereits die Domain die du verwenden möchtest zeigt.

Grundarbeiten
Bei neuen Servern kümmere ich mich zu aller erst immer um eine hübsche Prompt, da macht das arbeiten gleich mehr Spass. Das habe ich hier bereits beschrieben. Wer das nicht möchte kann diesen Schritt auch einfach überspringen.

Als nächstes kümmere ich mich darum dass das System auf den aktuellsten Stand ist

apt-get update && apt-get upgrade && apt-get dist-upgrade

Je nachdem mit welchem Texteditor man arbeiten möchte muss dieser nun installiert werden, in meinem Fall ist das vim:

apt-get install vim-nox

Nun richten wir die Paketquellen ein. Unter Debian bietet sich die Nutzung von dotdeb.org an, da dort alle benötigten Pakete in einer aktuellen Fassung vorliegen. Die Einbindung davon wird hier beschrieben, lässt sich aber auch ganz kurz so zusammenfassen:

Folgende zwei Zeilen müssen in die /etc/apt/sources.list Datei hinzugefügt werden:

deb http://packages.dotdeb.org jessie all
deb-src http://packages.dotdeb.org jessie all

Danach muss noch der Schlüssel der neuen Paketquelle in unser System eingespielt werden. Laden können wir den Schlüssel mit

wget https://www.dotdeb.org/dotdeb.gpg

Und einspielen mit

apt-key add dotdeb.gpg

Lets Encrypt
Nun kümmern wir uns um das kostenlose SSL Zertifikat. Das lässt sich am einfachsten mit dem **certbot** beantragen, jedoch müssen wir dazu die Backports in unseren Paketquellen aktivieren. Hierzu müssen wir noch einmal die /etc/apt/sources.list Datei um folgende Zeile erweitern:

deb http://ftp.debian.org/debian jessie-backports main

Jetzt müssen wir die Paketquellen neu auslesen

apt-get update

Und dann kann certbot installiert werden

apt-get install certbot -t jessie-backports

Für den nächsten Schritt ist es zwingend nötig das bereits eine Domain auf den Server zeigt. Denn nun beantragen wir das SSL Zertifikat von Let’s Encrypt:

certbot certonly

Dieser Befehl leitet durch die Zertifikatsbeantragung. Es muss eine Mailadresse und die entsprechende Domain eingetragen werden. Hat alles funktioniert, beendet sich certbot mit einer Erfolgsmeldung.

PHP7

PHP7 kann recht schnell installiert werden. Dazu führen wir einfach folgenden Befehl aus:

apt-get install php7.0-fpm php7.0-gd php7.0-mysql php7.0-curl php7.0-xml php7.0-zip php7.0-intl php7.0-mcrypt php7.0-mbstring php7.0-bz2

Dadurch wird php7 mit allen erforderlichen Erweiterungen installiert.

NGINX

Die Installation von nginx wird mit folgendem Befehl angestoßen:

apt-get install nginx

Als nächstes müssen wir nginx konfigurieren. Wir legen Wert darauf dass unser Webserver nur aktuelle Sicherheitsalgorythmen verwendet, daher müssen wir vorher noch kurz einen Diffie-Hellman Schlüssel erzeugen:

mkdir -p /etc/ssl/private
chmod 710 /etc/ssl/private
cd /etc/ssl/private
openssl dhparam -out dhparams.pem 2048
chmod 600 dhparams.pem

Nun zur eigentlichen Konfiguration des nginx. Dazu öffnen wir folgende Datei und ersetzen den Inhalt komplett: /etc/nginx/sites-enabled/default
Der neue Dateiinhalt: Link (dabei muss „deine.cloud“ durch deine Domain ersetzt werden)

Hat man die Datei entsprechend angepasst, kann nginx neu gestartet werden:

/etc/init.d/nginx restart

Unter deiner Domain sollte nextcloud nun bereits erreichbar sein. Jedoch müssen wir erst noch MySQL installieren, da wir für nextcloud eine Datenbank benötigen.

MYSQL

Installiert wird MySQL mit folgendem Befehl. Während der Installation wird man nach dem root Passwort gefragt welches man sich unbedingt merken/notieren sollte!

apt-get install mysql-server mysql-client

Als nächstes sichern wir die MySQL Installation ab

mysql_secure_installation

Nun brauchen wir noch einen eigenen Datenbank Benutzer und Datenbank für unsere Nextcloud Installation

Dazu loggen wir uns als root mit dem bei der Installation vergebenem Passwort ein:

mysql -u root -p

Zum Erstellen einer eigenen Datenbank namens „nextclouddb“ nutzen wir folgenden Befehl

create database nextclouddb;

Dann erstellen wir einen Benutzer den wir „nextclouduser“ nennen. Wichtig! „password“ müssen wir durch ein neues Passwort ersetzen.

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

Zu letzt braucht der gerade erstellte Benutzer noch Berechtigungen auf die gerade erstellte Datenbank. Auch hier müssen wir das Passwort ersetzen.

grant all on nextclouddb.* to 'nextclouduser' identified by 'password';

Nun haben wir die Datenbank eingerichtet und können den MySQL Client schließen.

exit

Jetzt die eigentliche Nextcloud Installation

Wir sind fast fertig. Es muss nur noch nextcloud installiert werden, dazu laden wir uns die aktuelle Version von Nextcloud in unser Webserververzeichnis.

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

unzip nextcloud-13.0.0-zip

Die Dateien noch ins Webverzeichnis kopieren und wir können die Installation im Webbrowser starten.

11 Kommentare

  1. ich hatte im „alten“ (?) Blog schon mal nachgefragt: ist der Rest des Artikels verloren gegangen oder noch in Arbeit?
    Ich interessiere mich tatsächlich sehr für diese Umsetzung (nginx/php7).
    Viel Spaß und Erfolg auch weiterhin!
    Thomas

  2. Danke für das update!
    Aber ist das jetzt wirklich vollständig? Wie geht’s nach der MySQL-Einrichtung weiter, „nur“ noch nextcloud (das bekäme ich vermutlich alleine hin)?

  3. Vielen Dank für die ausführliche Anleitung; ich bin gerade dabei mich durch zu arbeiten. Gibt es irgendwo eine detaillierte Erklärung zur Nginx Konfiguration die du verlinkt hast? Ich bin in dem Bereich noch ein kompletter Neuling, manche Teile sind zwar selbsterklärend, andere verstehe ich leider gar nicht.

  4. Hi, ich habe gerade Deb-8.7 komplett neu aufgesetzt und ohne noch was zu machen mit dem Tutorial hier angefangen. 1-2 Sachen sind mir aufgefallen…
    Erst muss nginx installiert werden und da der Webroot richtig angepasst werden.
    Danach kann erst ‚certbot certonly‘ ausgeführt , da er ohne nginx keine Verbindung bekommt.
    Und erst danach kann /etc/nginx/sites-enabled/default mit der im Link angegebenen Datei ersetzt werden…

    So… Jetzt besteht nach dem Tutorial bei mir noch das Problem, dass sobald ich mit einem Browser auf meine Domain gehe, „File not found.“ angezeigt wird (egal welcher Pfad) und im Error.log steht dabei folgendes:

    FastCGI sent in stderr: „Primary script unknown“ while reading response header from upstream, client: xx.xx.xx.xx, server: , request: „GET /nextcloud/ HTTP/1.1“, upstream: „fastcgi://unix:/run/php/php7.0-fpm.sock:“, host: „meine.domain“

    (IP und host ersetzt)

    • Hallo,

      bei der SSL Beantragung ging ich vom Standalone Modus des Certbots aus, spricht es wird kein Webserver benötigt, Certbot erstellt diesen temporär selbst. Daher ist es auch nicht nötig nginx dafür zu konfigurieren oder zu verwenden.

      Die von mir bereitgestellte nginx Konfiguration geht davon aus das nextcloud direkt unter /var/www/ installiert wird.

      • Achso… Vielen Dank für die Antwort…
        Dachte bei dem Webserver von Certbot läuft der dann immer und nicht nur temporär zum erstellen…
        Gut dann macht das in dieser Reihenfolge natürlich sinn.

        MFG

    • ich habe auch das Problem mit „file not found“ und komme nicht dahinter, woran das liegt. hat da jemand noch eine Idee?

      • Kontrolliere bitte in der Datei /etc/nginx/sites-enabled/default welcher Pfad hinter „root“ steht. Unter diesem Pfad muss die index.php (und alle anderen Dateien) von nextcloud liegen.

Kommentar hinterlassen

E-Mail Adresse wird nicht veröffentlicht.


*