NextCloud installieren – Komplette Installation inkl. Fix der „Probleme“

Mit dieser Ausführlichen Anleitung bist DU in der Lage, einen komplett frischen Linux-Server mit einer NextCloud Instanz auszustatten und die im Anschluss noch offenen „Probleme“ oder ehr Punkte zu beheben.

Dies ist eine „Code abkopieren und abschicken“-Anleitung. Viel denken muss man nicht. Lediglich einige Zeilen sollten auf deine Gegebenheiten angepasst werden, damit die Instanz sicher ist und auch am Ende alles funktioniert.

 

Was werden wir machen?

  1. Den Linux-Server mit allen notwendigen Paketen ausstatten
  2. Ein Webserver installieren >> Nginx
  3. Ein SQL-Server installieren und einrichten>> MySQL / MariaDB
  4. Die aktuellste PHP-Version installieren (Zu Tutorialerstellund war Version 7.3 aktuell!)
  5. OPTIONAL: Den Server via SSL / HTTPS absichern
  6. nginx-Config anlegen und anpassen
  7. NextCloud herunterladen und installieren
  8. Offene Punkte noch fixen

Was brauchen wir dafür?

  • Ein Linux-Server (Egal ob vServer, Root-Server, Dedicated Server oder Raspberry Pi)
  • Vollen SSH-Zugriff (Root-Account)
  • Vielleicht die ein oder andere Linux-Kentniss 😉

Ich empfehle diese Anleitung auf einem frischen Linux-Server umzusetzen. Damit entstehen weniger Probleme. Du kannst aber gerne diese Anleitung auch auf deinem aktuellen Server umsetzen, musst aber ggf. weitere Anpassungen vornehmen oder musst einige Dinge nicht umsetzen.

Alles startklar? Dann legen wir los!

1. Alle notwendigen Pakete installieren

Dieser Schritt kann ggf. übersprungen werden, wenn du bereits passende Tools installiert hast und dich mit diesen Vertraut gemacht hast.

# apt update && apt upgrade
# apt install htop iftop nano unzip zip -y

2. nginx installieren

# apt install nginx

Mehr ist es nicht.

3. Den SQL-Server installieren

Wir installieren hier nun MySQL bzw. MariaDB und sichern die Instanz ab.
Anschließend legen wir einen Account für NextCloud an.

# apt install mariadb-server mariadb-client

Installation absichern:

# mysql_secure_installation
Set root password? [Y/n] y
Remove anonymous users? [Y/n] y
Disallow root login remotely? [Y/n] y
Remove test database and access to it? [Y/n] y
Reload privilege tables now? [Y/n] y

5x mit Y für YES bestätigen und 1x ein Root-Passwort setzten. Das wars.

Nun legen wir einen Account für NextCloud an.
Vergebe daher ein neues SICHERES Passwort bei „PASSWORT-HIER-EINTRAGEN“.
Jede Zeile ist ein ganzer Befehl und muss so abgeschickt werden!

# mysql -u root -p
# CREATE DATABASE nextcloud;
# CREATE USER 'nextclouduser'@'localhost' IDENTIFIED BY 'PASSWORT-HIER-EINTRAGEN';
# GRANT ALL ON nextcloud.* TO 'nextclouduser'@'localhost' IDENTIFIED BY 'PASSWORT-HIER-EINTRAGEN' WITH GRANT OPTION;
# FLUSH PRIVILEGES;
# EXIT;

Wer die Befehle und ihre Auswirkung kennt, kann den Datenbanknamen oder den Nutzernamen auch gerne anpassen.

4. PHP installieren

Hinweis: Bei der Erstellung dieser Anleitung war PHP7.3 aktuell. Je nach dem wann du diese Anleitung liest, gibt es eine neuere Version! Passe in dem Fall einfach die Nummer der Pakete an 😉

# apt install php7.3-fpm php7.3-mbstring php7.3-xmlrpc php7.3-soap php7.3-apcu php7.3-smbclient php7.3-ldap php7.3-redis php7.3-gd php7.3-xml php7.3-intl php7.3-json php7.3-imagick php7.3-mysql php7.3-cli php7.3-ldap php7.3-zip php7.3-curl

5. OPTIONAL: HTTPS-Zertifikat erstellen (Lets Encrypt)

Dieser Schritt ist optional, wenn du deine NextCloud-Instanz nur Zuhause hostest und kein Zugriff über das Internet möglich ist. Stellst du deine Instanz aber im Internet zur Verfügung, solltest du diesen Schritt dringend durchführen! Eine Doamin ist zwingend Erforderlich für diesen Schritt!
(Falls du keine hast, hol dir eine kostenlose .tk .gq … Doamin bei Freenom.)

Passe hier nur ledeglich deine Domain an.

# apt install certbot python3-certbot-nginx
# service nginx stop
# certbot certonly -d domain.de -d www.domain.de

Bei Abfrage ob der Certbot einen temporären Webserver erstellen soll, drücke die Taste 1!

6. nginx-Config anlegen und anpassen

Hier gibt es zwei Vorlagen. Die erste ist OHNE HTTPS, die zweite ist MIT HTTPS!
Für Installationen die im Internet zur Verfügung stehen, ist dringen die zweite Empfohlen!

# nano /etc/nginx/sites-available/nextcloud

OHNE HTTPS:

server {
    listen 80;
    listen [::]:80;
    root /var/www/nextcloud;
    index  index.php index.html index.htm;
    server_name  DEINE-DOMAIN.de WWW.DEINE-DOMAIN.DE ODER DEINE IP;

    client_max_body_size 512M;
    fastcgi_buffers 64 4K;

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

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

    location ~ ^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+)\.php(?:$|/) {
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        fastcgi_pass      unix:/var/run/php/php7.3-fpm.sock; # Ubuntu 17.10
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_intercept_errors on;
        fastcgi_request_buffering off;
    }


    location ~ \.css {
    add_header  Content-Type    text/css;
    }

    location ~ \.js {
    add_header  Content-Type    application/x-javascript;
    }


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

    location ~* \.(?:svg|gif|png|html|ttf|woff|ico|jpg|jpeg)$ {
        try_files $uri /index.php$uri$is_args$args;
        access_log off;
    }

}

MIT HTTPS:

server {
    listen 80;
    listen [::]:80;
    server_name deine-domain.de www.deine-domain.de;
    access_log  /var/log/nginx/nextcloud.access.log;
    error_log   /var/log/nginx/nextcloud.error.log;
    # enforce https
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    access_log  /var/log/nginx/nextcloud.access.log;
    error_log   /var/log/nginx/nextcloud.error.log;
    server_name DEINE-DOMAIN.DE WWW.DEINE-DOMAIN.DE;

    root /var/www/nextcloud;

    client_max_body_size 512M;
    fastcgi_buffers 64 4K;

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

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

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

    location ~ ^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+)\.php(?:$|/) {
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        fastcgi_pass      unix:/var/run/php/php7.3-fpm.sock;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_intercept_errors on;
        fastcgi_request_buffering off;
		fastcgi_read_timeout 300;
    }


    location ~ \.css {
    add_header  Content-Type    text/css;
    }

    location ~ \.js {
    add_header  Content-Type    application/x-javascript;
    }


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

    location ~* \.(?:svg|gif|png|html|ttf|woff|ico|jpg|jpeg)$ {
        try_files $uri /index.php$uri$is_args$args;
        access_log off;
    }

    ssl_certificate /etc/letsencrypt/live/deine-domain.de/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/deine-domain.de/privkey.pem; # managed by Certbot
}

Welche Werte müssen geändert werden?
server_name => Trage hier deine Domain ein. Bei der HTTP-Variante reicht auch z.B. die IP-Adresse. (Beispiel: server_name cloud.deine-domain.de)
fastcgi_pass => Pass hier die php-Version an. Das Beispiel nutzt php7.3!
ssl_certificate + ssl_certificate_key => Ersetze hier deine-domain.de durch deine Domain!

Nun setzen wir die Config aktiv und starten nginx wieder

# ln -s /etc/nginx/sites-available/nextcloud /etc/nginx/sites-enabled/
# systemctl restart nginx.service

Es darf nun kein Fehler auftreten. Findet er das Zertifikat nicht, weil das Erstellen nicht funktionierte, versuche erneut ein Zertifikat zu erstellen.

7. NextCloud installieren

Wir installieren NextCloud in das Root-Verzeichnis des Webservers. Wer einen anderen Pfad nutzen möchte, kann das tun, muss aber dann die Vorlagen gründlich anpassen!
Öffne die Webseite von NextCloud, damit du gleich den korrekten Link abkopieren kannst >> NextCloud.com

# cd /home/user
# wget https://download.nextcloud.com/server/releases/nextcloud-AKTUELLE-VERSION-HIER-EINTRAGEN.zip
# unzip nextcloud-AKTUELLE-VERSION-HIER-EINTRAGEN.zip
# mv nextcloud /var/www/
# chown -R www-data:www-data /var/www/nextcloud/

Nun können wir zum ersten mal NextCloud im Browser aufrufen.
Also einen Browser öffnen und entweder die IP-Adresse des Servers eingeben oder eben eure Domain.

Wir müssen nun folgende Daten angeben:

  • Administratorkonto: Benutzername + SICHERES Kennwort
  • Datenverzeichnis: Falls nicht das Standardverzeichnis genutzt werden soll, kann der Pfad angepasst werden. Benutzer www-data muss aber im neuen Verzeichnis Lese + Schreibrechte haben!
  • Datenbankbenutzer: nextclouduser
  • Datenbankpasswort: Das von dir gewählte Passwort aus Schritt 3
  • Datenbank: nextcloud

Ganz unten kann noch ein Haken gesetzt werden, das die üblichen Apps installiert werden. Das kann man machen, muss man aber nicht.
Dann einen beherzten Klick auf „Installation abschließen“ und dem Server ein paar Sekunden Zeit geben.

FERTIG!

NextCloud ist nun installiert und kann verwendet werden!

Doch Halt! Es geht weiter! Nach einer Kaffeepause 😉

8. Offene Punkte noch fixen

Nach einer einfachen Installation werden warscheinlich folgende „Fehler“ und „Warnungen“ angezeigt werden:

PHP scheint zur Abfrage von Systemumgebungsvariablen nicht richtig eingerichtet zu sein. Der Test mit getenv("PATH") liefert nur eine leere Antwort zurück. Bitte die Installationsdokumentation ↗ auf Hinweise zur PHP-Konfiguration durchlesen sowie die PHP-Konfiguration Deines Servers überprüfen, insbesondere dann, wenn PHP-FPM eingesetzt wird.
Die PHP-Speichergrenze liegt unterhalb des empfohlenen Wertes von 512MB.
Der HTTP-Header "Strict-Transport-Security" ist nicht auf mindestens 15552000 Sekunden eingestellt. Für mehr Sicherheit wird das Aktivieren von HSTS empfohlen, wie es in den Sicherheitshinweisen erläutert ist.
Dein Web-Server ist nicht richtig eingerichtet um "/.well-known/caldav" aufzulösen. Weitere Informationen findest Du in der Dokumentation.
Dein Web-Server ist nicht richtig eingerichtet um "/.well-known/carddav" aufzulösen. Weitere Informationen findest Du in der Dokumentation.
Es wurde kein PHP-Memory-Cache konfiguriert. Zur Erhöhung der Leistungsfähigkeit kann ein Memory-Cache konfiguriert werden. Weitere Informationen findest Du in der Dokumentation.
Bei einigen Spalten in der Datenbank fehlt eine Konvertierung in big int. Aufgrund der Tatsache, dass das Ändern von Spaltentypen bei großen Tabellen einige Zeit dauern kann, wurden sie nicht automatisch geändert. Durch Ausführen von "occ db:convert-filecache-bigint" können diese ausstehenden Änderungen manuell übernommen werden. Diese Operation muss ausgeführt werden, während die Instanz offline ist. Weitere Einzelheiten findest Du auf der zugehörigen Dokumentationsseite.

    mounts.storage_id
    mounts.root_id
    mounts.mount_id

Solltest du kein HTTPS verwenden, wird auch deswegenein weiterer „Fehler“ bzw. eine „Warnung“ angezeigt.
Diese können mit wenig Aufwand behoben werden. Damit läuft NextCloud ein Stück flotter und besser.
ACHTUNG: Achtet auf die korrekte PHP-Version!!! Das Beispiel hier ist mit php7.3!

Folgende Datei öffnen:

# nano /etc/php/7.3/fpm/php.ini

Sucht nach dem Wert „cgi.fix_pathinfo„, entfernt davor das ; und setzt den Wert auf 0 (Standardgemäß ist er auf 1)

cgi.fix_pathinfo=0

Und das Memory_Limit können wir auch noch erhöhen.

memory_limit = 1024M

Alles zwischen 512MB und 1GB ist ok. Falls du nur 1GB RAM im System hast, setzte das Limit auf maximal 700MB.

Öffnet nun folgende Datei:
ACHTUNG: Achtet auf die korrekte PHP-Version!!! Das Beispiel hier ist mit php7.3!

# nano /etc/php/7.3/fpm/pool.d/www.conf

Entfernt nun bei folgenden Werten überall das ; !
Es muss dann so aussehen:

env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
clear_env = no

Startet PHP nun neu:
ACHTUNG: Achtet auf die korrekte PHP-Version!!! Das Beispiel hier ist mit php7.3!

# /etc/init.d/php7.3-fpm restart

Als nächstes müssen wir die Datenbank noch anpassen.

# mysql -u root -p

Schicke nun folgende Befehle ab:

use nextcloud;
set global innodb_large_prefix=on;
set global innodb_file_format=Barracuda;
EXIT

Starte nun den Datebankserver neu oder (am besten gleich) den ganzen Server.
Reboot tud gut!

Wieder anmelden:

# mysql -u root -p

Folgenden Befehl abschicken:

ALTER DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
EXIT

Als nächstes soll NextCloud die Datenbank für sich selbst noch einmal anpassen:
Passe ggf. den Pfad zur NextCloud-Installation an!

# sudo -u www-data php /var/www/nextcloud/occ config:system:set mysql.utf8mb4 --type boolean --value="true"
# sudo -u www-data php /var/www/nextcloud/occ maintenance:repair
# sudo -u www-data php /var/www/nextcloud/occ db:add-missing-indices
# sudo -u www-data php /var/www/nextcloud/occ db:convert-filecache-bigint
# sudo -u www-data php /var/www/nextcloud/occ db:convert-filecache-bigint

Zum Schluss aktivieren wir noch den lokalen Cache.
Füge in der Config nun noch folgende Zeile dazu:

# nano /var/www/nextcloud/config/config.php
  'memcache.locking' => '\\OC\\Memcache\\Redis',

Einfach diese Zeile über dem letzten ); einfügen.

FERTIG!

Nein jetzt im Ernst, fertig!
NextCloud läuft und es sollten nun keinerlei Fehler mehr zu sehen sein.

Schreibe einen Kommentar

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

* Durch das Absenden dieses Kommentars werden deine angegebenen Daten auf dem Server gespeichert. Du stimmst dadurch den Datenschutzbedingungen zu.