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',

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.

Wie hilfreich war dieser Beitrag?

Klicke auf die Sterne um zu bewerten.

Durchschnittliche Bewertung 0 / 5. Anzahl Bewertungen: 0

Bisher keine Bewertungen. Sei der Erste, der diesen Beitrag bewertet!

Es tut mir Leid, dass der Beitrag für dich nicht hilfreich war!

Wie kann ich diesen Beitrag verbessern?

Hinterlasse einen Kommentar

  • Manchmal ist es notwendig, sich in die Shell eines Docker-Containers zu schalten, um dort beispielsweise weitere Konfigurationen vornehmen zu können. Wie du dich in eine Container-Shell einloggst, zeige ich dir in diesem Beitrag. Begib dich zunächst in das Verzeichnis, in[...]

    12.03.2024 18:37

    48
  • Mithilfe eines Swap-Speichers lagert man temporäre Daten in eine Auslagerungsdatei aus, anstatt in den RAM zu schreiben. Das ist vor allem dann sinnvoll, wenn wenig Arbeitsspeicher zur Verfügung steht und man Abstürze wegen zu wenig Arbeitsspeicher umgehen möchte. Was ist[...]

    01.01.2024 10:00

    156
  • Beim Löschen von Dateien in Nextcloud landen diese im Papierkorb und bleiben dort, bis dieser manuell geleert wird. Möchte man Dateien im Papierkorb automatisch nach einer bestimmten Zeit löschen lassen, muss die Konfiguration entsprechend angepasst werden. Die Papierkorb-Funktion ist[...]

    10.12.2023 20:57

    94
  • Manchmal ist es notwendig, sich in die Shell eines Docker-Containers zu schalten, um dort beispielsweise weitere Konfigurationen vornehmen zu können. Wie du dich in eine Container-Shell einloggst, zeige ich dir in diesem Beitrag. Begib dich zunächst in das Verzeichnis, in[...]

    12.03.2024 18:37

    48
  • Mithilfe eines Swap-Speichers lagert man temporäre Daten in eine Auslagerungsdatei aus, anstatt in den RAM zu schreiben. Das ist vor allem dann sinnvoll, wenn wenig Arbeitsspeicher zur Verfügung steht und man Abstürze wegen zu wenig Arbeitsspeicher umgehen möchte. Was ist[...]

    01.01.2024 10:00

    156