Vorwort zur eigenen Cloud
Mein nächstes Vorhaben ist eine eigene kleine Cloud. Hauptsächlich will ich eine eigene Cloud, um Dateien einfach und schnell zur Verfügung zu stellen. Ob private Dinge für Freunde oder Familie oder auch öffentliche Dateien, die jeder herunterladen darf wie z.B. für mein Bedwars-Plugin (hier).
In diesem Artikel wird die eigene Cloud mithilfe von Nextcloud (einem Fork von OwnCloud) erstellt. Wir installieren dazu einen Apache2-Webserver und PHP. Denn Nextcloud basiert auf PHP. Im Frontend kommt jQuery und ein eigenes kleines Framework von OwnCloud zum Einsatz. Gewisse Daten müssen auch irgendwo gespeichert werden, deshalb brauchen wir noch einen MySQL-Server mit Datenbank.
Detailierte Informationen gibt es auf https://docs.nextcloud.com
Wir werden die aktuellste Version Nextcloud installieren:
Nextcloud 12 (Stand: Juli 2017)
Bitte stelle zuvor sicher, dass deine Pakete auf dem aktuellen Stand sind indem du im Terminal folgenden Kommando ausführst:
1 |
sudo apt-get update |
Installation Apache2
Bevor wir Nextcloud installieren können, müssen wir zuerst den Apache2 Webserver installieren, der später unsere Cloud ausführt.
Dazu werden wir die erforderlichen Packages mithilfe des Paket-Managers apt installieren:
1 |
sudo apt-get install apache2 |
Dann müssen/sollten noch diverse Apache2-Module aktiviert werden:
1 2 3 4 5 |
a2enmod rewrite a2enmod headers a2enmod env a2enmod dir a2enmod mime |
Mehr ist bei Apache2 vorerst nicht zu tun, erst später werden wir auf Apache2 zurückgreifen.
Installation MySQL
Dass Nextcloud Daten speichern kann, brauchen wir eine MySQL-Datenbank. Dazu brauchen wir auch erstmal einen MySQL-Server, wen wir wieder mithilfe von apt installieren:
1 |
sudo apt-get install mysql-server |
Während der Installation wird man nach einem root-Passwort gefragt. Ein gewünschtes, sicheres Passwort eingeben und bitte notieren. Ansonsten ist das Ändern des Passworts für den root-User später einfach möglich.
Um MySQL zu sichern, bringt MySQL ein Script mit. Dieses führen wir wie folgt aus:
1 |
mysql_secure_installation |
Hier werden wir nach dem root-Passwort gefragt. Dieses bitte eingeben. Danach werden wir noch gefragt, ob wir das root-Passwort ändern möchten. Hier verneinen wir mit einem N.
Danach werden wir weitere Dinge gefragt. Am besten ist es alle mit Ja (y) zu beantworten. Allerdings kann man natürlich auch selbst entscheiden. Ausgabe:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
By default, a MySQL installation has an anonymous user, allowing anyone to log into MySQL without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? [Y/n] y ... Success! Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? [Y/n] y ... Success! By default, MySQL comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? [Y/n] y - Dropping test database... ... Success! - Removing privileges on test database... ... Success! Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? [Y/n] y ... Success! Cleaning up... |
Für Nextcloud im späteren Verlaufe brauchen wir eine Datenbank. Um diese anlegen zu können müssen wir uns mit dem gerade-installierten MySQL-Server verbinden und mit dem root-Benutzer anmelden:
1 |
mysql -u root -p |
Hier werden wir wieder nach unserem root-Passwort gefragt, was wir dann selbstverständlich auch eingeben. Dann öffnet es uns die mysql Konsole. Dort führen wir folgenden SQL-Befehl aus:
1 2 |
mysql> CREATE DATABASE nextcloud CHARACTER SET utf8 COLLATE utf8_general_ci; Query OK, 1 row affected (0,17 sec) |
Mit quit beenden wir die MySQL-Konsole wieder. Und damit ist die MySQL-Installation abgeschlossen.
Installation PHP
Wie gesagt basiert Nextcloud auf PHP. Dabei ist mindestens PHP 5.6 benötigt. Da wir aber professionelle Administratoren sind (hehe), greifen wir auf die aktuellere Version PHP 7.0 zurück. Dies installieren wir mithilfe eines Repositorys von Dotdeb. Debian müssen wir dieses Repository zuerst bekannt machen. Dazu öffnen wir die Datei sources.list
1 |
nano /etc/apt/sources.list |
und fügen ans Ende dieser Datei folgende zwei Zeilen ein:
1 2 |
deb http://packages.dotdeb.org jessie all deb-src http://packages.dotdeb.org jessie all |
Und danach müssen wir noch den Dotdeb GnuPG Schlüssel installieren, um das Herunterladen der Pakete zu ermöglichen:
1 2 |
wget https://www.dotdeb.org/dotdeb.gpg sudo apt-key add dotdeb.gpg |
Und nun installieren wir PHP wieder mit dem Paket-Manager apt:
1 2 3 |
sudo apt-get install libapache2-mod-php7.0 sudo apt-get install php7.0-gd php7.0-json php7.0-mysql php7.0-curl php7.0-mbstring sudo apt-get install php7.0-intl php7.0-mcrypt php7.0-imagick php7.0-xml php7.0-zip |
Dann wird das PHP-Modul in Apache2 aktiviert:
1 |
a2enmod php7.0 |
Und schließlich der Apache2 Webserver neu gestartet:
1 |
service apache2 restart |
Nun haben wir alle benötigten Pakete installiert (außer Nextcloud selbst). Nun kommen wir zur Konfiguration.
Konfiguration Apache2
Ich persönlich bevorzuge es meine Cloud auf einer Subdomain laufen zu lassen. Deshalb konfigurieren wir Apache2 so, dass Nextcloud auf einer Subdomain namens cloud.domain.tld läuft. Der Name ist nur ein Beispiel und muss in allen Fällen mit der eigenen Domain ersetzt werden.
Zuerst erstellen wir einen neuen vHost in Apache2. Dafür erstellen wir zuerst einen Ordner, auf den die Subdomain verweist:
1 |
mkdir /var/www/cloud.domain.tld |
Dann erstellen wir die vHost-Datei im Ordner /etc/apache2/sites-available folgendermaßen:
1 |
sudo nano /etc/apache2/sites-available/cloud.domain.tld.conf |
Mit folgenden Inhalt:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<VirtualHost *:80> ServerAdmin webmaster@domain.tld ServerName cloud.domain.tld DocumentRoot /var/www/cloud.domain.tld <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/cloud.domain.tld> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> ErrorLog ${APACHE_LOG_DIR}/nextcloud.log LogLevel warn </VirtualHost> |
Wenn wir alles richtig gemacht haben, können wir die Seite aktivieren und erhalten keine Fehlermeldung:
1 2 |
a2ensite cloud.domain.tld service apache2 reload |
Damit hätten wir Apache2 konfiguriert und wir kommen zur Nextcloud-Konfiguration
Installation Nextcloud
Endlich kommen wir zur Installation von Nextcloud. Wir sind unserer eigenen Cloud schon etwas näher. Zuerst gehen wir in unser erstellten Ordner, in dem Nextcloud nun installiert werden soll:
1 |
cd /var/www/cloud.domain.tld |
In diesen Ordner laden wir die aktuelle Nextcloud-Installation herunter:
1 |
wget https://download.nextcloud.com/server/releases/nextcloud-12.0.0.tar.bz2 |
Zur Sicherheit verifizieren wir nun, ob die heruntergeladene Datei nicht beschädigt und/oder manipuliert wurde. Dies prüfen wir anhand der SHA256-Prüfsumme und dem PGP-Signatur-Schlüssel:
1 2 |
wget https://download.nextcloud.com/server/releases/nextcloud-12.0.0.tar.bz2.sha256 sha256sum -c nextcloud-12.0.0.tar.bz2.sha256 < nextcloud-12.0.0.tar.bz2 |
Die Ausgabe sollte folgende sein:
1 |
nextcloud-12.0.0.tar.bz2: OK |
Ist dies nicht der Fall, sollte man die Datei erneut Herunterladen oder evtl. manuell auf den Server hochladen o.ä. Auf jeden Fall sollte man diese Datei nicht installieren, da die Sicherheit im Vordergrund stehen sollte. Um ganz sicher zu gehen, können wir nun noch die PGP-Signatur prüfen:
1 2 3 4 |
wget https://download.nextcloud.com/server/releases/nextcloud-12.0.0.tar.bz2.asc wget https://nextcloud.com/nextcloud.asc gpg --import nextcloud.asc gpg --verify nextcloud-12.0.0.tar.bz2.asc nextcloud-12.0.0.tar.bz2 |
Die Ausgabe sollte dann diese sein:
1 2 3 4 5 |
gpg: Unterschrift vom Mo 22 Mai 2017 10:33:42 CEST mittels RSA-Schlüssel ID A724937A gpg: Korrekte Unterschrift von "Nextcloud Security <security@nextcloud.com>" gpg: WARNUNG: Dieser Schlüssel trägt keine vertrauenswürdige Signatur! gpg: Es gibt keinen Hinweis, daß die Signatur wirklich dem vorgeblichen Besitzer gehört. Haupt-Fingerabdruck = 2880 6A87 8AE4 23A2 8372 792E D758 99B9 A724 937A |
Ist dies nicht der Fall, bitte wie oben beschrieben handhaben.
Nun haben wir die .tar.bz2-Datei in unserem Ordner vorliegen. Die müssen wir nun wie folgt entpacken:
1 |
tar -xjf nextcloud-12.0.0.tar.bz2 |
Wir haben nun alle Dateien in einen neuen Ordner nextcloud entpackt. Zuerst können wir die heruntergeladenen Dateien wieder löschen:
1 2 |
rm nextcloud-* rm nextcloud.asc |
Und alle Dateien aus dem nextcloud -Ordner in das Hauptverzeichnis verschieben:
1 |
mv -v nextcloud/* ./ && rm -r nextcloud |
Nun sind alle Dateien im korrekten Ordner. Jetzt müssen wir noch die Berechtigungen korrekt setzen. Der HTTP-Benutzer (Apache2) sollte als Besitzer des Ordners eingetragen werden:
1 |
chown -R www-data:www-data /var/www/cloud.domain.tld |
Nun können wir die grafische Installation starten in dem wir im Browser die URL http://cloud.domain.tld öffnen. Es sollte nun folgendes erscheinen:
Wie im Bild veranschaulicht bitte die Felder mit den passenden Daten befüllen. Zuerst wird ein Administratorenkonto definiert und dann die Verbindungsdaten zur Datenbank angegeben. Mit Klick auf Installation abschließen.
Dies kann einige Sekunden dauern und man wird danach auf die Cloud weitergeleitet. Damit haben wir also unsere eigene Cloud 🙂
Etwas Spaß zum Schluss:
Optional: Aktivieren von SSL
Damit die Verbindungen und vor allem die User-Logins etc. verschlüsselt sind, ist es empfohlen SSL zu aktivieren. Will man die Cloud nach außen veröffentlichen wäre es am besten ein von einer externen Stelle signiertes Zertifikat zu erwerben. Ansonsten kann man auch ein selbst-signiertes Zertifikat mithilfe von openssl erstellen:
1 |
openssl req -new -newkey rsa:4096 -sha256 -days 1095 -nodes -x509 -subj "/C=DE/ST=STATE/L=CITY/O=MAIL/CN=cloud.domain.tld" -keyout /etc/ssl/cloud.domain.tld.key -out /etc/ssl/cloud.domain.tld.cer |
Damit wurde ein selbst-signiertes SSL-Zertifikat erstellt. Zuerst werden wir die Berechtigung des privaten Schlüssels auf ein Minimum setzen. Dann das öffentliche Zertifikat und den privaten Schlüssel in die dafür vorgesehenen Ordner verschieben:
1 2 3 |
chmod 600 /etc/ssl/cloud.domain.tld.key mv /etc/ssl/cloud.domain.tld.key /etc/ssl/private mv /etc/ssl/cloud.domain.tld.cer /etc/ssl/certs |
Nun müssen wir dem Apache2-Server noch mitteilen, dass die Webseite unter cloud.domain.tld mit SSL geladen werden soll. Dafür deaktivieren wir die Seite zuerst, um sie dann danach wieder zu aktivieren zu können:
1 |
a2dissite cloud.domain.tld |
Dann müssen wir die vHost-Datei unter /etc/apache2/sites-available/cloud.domain.tld.conf wie folgt anpassen:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
<VirtualHost *:80> ServerName cloud.domain.tld Redirect permanent / https://cloud.domain.tld/ </VirtualHost> <VirtualHost *:443> ServerAdmin webmaster@yannici.de ServerName cloud.domain.tld DocumentRoot /var/www/cloud.domain.tld SSLEngine on SSLCertificateFile /etc/ssl/certs/cloud.domain.tld.cer SSLCertificateKeyFile /etc/ssl/private/cloud.domain.tld.key Header always set Strict-Transport-Security "max-age=15552000" <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/cloud.domain.tld> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all <IfModule mod_dav.c> Dav off </IfModule> SetEnv HOME /var/www/cloud.domain.tld SetEnv HTTP_HOME /var/www/cloud.domain.tld SSLRequireSSL </Directory> ErrorLog ${APACHE_LOG_DIR}/nextcloud.log LogLevel warn </VirtualHost> |
Mit SSLEngine on aktivieren wir SSL für diese Webseite. Die eine vHost-Datei besteht nun eigentlich aus 2 vHosts. Der VirtualHost für den Port 80 (Http-Port), wird nun jeden Benutzer aber automatisch auf die SSL-Webseite (Port 443) weiterleiten. Mit SSLCertificateFile und SSLCertificateKeyFile definieren wir das zu verwendende Zertifikat und die zu verwendende Schlüsseldatei.
Jetzt brauchen wir nur noch die Seite wieder zu aktivieren und den Apache2-Dienst neu zu laden:
1 2 |
a2ensite cloud.domain.tld service apache2 reload |
Damit sollte nun SSL für eure Cloud aktiviert sein 🙂
Eine Antwort auf „[Debian 8] Eine eigene Cloud mit Nextcloud, Apache2, PHP und MySQL“