Skip to main content

Debian 8 Jessie – NextCloud mit nginx, MariaDB und PHP7 installieren

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.

Update

16.06.2017Link wurde auf Nextcloud 12 aktualisiert

 

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

Wenn sie eine aktuellere Version von Nginx installieren wollen, als die in den Debian Repositories, dann folgen sie dieser Anleitung.

Ansonsten ist die nginx Installation somit schon beendet.

2.MariaDB

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

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

Während der Installation werdet ihr nach einem Passwort für den MariaDB Root User gefragt. Dort wählt ihr einfach ein sicheres Passwort.

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

mysql_secure_installation


Nun ist MariaDB vollständig installiert.

3.PHP7

3.1 Überprüfen auf PHP5

Um PHP7 zu installieren müssen sie sicherstellen, dass PHP5 vollständig entfernt ist. Dazu geben sie folgenden Befehl ein:

dpkg --list | grep php | awk '/^ii/{ print $2}'

Wenn wie auf dem Foto noch PHP5 Elemente angezeigt werden, dann müssen diese zuerst deinstalliert werden.

3.2 PHP5 deinstallieren

Dazu führen sie einfach die beiden nachfolgenden Befehle aus. Diese deinstallieren alle auf dem Server vorhandenen PHP5 Elemente.

uninstall="$(dpkg --list | grep php | awk '/^ii/{ print $2}')"
apt-get --purge remove $uninstall

3.3 PHP7 installieren

Um PHP7 zu installieren müssen sie zwei weitere Paketquellen zu Debian hinzufügen.

echo 'deb http://packages.dotdeb.org jessie all' >> /etc/apt/sources.list
echo 'deb-src http://packages.dotdeb.org jessie all' >> /etc/apt/sources.list

Wenn alles geklappt hat, sollte der Befehl folgendes anzeigen:

cat /etc/apt/sources.list


deb http://ftp.debian.org/debian jessie main contrib non-free
deb http://ftp.debian.org/debian jessie-updates main contrib non-free
deb http://security.debian.org jessie/updates main contrib non-free
deb http://packages.dotdeb.org jessie all
deb-src http://packages.dotdeb.org jessie all

Um Pakete aus der neuen Quelle zu installieren muss noch der Schlüssel hinzugefügt werden.

cd /tmp
wget https://www.dotdeb.org/dotdeb.gpg
apt-key add dotdeb.gpg

Nun kann PHP7 mit nachfolgenden Befehlen installiert werden.

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

4.Nextcloud

4.1 Download der Installations-Datei

Nextcloud kann einfach von der Homepage des Herstellers bezogen werden. Die derzeit aktuelle Version lautet 11.0. 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-12.0.0.zip
unzip nextcloud-12.0.0.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.

Dazu öffnen sie die Konfigurationsdatei und fügen 3 Zeilen am Ende hinzu.

nano /etc/mysql/my.cnf

Am Ende hinzufügen:

log-bin = /var/log/mysql/mariadb-bin
log-bin-index = /var/log/mysql/mariadb-bin.index
binlog_format = mixed

Danach muss die Datenbank nur noch neugestartet werden.

service mysql reload

4.3 Nginx Konfiguration anpassen

Die Konfigurationsdateien zu nginx können sich auf der Homepage von Nextcloud angeschaut werden. Hier besteht die Möglichkeit Nextcloud direkt im Root Verzeichnis des Webservers oder als Unterverzeichnis zu konfigurieren. Root Verzeichnis bedeutet, dass man über die URL „goneuland.de“ direkt auf die NextCloud Oberfläche kommt. Wenn sie „Unterverzeichnis“ wählen, dann wird NextCloud per „goneuland.de/nextcloud“ aufgerufen. Im Nachfolgenden zeige ich beide Konfigurationen. Da die Daten verschlüsselt übertragen werden sollten, müssen sie noch ein Zerfikat erstellen, wenn sie noch keins haben sollten. In dieser Anleitung wird dies genau erklärt.

4.3.1 Root Verzeichnis

Ihr müsst nun die Konfiguration öffen

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;
    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;";
    add_header X-Content-Type-Options nosniff;
    add_header X-Frame-Options "SAMEORIGIN";
    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;

    # Disable gzip to avoid the removal of the ETag header
    gzip off;

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

    error_page 403 /core/templates/403.php;
    error_page 404 /core/templates/404.php;

    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/.+|core/templates/40[34])\.php(?:$|/) {
        include fastcgi_params;
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        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=7200";
        # 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;";
        add_header X-Content-Type-Options nosniff;
        add_header X-Frame-Options "SAMEORIGIN";
        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;
    }
}

 

4.3.2 Unterverzeichnis

Ihr müsst nun die Konfiguration öffen

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;
    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;";
    add_header X-Content-Type-Options nosniff;
    add_header X-Frame-Options "SAMEORIGIN";
    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/;

    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 /nextcloud/public.php?service=host-meta
    # last;
    #rewrite ^/.well-known/host-meta.json
    # /nextcloud/public.php?service=host-meta-json last;

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

    location /.well-known/acme-challenge { }

    location ^~ /nextcloud {

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

        # Disable gzip to avoid the removal of the ETag header
        gzip off;

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

        error_page 403 /nextcloud/core/templates/403.php;
        error_page 404 /nextcloud/core/templates/404.php;

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

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

        location ~ ^/nextcloud/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+|core/templates/40[34])\.php(?:$|/) {
            include fastcgi_params;
            fastcgi_split_path_info ^(.+\.php)(/.*)$;
            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 ~ ^/nextcloud/(?: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 /nextcloud/index.php$uri$is_args$args;
            add_header Cache-Control "public, max-age=7200";
            # 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;";
            add_header X-Content-Type-Options nosniff;
            add_header X-Frame-Options "SAMEORIGIN";
            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 /nextcloud/index.php$uri$is_args$args;
            # Optional: Don't log access to other assets
            access_log off;
        }
    }
}

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/….

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.

 

 

 

Teile diesen Beitrag
Christian

Christian

Ich studiere derzeit Informatik und betreibe in meiner Freizeit diesen Blog. Auf die Idee kam ich, als ich Anleitungen zum Thema Debian gesucht habe. Leider waren viele Anleitungen veraltet und daher nutzlos. Da kam ich auf die Idee selbst Anleitungen zu schreiben. Wenn meine Anleitungen auch veraltet sein sollten, dann schreibt mir das bitte und ich versuche sie zu aktualisieren.

One thought to “Debian 8 Jessie – NextCloud mit nginx, MariaDB und PHP7 installieren”

  1. Hi,

    danke für den Artikel!

    Kurzer Hinweis: Die Konfiguration in 4.3.2 funktioniert nur, wenn wie weiter oben Nginx aus den Backports installiert wird, die aktuell in Debian 8 verwendete Version 1.6 von Nginx kann (vor Version 1.7.11) mit der Direktive „fastcgi_request_buffering“ nichts anfangen und verweigert dann den Start.

    Gruß André

Schreibe einen Kommentar

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