In diesem Beitrag geht es um die Installation und Einrichtung einer Nextcloud auf einem frischem Debian-System. Es kommt Apache2 als Webserver zum Einsatz und MySQL für die Datenbank. Für ein SSL-Zertifikat für verschlüsselte Verbindung per HTTPS kommt Let's Encrypt dazu.
Systemvoraussetzungen und Vorbereitungen
Für Nextcloud wird kein leistungsstarker Server benötigt - es kommt hier eher auf den Speicherplatz an, je nachdem, wie viele Daten du in deiner Cloud speichern möchtest. 512 MB Arbeitsspeicher sind bereits ausreichend. Für meine Demonstrationszwecke verwende ich einen vServer mit Debian 12 und 2 vCPUs, 2 GB RAM und 40 GB SSD Speicherplatz.
Stelle auch sicher, dass deine Domain im DNS bereits auf die IP-Adresse deines Servers zeigt.
Wir fangen damit an, den Server auf den aktuellen Stand zu bringen. Verbinde dich über PuTTY auf deinen Server. Wir suchen nach Updates und installieren diese:
sudo apt-get update
sudo apt-get upgrade -y
Jetzt werden wir die Programme zip und curl installieren, welche später benötigt werden.
sudo apt install zip curl
Apache2 mit PHP 8.2 installieren
Als nächstes wird jetzt der Webserver Apache2 mit PHP in Version 8.2 installiert. dazu wird einfach folgender Befehl in der Shell abgesetzt:
apt install apache2
PHP befindet sich nicht in der standardmäßigen Paketquelle von Debian, daher müssen noch einige Schritte erledigt werden. Es müssen einige Repositories und zusätzliche Pakete hinzugefügt werden, das die neuesten PHP-Pakete enthält. Führe dazu die nachfolgenden Befehle aus:
sudo apt install lsb-release apt-transport-https ca-certificates software-properties-common -y
Importiere die GPG-Keys der Repository:
sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
Füge diese jetzt zur Quellenliste von Debian hinzu:
sudo sh -c 'echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
Jetzt wird erneut nach Updates gesucht:
sudo apt update
Anschließend kann PHP in der Version 8.2 einfach mit folgendem Befehl installiert werden:
sudo apt install php8.2
Nachdem PHP installiert wurde, werden jetzt noch einige PHP-Module installiert, die benötigt werden.
sudo apt install php8.2 libapache2-mod-php8.2 php8.2-zip php-dompdf php8.2-xml php8.2-mbstring php8.2-gd php8.2-curl php8.2-imagick libmagickcore-6.q16-6-extra php8.2-intl php8.2-bcmath php8.2-gmp php8.2-cli php8.2-mysql php8.2-zip php8.2-gd php8.2-mbstring php8.2-curl php8.2-xml php-pear unzip nano php8.2-apcu redis-server ufw php8.2-redis php8.2-ldap
PHP ist nun samt Erweiterungen installiert. Jetzt müssen noch einige Daten in der Konfiguration angepasst werden. Öffne dazu die php.ini Datei mit dem Editor nano:
nano /etc/php/8.2/apache2/php.ini
Die php.ini ist die Konfigurationsdatei für PHP und spielt eine entscheidende Rolle bei der Anpassung und Steuerung des Verhaltens der PHP-Interpreter auf einem Webserver. In dieser Datei gibt es immer eine Direktive und einen dazugehörigen Wert.
Hier musst du nun nacheinander nach den folgenden Direktiven suchen und deren Werte anpassen. Verwende dazu am besten die Suchfunktion von Nano mithilfe der Tastenkombination STRG + W.
memory_limit: Den Wert musst du je nach Arbeitsspeicher deines Servers anpassen. Man kann grob sagen, dass hier ¼ des verfügbaren Arbeitsspeichers an PHP vergeben werden soll. In meinem Falle sind das 512M für 512 MB.
memory_limit = 512M
upload_max_filesize und post_max_size: Hiermit wird festgelegt, wie groß eine Datei maximal sein darf, die auf den Server hochgeladen wird. Da es sich bei dem Server um eine Cloud handelt, darf dieser Wert sehr hoch sein, hier kann die maximale Verfügbarkeit des Speicherplatzes angegeben werden.
upload_max_filesize = 40G
post_max_size = 40G
date.timezone: Hier wird die Zeitzone festgelegt - für Deutschland Europe/Berlin. Diese Direktive ist standardmäßig ausgeklammert, entferne daher am Anfang der Zeile das Semikolon.
date.timezone = Europe/Berlin
output_buffering: Der Puffer wird deaktiviert. Standardmäßig lautet der Wert in der Konfiguration 4096.
output_buffering = Off
Damit Nextcloud später reibungslos funktioniert, werden jetzt noch einige Werte für den OPCache angepasst. Auch diese müssen zunächst ausgeklammert werden.
opcache.memory_consumption=256
opcache.interned_strings_buffer=16
opcache.save_comments=1
opcache.revalidate_freq=60
Mit einer höheren Einstellung kann mehr Bytecode im Speicher gehalten werden, was die Leistung verbessern kann, erfordert jedoch auch mehr RAM. Je nach System und Auslastung können die Werte abweichen, hier musst du die richtigen Werte für dein System finden.
Füge außerdem folgende zwei Zeilen in die Konfiguration hinzu:
opcache.jit=1255 opcache.jit_buffer_size=128M
Speichere die Änderungen mit STRG + O Enter und schließe den Editor mit STRG + X.
MySQL-Server installieren
Als nächstes wird MariaDB als MySQL-Server installiert:
sudo apt install mariadb-server
Starte die Schnellkonfiguration mit folgendem Befehl:
mysql_secure_installation
Da noch gar kein Root-Passwort für den MySQL-Server vergeben wurde, überspringst du den ersten Schritt mit Enter:
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.
Enter current password for root (enter for none): Enter
Da bereits ein Root-Passwort für das System vorhanden ist, wird die nächste Frage verneint.
OK, successfully used password, moving on...
Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.
You already have your root account protected, so you can safely answer 'n'.
Switch to unix_socket authentication [Y/n] n
Als nächstes wird ein Root-Passwort für den MySQL-Server festlegt. Drücke dazu Y. Vergib dann ein sicheres Passwort.
You already have your root account protected, so you can safely answer 'n'.
Change the root password? [Y/n] Y
Die nächsten vier Schritte werden alle bejaht.
By default, a MariaDB installation has an anonymous user, allowing anyone to log into MariaDB 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, MariaDB 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... All done! If you've completed all of the above steps, your MariaDB installation should now be secure. Thanks for using MariaDB!secure. Thanks for using MariaDB!
MySQL-Datenbank für Nextcloud anlegen
Nachdem der MySQL-Server installiert und eingerichtet wurde, wird jetzt eine Datenbank samt Benutzer für Nextcloud angelegt. Öffne dazu zunächst die SQL-Konsole mit dem Befehl:
mysql
Hier setzt du nun nacheinander folgende Befehle ab, um eine neue Datenbank anzulegen. Vergib auch hier ein sicheres Passwort
CREATE DATABASE nextcloud;
CREATE USER 'nextcloud_user'@'localhost' IDENTIFIED BY 'SicheresPasswortHier';
GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextcloud_user'@'localhost';
FLUSH PRIVILEGES;
Verlasse die Shell wieder:
EXIT;
Nextcloud herunterladen und installieren
Nachdem Webserver und Datenbank-Server installiert wurden, kann Nextcloud heruntergeladen und installiert werden. Navigiere dazu in das Verzeichnis, in welchem Nextcloud liegen soll:
cd /var/www/
Lade dir die neueste Version von Nextcloud mittels wget herunter:
wget https://download.nextcloud.com/server/releases/latest.zip
Entpacke das Archiv:
unzip latest.zip
Das Archiv kann jetzt gelöscht werden:
rm latest.zip
Apache2 konfigurieren
Jetzt wird noch in der Apache-Konfiguration festgelegt, dass Nextcloud beim Aufruf der Website angezeigt werden soll. Dazu muss entsprechend der Pfad angepasst werden. Öffne die Konfiguration mit:
nano /etc/apache2/sites-available/000-default.conf
Hier muss die Zeile DocumentRoot wie folgt angepasst werden:
DocumentRoot /var/www/nextcloud
Außerdem können wir hier direkt den Wert für HSTS festlegen. Er gibt an, wie lange ein Browser nach dem ersten Besuch einer Website die Verwendung von HTTPS für zukünftige Verbindungen erzwingen soll. Laut Nextcloud-Dokumentation soll dieser mindestens 31536000 lauten. Füge dazu folgende Zeilen in die Konfiguration ein, beispielsweise direkt unter DocumentRoot.
<IfModule mod_headers.c> Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains" </IfModule>
Speichere die Änderungen mit STRG + O Enter und schließe den Editor mit STRG + X.
Nun werden noch einige Apache-Module aktiviert:
a2enmod rewrite
a2enmod headers
a2enmod env
a2enmod dir
a2enmod mime
jetzt werden die Berechtigungen der Weboberfläche von Nextcloud für den Webserver entsprechend angepasst:
chown -R www-data:www-data /var/www/nextcloud/
chmod -R 755 /var/www/nextcloud/
Anschließend wird Apache einmal neu gestartet:
sudo service apache2 restart
Speicherort der Cloud festlegen
Als nächstes wird der Speicherort festgelegt, wo die Daten der Cloud liegen sollen. Hierfür empfiehlt sich das home-Verzeichnis. Lege hier einen neuen Ordner für Nextcloud an und vergib entsprechend die Berechtigungen für den Webserver:
mkdir /home/nextcloud/
chown -R www-data:www-data /home/nextcloud/
SSL-Zertifikat erstellen
Nextcloud ist soweit installiert, es fehlt aber noch ein SSL-Zertifikat, damit die Weboberfläche per HTTPS und somit per verschlüsselter Verbindung erreichbar ist. Dafür wird mit dem Certbot ein Let's Encrypt Zertifikat erzeugt.
Let's Encrypt ist eine Zertifizierungsstelle, die sich darauf spezialisiert hat, kostenlose SSL/TLS-Zertifikate auszustellen. Certbot hingegen ist ein Open-Source-Tool, das entwickelt wurde, um die Verwendung und Verwaltung dieser Let's Encrypt-Zertifikate auf Webservern zu erleichtern. Certbot ist speziell so konzipiert, dass es nahtlos mit Let's Encrypt zusammenarbeitet. Wenn du Certbot verwendest, werden die notwendigen Schritte für die Kommunikation mit Let's Encrypt-Servern, die Validierung der Domains und die Ausstellung von Zertifikaten automatisch durchgeführt.
Zunächst installierst du das Certbot-Script und das dazugehörige Phyton-Paket in einer Shell auf deinem Debian Server:
sudo apt install certbot python3-certbot-apache
Nach der Installation kannst du Certbot verwenden, um dein SSL/TLS-Zertifikat zu erhalten. Führe dazu den folgenden Befehl aus und gib apache als Parameter an:
sudo certbot --apache
Bei erstmaliger Verwendung erscheint nun folgende Ausgabe. Du musst zunächst einen Account anlegen und dazu deine E-Mail-Adresse angeben.
Saving debug log to /var/log/letsencrypt/letsencrypt.log Plugins selected: Authenticator apache, Installer apache Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel):
Als nächstes musst du die Nutzungsbedingungen akzeptieren. Setze dafür Y ab.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf. You must
agree in order to register with the ACME server. Do you agree?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y
Du wirst jetzt gefragt, ob du Neuigkeiten von der EFF per E-Mail erhalten möchtest. Das kannst du mit N verneinen.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing, once your first certificate is successfully issued, to
share your email address with the Electronic Frontier Foundation, a founding
partner of the Let's Encrypt project and the non-profit organization that
develops Certbot? We'd like to send you email about our work encrypting the web,
EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: N
Dein Account wurde nun angelegt. Es ist aber noch keine Domain in der Konfiguration hinterlegt. Geben im letzten Schritt also deine Domain(s) an, für die das Zertifikat ausgestellt werden soll. Stelle sicher, dass der DNS-Record bereits auf deinen Server zeigt, damit Let's Encrypt die Domain verifizieren kann.
Account registered. No names were found in your configuration files. Please enter in your domain name(s) (comma and/or space separated) (Enter 'c' to cancel):
Das Script geht nun alle notwendigen Schritte für das SSL-Zertifikat durch. Dies kannst du in der Ausgabe verfolgen. Hat alles geklappt, erhältst du am Ende eine Erfolgsmeldung. Das Zertifikat wurde erfolgreich erstellt.
Requesting a certificate for domain.tld Performing the following challenges: http-01 challenge for domain.tld Waiting for verification... Cleaning up challenges Created an SSL vhost at /etc/apache2/sites-available/000-default-le-ssl.conf Enabled Apache socache_shmcb module Enabled Apache ssl module Deploying Certificate to VirtualHost /etc/apache2/sites-available/000-default-le-ssl.conf Enabling available site: /etc/apache2/sites-available/000-default-le-ssl.conf Redirecting vhost in /etc/apache2/sites-enabled/000-default.conf to ssl vhost in /etc/apache2/sites-available/000-default-le-ssl.conf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Congratulations! You have successfully enabled https://domain.tld - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Es dauert nun einige Minuten, bis die Website mit HTTPS erreichbar ist und ein gültiges SSL-Zertifikat angezeigt wird. Vergiss nicht, dass ein Let's Encrypt Zertifikat immer nur 90 Tage gültig ist und immer wieder verlängert werden muss. Du siehst beim Aufruf deiner Domain direkt deine Nextcloud.
Nextcloud konfigurieren
Als erstes legst du ein Administrator-Konto mit Benutzername und Passwort an.
Im Bereich Datenverzeichnis. gibst du den vorhin angelegten Ordner an:
/home/nextcloud
Weiter unten gibst du die Daten der Datenbank an, die vorhin erstellt wurde.
Einstellung | Wert |
---|---|
Datenbank-Benutzer | nextcloud_user |
Datenbank-Passwort | Dein festgelegtes Datenbank-Passwort |
Datenbank-Name | nextcloud |
Datenbank-Host | localhost |
Klicke dann auf Installieren, um Nextcloud einzurichten. Der Vorgang kann einige Zeit in Anspruch nehmen.
Jetzt werden noch einige Änderung in der Konfigurationsdatei von Nextcloud vorgenommen. Öffne diese dazu mit folgendem Befehl:
nano /var/www/nextcloud/config/config.php
Füge hier folgende Zeilen ein, welche für die Region Deutschland / Europa gelten:
'default_phone_region' => 'de', 'default_timezone' => 'Europe/Berlin', 'logtimezone' => 'Europe/Berlin',
Folgende Konfigurationen sind jetzt noch optional. Sie geben an, dass Dateien im Papierkorb nach spätestens 14 gelöscht werden und die Vorgängerversionen von Dateien nach spätestens 31 Tagen, damit der Speicherplatz der Cloud nicht vollläuft. Außerdem wird der Zeitraum für rechenintensive Hintergrundaufgaben für die Nacht festgelegt.
'trashbin_retention_obligation' => '7, 14', 'versions_retention_obligation' => '21, 31', 'maintenance_window_start' => 1,
Unter Administrationseinstellungen Grundeinstellungen solltest du jetzt noch einen E-Mail-Server konfigurieren, wovon System-Meldungen verschickt werden können.
Nextcloud ist nun fertig eingerichtet und kann verwendet werden.
Nextcloud aktualisieren
Nextcloud sollte unbedingt regelmäßig auf den aktuellsten Stand gebracht werden, um die Cloud vor möglichen Sicherheitslücken zu schützen.
Klicke dazu in Nextcloud oben rechts auf dein Profilbild und wähle Verwaltungs-Einstellungen aus. Im Bereich Übersicht siehst du, ob eine Aktualisierung verfügbar ist. Klicke auf Updater öffnen, um das Update anzustoßen.
Es öffnet sich der Updater. Klicke auf Start update.
Nachdem der Download der neuen Version und die Vorbereitung abgeschlossen ist, klickst du auf Disable maintenance mode and continue in the web based updater, um das Update abzuschließen.
Um die Aktualisierung jetzt durchzuführen, klickst du auf Aktualisierung satrten.
Let’s Encrypt SSL-Zertifikate mit Certbot automatisch aktualisieren lassen
Nextcloud mit Fail2ban absichern
Nextcloud: 2-Faktor-Authentifizierung einrichten – So geht's!
Bei Fragen oder Anregungen freue ich mich natürlich über eure Kommentare.
Über mich
Ich bin Janis (aka. EurenikZ), 25 Jahre alt und komme aus der Nähe von Frankfurt am Main. Ich habe eine abgeschlossene IHK-Ausbildung zum Fachinformatiker für Systemintegration und arbeite als Junior IT-Administrator in einem IT-Systemhaus. Neben meinem IT-Blog beschäftige ich mich viel mit diversen IT-Themen und meinen Webseiten sowie Telegram Bots und biete IT-Dienstleistungen an.