Dies ist eine alte Version des Dokuments!


Nextcloud unter CentOS 7.x installieren und betreiben

Bild: Nextcloud Logo Mit Hilfe von Nextcloud kann man einen sicheren Datenraum z.B. auf eigenen Servern für seine Nutzer bereitstellen, so dass diese ihre vertraulichen Daten nicht bei einem der diversen Cloud-Dienste nutzen müssen.

Nextcloud wurde vom Owncloud-Gründer Frank Karlitschek zusammen mit ehemaligen Owncloud-Developern als fork der aktuellen Owncloud-Version 9 ins Leben gerufen. Im Gegensatz zum ursprünglichen Projekt Owncloud soll die Weiterentwicklung des forks alle Funktionen des bisherigen Projekts beinhalten, inklusive der kostenpflichtigen Enterprise-Features von Owncloud.

Eine ausführliche Dokumentation findet sich in der Nextcloud Server Administration Manual Release 13.

Bei unserer Nextcloud-Installation wollen wir als Datenbank unsere MariaDB verwenden. Eine ausführliche Installation und Konfigurationsbeschreibung ist hier zu finden.

Als erstes legen wir uns eine Datenbank nextcloud_db an. Anschließend legen wir uns eine zugehörigen Datenbanknutzer an und weisen ihm die erforderlichen Rechte zu.

 # mysql -h localhost -u root -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 73466
Server version: 5.5.47-MariaDB MariaDB Server

Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> create database nextcloud_db;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> CREATE USER 'nextcloud_user'@'10.0.0.97' IDENTIFIED BY '/rb6(gKjabjz5sHdszwh2pc97dsnmdo364nf\';
Query OK, 0 rows affected (0.18 sec)

MariaDB [(none)]> CREATE USER 'nextcloud_user'@'vml000097.dmz.nausch.org' IDENTIFIED BY '/rb6(gKjabjz5sHdszwh2pc97dsnmdo364nf\';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON nextcloud_db.* TO 'nextcloud_user'@'10.0.0.97' IDENTIFIED BY '/rb6(gKjabjz5sHdszwh2pc97dsnmdo364nf\' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON nextcloud_db.* TO 'nextcloud_user'@'vml000097.dmz.nausch.org' IDENTIFIED BY '/rb6(gKjabjz5sHdszwh2pc97dsnmdo364nf\' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.05 sec)

MariaDB [(none)]> exit
Bye

Bevor wir uns das aktuelle Programmpaket von nextcloud herunterladen, wechseln wir in unser lokales Paketverzeichnis.

 # cd /usr/local/src/packages/

Anschliessend holen wir uns das aktuelle tar.bz2-Archiv und dessen zugehörige sha512 Prüfsumme auf unseren Server.

 # wget https://download.nextcloud.com/server/releases/nextcloud-13.0.4.tar.bz2
 # wget https://download.nextcloud.com/server/releases/nextcloud-13.0.4.tar.bz2.sha512

Vom heruntergeladenen Archiv nextcloud-13.0.4.tar.bz2 generieren wir einen eigenen Hash-Wert und legen diesen in einer lokalen Datei ab.

 # sha512sum nextcloud-13.0.4.tar.bz2 > nextcloud-13.0.4.tar.bz2.sha512.local

Nun können wir die beiden Hash-Werte vergleichen und somit prüfen, ob dem Archiv soweit vertraut werden kann.

 # diff nextcloud-13.0.4.tar.bz2.sha512.local nextcloud-13.0.4.tar.bz2.sha512

Sind beide Werte identisch, erfolgt keine Ausgabe - wir können also mit der Installation und Konfiguration fortschreiten.

Nun entpacken wir das heruntergeladene tar.bz2-Archiv an Ort und Stelle.

 # tar -jxpvf nextcloud-13.0.4.tar.bz2 -C /srv/www/html/

Anschliessend passen wir die Berechtigungen des Verzeichnisses /srv/www/html/nextcloud an, so dass unser Apache-User unter dem der HTTP-Daemon läuft darauf zugreifen kann.

 # chown -R apache:apache /srv/www/html/nextcloud

Als Webserver nutzen wir unseren Apache-Webserver 2.4, dessen Installation und Konfiguration ist in diesem Kapitel beschrieben. Zur Absicherung des Web-Traffic kommt selbstredend TLS zum Einsatz. Die Installation und Konfiguration hierzu findet sich im Kapitel SSL gesicherter Webserver mit mod_ssl für Apache httpd 2.4 unter CentOS 7.x.

Für unseren virtuellen Host legen wir uns nun noch eine passende Konfigurationsdatei an:

 # cat /etc/httpd/conf.d/nextcloud.conf
/etc/httpd/conf.d/nextcloud.conf
#
# Django : 2016-07-29
#          vHost cloud.nausch.org (nextcloud) 
#
 
<VirtualHost 10.0.0.97:80>
    ServerAdmin webmaster@nausch.org
    ServerName cloud.nausch.org
 
    RewriteEngine on
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
 
    # Welche Logdateien sollen beschrieben werden
    SetEnvIf Remote_Addr "10\.0\.0\.20" dontlog
    CustomLog logs/nextcloud_access.log combined
    ErrorLog  logs/nextcloud_error.log
</VirtualHost>
<VirtualHost 10.0.0.97:443>
    ServerAdmin webmaster@nausch.org
    ServerName cloud.nausch.org
    ServerPath /
 
    # URL Vereinfachung
    RedirectMatch ^/*$ https://cloud.nausch.org/nextcloud/
 
    # Wer soll Zugriff auf die Webseite(n) bekommen?
    <Location />
        Options -Indexes +FollowSymLinks
        Require all granted
    </Location>
 
    # Welcher Inhalt soll angezeigt bzw. auf welchen Server sollen die HTTP-Requests weitergeleitet werden?
    <Directory "/srv/www/html/nextcloud">
        Options FollowSymLinks
        AllowOverride none
        Require all granted
    </Directory>
 
    <LocationMatch "/(data|config)/">
        Require all denied
    </LocationMatch>
 
    # Welche Logdateien sollen beschrieben werden
    SetEnvIf Remote_Addr "10\.0\.0\.20" dontlog
    CustomLog logs/nextcloud_access.log combined
    ErrorLog  logs/nextcloud_error.log
 
    # Absicherung der Übertragung mit Hilfe von TLS
    # Konfiguration bei Verwendung von mod_gnutls
    <IfModule !mod_ssl.c>
        <IfModule mod_gnutls.c>
            # Django : 2015-10-29 - TLS-Verschlüsselung mit Hilfe von mod_gnutls
            GnuTLSEnable on
            # Definition der anzubietenden Protokolle und Ciphers
            GnuTLSPriorities PFS:-VERS-TLS-ALL:+VERS-TLS1.2:-ARCFOUR-128:+COMP-NULL:+CURVE-SECP384R1:+CURVE-SECP521R1
            # Schlüsseldatei, mit der der CSR erstellt wurde
            GnuTLSKeyFile /etc/pki/tls/private/lists.nausch.org.serverkey.pem
            # Zertifikatsdatei inkl. ggf. notwendiger Zwischen- und Root-Zertifikaten
            # 1) Server-Zertifikat, 2) Intermediate-Root-Zertifikat und 3) Root-Zertifikat der CA
            GnuTLSCertificateFile /etc/pki/tls/certs/lists.nausch.org.certificatechain_151019.pem
            # Definition der Schlüssellänge für DHE und ECDHE
            # DHE Schlüssel mit einer Schlüssellänge von 4096 Bit verwenden; dieser wird 1x pro Tag via cronjob
            # (/etc/cron.daily/edh_keygen) neu generiert und der Neustart des nginx-Daemon veranlasst!
            GnuTLSDHFile /etc/pki/tls/private/dh_4096.pem
            # Session-Tickets für Clients nicht anbieten (dieser könnte versuchen über Tickets die Session zu cachen).
            GnuTLSSessionTickets off
        </IfModule>
    </IfModule>
    # Konfiguration bei Verwendung von mod_ssl
    <IfModule mod_ssl.c>
        <IfModule !mod_gnutls.c>
           # Django : 2015-10-04 - TLS-Verschlüsselung mit Hilfe von mod_ssl
            SSLEngine on
            # Definition der anzubietenden Protokolle
            SSLProtocol All -SSLv2 -SSLv3 
            # Definition der Cipher
            #SSLCipherSuite "AES256+EECDH +AEAD"
            SSLCipherSuite DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA:!aNULL:!eNULL:!EXP:!MD5:!DSS:!LOW
            # Schlüsseldatei, mit der der CSR erstellt wurde
            SSLCertificateKeyFile /etc/pki/tls/private/cloud.nausch.org.serverkey.pem
            # Zertifikatsdatei inkl. ggf. notwendiger Zwischen- und Root-Zertifikaten
            SSLCertificateFile /etc/pki/tls/certs/cloud.nausch.org.certificate_160801.pem
            #SSLCertificateChainFile /etc/pki/tls/certs/RapidSSL_certificatechain.pem
            SSLCertificateChainFile /etc/pki/tls/certs/RapidSSL_SHA256_CA_-_G3.pem
            # Änderung der Cipherorder der Clienets verneinen 
            SSLHonorCipherOrder on
            # TLS 1.0 Kompremmierung deaktivieren (CRIME attacks)
            SSLCompression off
            #
            SSLUseStapling on
        </IfModule>
    </IfModule>
 
    # special stuff ###
 
    # HTTP Strict Transport Security (HSTS), bei dem der Server dem Client im HTTP-Header mitteilt,
    # dass dieser nur noch verschlüsselt mit dem Server kommunizieren soll.
    Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
 
    # This header enables the Cross-site scripting (XSS) filter built into most recent web browsers.
    # It's usually enabled by default anyway, so the role of this header is to re-enable the filter for
    # this particular website if it was disabled by the user.
    # https://www.owasp.org/index.php/List_of_useful_HTTP_headers
    Header set X-XSS-Protection "1; mode=block"
 
    # when serving user-supplied content, include a X-Content-Type-Options: nosniff header along with the Content-Type: header,
    # to disable content-type sniffing on some browsers.
    # https://www.owasp.org/index.php/List_of_useful_HTTP_headers
    # currently suppoorted in IE > 8 http://blogs.msdn.com/b/ie/archive/2008/09/02/ie8-security-part-vi-beta-2-update.aspx
    # http://msdn.microsoft.com/en-us/library/ie/gg622941(v=vs.85).aspx
    # 'soon' on Firefox https://bugzilla.mozilla.org/show_bug.cgi?id=471020
    Header set X-Content-Type-Options nosniff
 
    # config to don't allow the browser to render the page inside an frame or iframe
    # and avoid clickjacking http://en.wikipedia.org/wiki/Clickjacking
    # if you need to allow [i]frames, you can use SAMEORIGIN or even set an uri with ALLOW-FROM uri
    # https://developer.mozilla.org/en-US/docs/HTTP/X-Frame-Options
    header set X-Frame-Options SAMEORIGIN
 
</VirtualHost>

Die weitere Konfiguration erfolgt dann direkt über die Web-GUI, die wir über unsere URL https://cloud.nausch.org erreichen.

Zunächst definieren wir den Admin-Account und weisen diesem ein passendes sicheres Passwort zu.

Bild: Bildschirmhardcopy WEB-GUI Nextcloud Erstkonfiguration

Da wir unsere zuvor definierte Maria-DB nutzen wollen, klicken wir auf die Schaltfläche Speicher & Datenbank. Dort tragen wir dann die benötigten Daten ein.

Bild: Bildschirmhardcopy WEB-GUI Nextcloud Erstkonfiguration

Haben wir alle Daten richtig eingegeben beenden wir die Konfiguration über die Schaltfläche [ Installation abschließen ]. uns wir anschliessend eine Hinweis-Seite zu den zur Verfügung stehenden Clients angezeigt.

Bild: Bildschirmhardcopy WEB-GUI Nextcloud Erstkonfiguration

Dieses Hinweisfenster beenden wir über das x in der rechten oberen Ecke des eingeblendeten Hinweisfensters und gelangen so zum Hauptfenster von Nextcloud.

Bild: Bildschirmhardcopy WEB-GUI Nextcloud Erstkonfiguration

Bevor wir uns das aktuelle (Update-)Programmpaket von nextcloud herunterladen, wechseln wir in unser lokales Paketverzeichnis.

 # cd /usr/local/src/packages/

Anschließend holen wir uns das aktuelle tar.bz2-Archiv und dessen zugehörige sha512 Prüfsumme auf unseren Server.

 # wget https://download.nextcloud.com/server/releases/nextcloud-14.0.4.tar.bz2
 # wget https://download.nextcloud.com/server/releases/nextcloud-14.0.4.tar.bz2.sha512

Vom heruntergeladenen Archiv nextcloud-13.0.6.tar.bz2 generieren wir einen eigenen Hash-Wert und legen diesen in einer lokalen Datei ab.

 # sha512sum nextcloud-14.0.4.tar.bz2 > nextcloud-14.0.4.tar.bz2.sha512.local

Nun können wir die beiden Hash-Werte vergleichen und somit prüfen, ob dem Archiv soweit vertraut werden kann.

 # diff nextcloud-14.0.4.tar.bz2.sha512.local nextcloud-14.0.4.tar.bz2.sha512

Sind beide Werte identisch, erfolgt keine Ausgabe - wir können also nun mit dem Update unserer Installation beginnen.

Bevor wir nun unsere bestehende Installation updaten, versetzen wir erst noch unseren NextCloud-Server in den Wartungsmodus.

 # sudo -u apache php /srv/www/html/cloud/occ maintenance:mode --on
Maintenance mode enabled

Optional können wir auch unseren laufenden NextCloud-Webserver. Dazu deaktivieren wir die Konfigurationsdatei unseres Apache-vHosts indem wir diese umbenennen und den Webserver einmal durchstarten.

 # mv /etc/httpd/conf.d/3rd_cloud.conf /etc/httpd/conf.d/3rd_cloud.conf.deaktiviert
 # systemctl restart httpd.service

Nun sichern wir das bestehende Installationsverzeichnis indem wir es umbenennen.

 # mv /srv/www/html/nextcloud /srv/www/html/nextcloud.old
 # cp -ra /srv/www/html/cloud /srv/www/html/cloud.$(date +%y%m%d)

Nun entpacken wir das heruntergeladene tar.bz2-Archiv an Ort und Stelle.

 # tar -jxpvf /usr/local/src/packages/nextcloud-14.0.4.tar.bz2 -C /srv/www/html/
 # rm -rf /srv/www/html/cloud && mv /srv/www/html/nextcloud /srv/www/html/cloud

Anschliessend passen wir die Berechtigungen des Verzeichnisses /srv/www/html/cloud an, so dass unser Apache-User unter dem der HTTP-Daemon läuft darauf zugreifen bzw. dort auch hineinschreiben kann.

 # chown -R apache:apache /srv/www/html/cloud

Die Konfigurationsdatei config.php unserer bestehenden Installation kopieren wir nun in unser neues Updateverzeichnis.

 # cp -a /srv/www/html/cloud.$(date +%y%m%d)/config/config.php /srv/www/html/cloud/config/config.php

Haben wir das Datenverzeihnis im Web-ROOT-Verzeichnis unseres Apache-Webservers müssen wir nun noch die Daten zurücksichern. Hierzu kopieren wir den Inhalt der gesichterten NextCloud-Installation in das zuvor neu angelegte Verzeichnis.

 # cp -avr /srv/www/html/nextcloud.old/data/ /srv/www/html/nextcloud/data/

Befindet sich das Datrenverzeichnis ausserhalb unseres Web-ROOT-Verzeichnisses brauchen wir nichts unternehmen, da lediglich die Pfadangabe in der Konfigurationsdatei /srv/www/html/nextcloud/config/config.php vermerkt ist und das Datenverzeichnis vom anschliessenden manuellen Update nicht erfasst wird!

Nun können wir unseren NextCloud-Webserver wieder starten. Dazu aktivieren wir die Konfigurationsdatei unseres Apache-vHosts indem wir diese umbenennen und den Webserver einmal durchstarten.

 # mv /etc/httpd/conf.d/nextcloud.conf.deaktiviert /etc/httpd/conf.d/nextcloud.conf
 # systemctl restart httpd.service

Da wir nach wie vor unseren NextCloud-Server im Wartungsmodus laufen haben, wird einem Nutzer, der versucht sich an der WEB-GUI anzumelden ein entsprechender Hinweis eingeblendet.

Bild: Anzeige des Wartungsmodus im Web-Browser

Nun starten wir den Upgrade unserer Intsallation. Je nach Grösse und Umfang unserer Installation wir es nun ein Weilchen Dauern bis die Aktualisierung unserer Installation abgeschlossen ist.

 # sudo -u apache php /srv/www/html/nextcloud/occ upgrade

Nextcloud or one of the apps require upgrade - only a limited number of commands are available
You may use your browser or the occ upgrade command to do the upgrade
Set log level to debug
Checking whether the database schema can be updated (this can take a long time depending on the database size)
 Done                                     
 27/27 [============================] 100%
Checked database schema update
Checking updates of apps
Checking whether the database schema for  can be updated (this can take a long time depending on the database size)
 Done                                     
 2/2 [============================] 100%  
Checking whether the database schema for  can be updated (this can take a long time depending on the database size)
 Done                                     
 10/10 [============================] 100%
Checking whether the database schema for  can be updated (this can take a long time depending on the database size)
 Done                                     
 1/1 [============================] 100%
Checking whether the database schema for  can be updated (this can take a long time depending on the database size)
 Done                                     
 1/1 [============================] 100%
Checking whether the database schema for  can be updated (this can take a long time depending on the database size)
 Done                                     
 1/1 [============================] 100%
Checking whether the database schema for  can be updated (this can take a long time depending on the database size)
 Done                                     
 1/1 [============================] 100%
Checking whether the database schema for  can be updated (this can take a long time depending on the database size)
 Done                                     
 3/3 [============================] 100%
Checked database schema update for apps
Updating database schema
Updated database
Updating  ...
Updated  to 1.0.1
Updating  ...
Updated  to 1.0.1
Updating  ...
Updated  to 1.5.2
Updating  ...
Updated  to 2.3.2
Updating  ...
Fix classification for calendar objects
 Done                                      
   16/16 [============================] 100%
Updated  to 1.0.0
Updating  ...
Updated  to 1.0.0
Updating  ...
Updated  to 1.0.0
Updating  ...
Updated  to 1.3.0
Updating  ...
Updated  to 1.0.0
Updating  ...
Updated  to 0.3.0
Updating  ...
Updated  to 1.0.2
Drop old database tables
 Done                                              
 31/31 [============================] 100%         
Remove old (< 9.0) calendar/contact shares
 Done                                              
 4/4 [============================] 100%           
Fix permissions so avatars can be stored again
 Done                                              
 2/2 [============================] 100%           
Repair unmerged shares
 Done                                              
 16/16 [============================] 100%
Starting code integrity check...
Finished code integrity check
Update successful
Maintenance mode is kept active
Reset log level

Da der Upgrade nun erfolgreich abgeschlossen ist, können wir den Wartungsmodus unserer NextCloud-Installation wieder beenden.

 # sudo -u apache php /srv/www/html/nextcloud/occ maintenance:mode --off
Nextcloud is in maintenance mode - no app have been loaded
Maintenance mode disabled

Zu guter Letzt melden wir uns nun an der WEB-GUI unserer NextCloud-Instanz an und überprüfen die Funktionen.

Bild: Anmeldebilschirm der Web-GUI unseres NextCloud Servers

Links

Diese Website verwendet Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer zu. Außerdem bestätigen Sie, dass Sie unsere Datenschutzbestimmungen gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information
  • centos/web_c7/nextcloud.1542958922.txt.gz
  • Zuletzt geändert: 23.11.2018 07:42.
  • von django