Mit NextCloud ist es sehr einfach möglich seine eigene Cloud zu erstellen. Dies hat den Vorteil, dass man genau weiß, was mit seinen Daten passiert und wo diese gespeichert sind. Ich zeige die Installation hier am Beispiel mit nginx, MariaDB und PHP7. In dieser Anleitung gehe ich von einem Server aus, auf dem noch keins dieser Programme installiert ist. Hier auf der Webseite findet ihr noch viele andere nützliche Infos zu Nextcloud Apps, Plugins und sonstigem.

Update

11.08.2018Anpassung an Nextcloud 13
09.07.2017anpassen der nginx Konfiguration an Nextcloud 12

Sollten bereits Programme installiert sein, können diese Schritte übersprungen werden.

1.Nginx

Nginx lässt sich sehr einfach mit folgenden Befehlen installieren.

apt-get update
apt-get install nginx

2.MariaDB

MariaDB lässt sich ebenfalls unter Debian 9 sehr einfach installieren. Dazu einfach folgend Befehle ausführen

apt-get update
apt-get install mariadb-client mariadb-server

Nach der Installation fügt ihr noch folgenden Befehl aus, um MariaDB abzusichern.

mysql_secure_installation

Zu Beginn werdet ihr nach eurem SQL Root Passwort gefragt. Da ihr noch keins vergeben hat, klickt hier einfach „Enter“.


Nun ist MariaDB vollständig installiert.

3.PHP7

PHP7 kann einfach mit folgenden Befehlen installiert werden.

apt-get update
apt-get install php7.0-fpm php7.0-json php7.0-mysql php7.0-curl php7.0-intl php7.0-mcrypt php7.0-gd php7.0-zip php7.0-xml php7.0-mbstring php-imagick

Welche Funktion die einzelnen Module erfüllen, kann auf der offiziellen Homepage nachgelesen werden. Bei zusätzlichen Funktionen müssen später noch Module nachinstalliert werden.

4.Nextcloud

4.1 Download der Installations-Datei

Nextcloud kann einfach von der Homepage des Herstellers bezogen werden. Die derzeit aktuelle Version lautet 13.0.5 Zuerst wechseln wir nun ins Verzeichnis unseres nginx Webservers und installieren danach noch ein Programm (unzip), um die Nextcloud Installationsdatei zu entpacken. Danach wird die Datei entpackt und die Verzeichnisrechte für den Webserver angepasst.

apt-get install unzip
cd /var/www/html/
wget https://download.nextcloud.com/server/releases/nextcloud-13.0.5.zip
unzip nextcloud-13.0.5.zip
chown -R www-data:www-data nextcloud

4.2 SQL Benutzer anlegen

Da NextCloud eine SQL Datenbank (bei uns MariaDB) benötigt, muss hierfür auch ein Benutzer angelegt werden. Dazu loggen sie sich bei MariaDB als Administrator ein mit dem oben im Schritt 2 festgelegten Passwort. Diese Werte werden mittels der nachfolgenden Codezeilen erzeugt. Diese können jedoch einfach verändert werden.

Administrator: nextadmin
Datenbankname: nextcloud
Passwort: geheimesPasswort

mysql -u root -p
create database nextcloud;
create user nextadmin@localhost identified by 'geheimesPasswort';
grant all privileges on nextcloud.* to nextadmin@localhost identified by 'geheimesPasswort';
flush privileges;
exit;

Sie müssen unbedingt „geheimesPasswort“ durch ihr eigenes Passwort ersetzen !!!

Im nächsten Schritt müssen noch Änderungen an der MariaDB Konfiguration vorgenommen werden. Diese gibt der Hersteller auf seiner Homepage genau an.

Diese Änderungen machen wir mit folgenden Befehlen:

echo "log-bin = /var/log/mysql/mariadb-bin" >> /etc/mysql/my.cnf
echo "log-bin-index = /var/log/mysql/mariadb-bin.index" >> /etc/mysql/my.cnf
echo "binlog_format = mixed" >> /etc/mysql/my.cnf

Danach muss die Datenbank nur noch neugestartet werden.

service mysql reload

4.3 Nginx Konfiguration anpassen

Die Konfigurationsdateien zu nginx können ihr auf der Homepage von Nextcloud anschauen.

Die nachfolgenden Konfigurationen sind alle so gemacht, dass Nextcloud später über die URL „cloud.eureDomain.de“ aufgerufen werden kann.

Im Nachfolgenden zeige ich euch die Konfiguration von der Herstellerwebseite. Da die Daten verschlüsselt übertragen werden sollten, müssen sie noch ein Zertifikat erstellen, wenn sie noch keins haben sollten. Wie sie ein passendes Zertifikat erstellen erfahren sie hier.

Ihr müsst nun die Konfiguration öffnen:

nano /etc/nginx/sites-available/default

und mit nachfolgendem Code den Inhalt der Datei überschreiben.

Die markierten Stellen müsst ihr anpassen.

upstream php-handler {
server unix:/run/php/php7.0-fpm.sock;
}

server {
    listen 80;
    server_name cloud.example.com;
    # enforce https
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    server_name cloud.example.com;

    ssl_certificate /etc/ssl/nginx/cloud.example.com.crt;
    ssl_certificate_key /etc/ssl/nginx/cloud.example.com.key;

    # Add headers to serve security related headers
    # Before enabling Strict-Transport-Security headers please read into this
    # topic first.
    # add_header Strict-Transport-Security "max-age=15768000;
    # includeSubDomains; preload;";
    #
    # WARNING: Only add the preload option once you read about
    # the consequences in https://hstspreload.org/. This option
    # will add the domain to a hardcoded list that is shipped
    # in all major browsers and getting removed from this list
    # could take several months.
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Robots-Tag none;
    add_header X-Download-Options noopen;
    add_header X-Permitted-Cross-Domain-Policies none;

    # Path to the root of your installation
    root /var/www/html/nextcloud/;

    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

    # The following 2 rules are only needed for the user_webfinger app.
    # Uncomment it if you're planning to use this app.
    #rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
    #rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json
    # last;

    location = /.well-known/carddav {
      return 301 $scheme://$host/remote.php/dav;
    }
    location = /.well-known/caldav {
      return 301 $scheme://$host/remote.php/dav;
    }

    # set max upload size
    client_max_body_size 512M;
    fastcgi_buffers 64 4K;

    # Enable gzip but do not remove ETag headers
    gzip on;
    gzip_vary on;
    gzip_comp_level 4;
    gzip_min_length 256;
    gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
    gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;

    # Uncomment if your server is build with the ngx_pagespeed module
    # This module is currently not supported.
    #pagespeed off;

    location / {
        rewrite ^ /index.php$uri;
    }

    location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ {
        deny all;
    }
    location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) {
        deny all;
    }

    location ~ ^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+)\.php(?:$|/) {
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param HTTPS on;
        #Avoid sending the security headers twice
        fastcgi_param modHeadersAvailable true;
        fastcgi_param front_controller_active true;
        fastcgi_pass php-handler;
        fastcgi_intercept_errors on;
        fastcgi_request_buffering off;
    }

    location ~ ^/(?:updater|ocs-provider)(?:$|/) {
        try_files $uri/ =404;
        index index.php;
    }

    # Adding the cache control header for js and css files
    # Make sure it is BELOW the PHP block
    location ~ \.(?:css|js|woff|svg|gif)$ {
        try_files $uri /index.php$uri$is_args$args;
        add_header Cache-Control "public, max-age=15778463";
        # Add headers to serve security related headers (It is intended to
        # have those duplicated to the ones above)
        # Before enabling Strict-Transport-Security headers please read into
        # this topic first.
        # add_header Strict-Transport-Security "max-age=15768000;
        #  includeSubDomains; preload;";
        #
        # WARNING: Only add the preload option once you read about
        # the consequences in https://hstspreload.org/. This option
        # will add the domain to a hardcoded list that is shipped
        # in all major browsers and getting removed from this list
        # could take several months.
        add_header X-Content-Type-Options nosniff;
        add_header X-XSS-Protection "1; mode=block";
        add_header X-Robots-Tag none;
        add_header X-Download-Options noopen;
        add_header X-Permitted-Cross-Domain-Policies none;
        # Optional: Don't log access to assets
        access_log off;
    }

    location ~ \.(?:png|html|ttf|ico|jpg|jpeg)$ {
        try_files $uri /index.php$uri$is_args$args;
        # Optional: Don't log access to other assets
        access_log off;
    }
}

Nun muss nginx neu gestartet werden, damit die Konfiguration eingelesen wird.

service nginx restart

5. NextCloud starten

Wenn ihr nun NextCloud startet, dann solltet ihr folgendes sehen.

Das Datenverzeichnis sollte aus Sicherheitsgründen nicht innerhalb des Webservers liegen. Also NICHT im Pfad „/var/www/….“. Damit nginx später aber Zugriff auf das Verzeichnis hat, müsst ihr die Verzeichnis-Berechtigungen entsprechend anpassen von eurem Datenverzeichnis. Das kann zum Beispiel so aussehen für das Verzeichnis „/opt/nextcloudDaten“:

chown -R www-data:www-data /opt/nextcloudDaten/

Hier gebt ihr noch den Benutzer + Passwort an, den ihr im Schritt 4.2 angelegt habt.

Nun seid ihr fertig und habt eure eigene Cloud für eure Daten. Nun könnt ihr hier auf der Webseite noch nach anderen nützlichen Anleitungen für Nextcloud suchen.

 

 

 

Teile diesen Beitrag
Christian

Categories:

13 Kommentare

  1. Hey, Super Arbeit die du hier vollbringst!!!
    Deine Anleitungen sind echt klasse.

    In der Nginx-Konfiguration musste bei mir das obere

     

    add_header X-Frame-Options "SAMEORIGIN";

    herausgelöscht werden, da die clickjacking-Abwehr sonst nicht richtig funktioniert.

    • Hallo,
      freut mich, dass dir meine Anleitungen gefallen 🙂

      Ich habe diese Anleitungen wie im Text beschrieben direkt so von der Herstellerwebseite kopiert. Aber gut zu wissen.

  2. Hey,

    auch ich möchte mich für die tolle Anleitung bedanken. Das mit dem

    add_header X-Frame-Options "SAMEORIGIN";

    musste auch ich bei mir entfernen.
    Leider habe ich noch ein anderes Problem und leider keine wirklich funktionierende Lösung gefunden. Vielleicht hast Du da ja eine Idee:

    Ich nutze KeePass für meine Passwörter und öffne die kdbx-Datei über eine URL (NextCloud, WebDAV). Leider kommt aber immer eine Fehlermeldung: „Der Server hat eine Protokollverletzung ausgeführt. Section=ResponseHeader Detail=Auf CR muss LF folgen“.
    Gleiches Problem auch mit dem Outlookconnector für den NextCloud Calender

    Alles was Google so her gibt, und irgendwie einleuchtend war (leider sagen die meisten das man im .NET Framework eine Option setzen soll, was ja nur das Problem umgeht), hat nicht funktioniert.

    Meine aktuelle Programmversionen:
    Debian 9.0
    nginx 1.10.3
    PHP 7.0.19-1

    Schon mal vielen Dank im voraus

    • Das Problem hat sich erledigt. Ich habe mir bei NextCloud die Konfigurationsdatei für ngix in Verbindung mit NextCloud 12 angesehen. Diese weicht von deiner hier geposteten ab.

      Zusätzlich scheint es ein Problem mit

      add_header Strict-Transport-Security "max-age=15768000;

      zu geben. Welches standardmäßig zwar deaktiviert ist, aber der Sicherheit wegen zum Aktivieren empfohlen wird.

  3. Kannst du mir sagen wofür die MariaDB configs bezüglich des logging verhaltens gut sein sollen?

    echo "log-bin = /var/log/mysql/mariadb-bin" >> /etc/mysql/my.cnf
    echo "log-bin-index = /var/log/mysql/mariadb-bin.index" >> /etc/mysql/my.cnf
    echo "binlog_format = mixed" >> /etc/mysql/my.cnf

    Das führt dazu das der normale mysql/mariadb commandline client nicht mehr funktioniert.

    Sagt dann folgendes beim Aufruf:

    $ mysql
    mysql: unknown variable 'log-bin=/var/log/mysql/mariadb-bin'

    Ich habe die Konfigurationen wieder heraus genommen. Ich finde da auch sonst nichts wofür das nötig sein sollte…

  4. in der Anleitung schreibst Du man solle Nextcloud nach /var/www/html/ herunterladen und dort entpacken. Deine Nginx-Config zeigt aber auf /var/www/nextcloud

     

Schreibe einen Kommentar

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