Installation Nextcloud 20 auf Ubuntu 20.04 mit postgreSQL 13 php7.4-fpm Apache2 und HTTP/2

Nextcloud 20 (NextcloudHub) wurde veröffentlicht und es gibt viele Neuerungen. Oliver Pifferi hat hier eine schöne Zusammenfassung, auch über die Nextcloud Konferenz, geschrieben.

Verweisen möchte ich auch auf das aktuelle ChangeLog.

Die wichtigsten neuen Key-Features kurz zusammengefasst:

Das neue Dashboard bietet einen hervorragenden Ausgangspunkt für den Tag. Über ein Dutzend Widgets von Twitter und Github bis hin zu Moodle und Zammad sind bereits verfügbar

Die Suche wurde vereinheitlicht und die Suchergebnisse von Nextcloud-Apps sowie externen Diensten wie Gitlab, Jira und Discourse wurden an einem Ort zusammengefasst

Talk führt die „Brücke“ zu anderen Plattformen ein, darunter MS Teams, Slack, IRC, Matrix und ein Dutzend andere

Aber nun beginnen wir mit der Installation. Welche Voraussetzungen braucht Ihr:

– einen VPS/Root-Server mit Ubuntu 20.04 Minimal Image (wer noch keinen hat, kann hier bei @netcup einen mit 5 € Rabatt bestellen, oder hier bei Hetzner Cloud mit 20€ Startguthaben anfangen)

– root-Zugriff


– Einen DNS A- und optional AAAA-Rekord für unsere Nextcloud

Schritt 1: Firewall installieren und aktivieren

Als erstes installieren wir auf unser System die Firewall und lassen nur die Ports für den Webserver und ssh offen, um den Server zu administrieren:

apt install ufw -y
ufw allow http
ufw allow https
ufw allow ssh
ufw enable

Mit „y“ bestätigen und weiter geht es mit…

Schritt 2: postgreSQL 13 installieren

Bevor wir postgreSQL 13 installieren können, müssen wir erst das Repository zu den Paketquellen hinzufügen:

echo "deb [arch=amd64] http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" |sudo tee /etc/apt/sources.list.d/pgdg.list
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
apt update

Danach können wir mit den folgenden Befehlen den Datenbank-Server installieren:

apt install -y postgresql-13 postgresql-client-13

Nach der Installation prüfen wir, ob wir uns mit dem DB-Server verbinden können:

sudo -u postgres psql
psql (13.0 (Ubuntu 13.0-1.pgdg20.04+1))
Type "help" for help.

postgres=#

und lassen uns die Verbindungsinformationen anzeigen:

postgres=#  \conninfo
You are connected to database "postgres" as user "postgres" via socket in "/var/run/postgresql" at port "5432

danach schließen wir die Verbindung wieder:

postgres-#  \q

und gehen zum nächsten Schritt über

Schritt 3: Webserver installieren

Als Webserver nutzen wir in diesem Tutorial Apache2, den wir wie folgt installieren

apt install -y apache2 apache2-utils

nach der Installation prüfen wir kurz den Status des Webservers:

systemctl status apache2

der Output sollte in etwa so aussehen:

Wenn dem so ist, gehen wir zum nächsten Schritt und installieren php7.4-fpm.

Schritt 4: php7.4-fpm installieren

Da php-smbclient nicht mehr im offiziellen Repository von Ubuntu 20.04 vorhanden ist, nutzen wir das PPA von Ondrej. Dazu müssen wir dieses zu unseren Paketquellen hinzufügen:

echo "deb http://ppa.launchpad.net/ondrej/php/ubuntu $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list

und den Key ebenfalls:

apt-key adv --recv-keys --keyserver hkps://keyserver.ubuntu.com:443 4F4EA0AAE5267A6C

danach aktualisieren wir unsere Paketquellen und installieren die benötigten Pakete:

apt update && apt install -y php7.4-cli php7.4-common php7.4-mbstring php7.4-gd php-imagick php7.4-intl php7.4-bz2 php7.4-xml php7.4-pgsql php7.4-zip php7.4-dev php7.4-curl php7.4-fpm php-dompdf redis-server php-redis php-smbclient php7.4-ldap php7.4-bcmath php7.4-gmp

nach der Installation widmen wir uns der Apache-Konfiguration

Schritt 5: Konfiguration Apache2 und php7.4-fpm

Für die Nutzung von Nextcloud benötigen wir einige Apache2-Module, die wir mit dem folgendem Befehl aktivieren:

a2enmod proxy_fcgi setenvif mpm_event rewrite headers env dir mime ssl http2

Desweiteren müssen wir das zuvor installierte php7.4-fpm akivieren:

a2enconf php7.4-fpm

in der Apache2-Konfiguration passen wir jetzt noch einige Parameter an, damit die .htaccess-Datei von Nextcloud genutzt wird und http2:

nano /etc/apache2/apache2.conf

dort suchen wir nach den folgenden Einträgen:

<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>

und ändern „None“ zu „All“:

<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>

Für http2 setzen wir noch den folgenden Code in die config-Datei:

Protocols h2 h2c http/1.1

und schließen mit STRG+x

Nun passen wir noch php an und stellen die Voraussetzungen für Nextcloud her:

nano /etc/php/7.4/fpm/php.ini

Dort setzen wir die folgenden Parameter ein:

opcache.enable=1
opcache.enable_cli=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1
max_execution_time = 300
max_input_time = 600
memory_limit = 512M
upload_max_filesize = 10240M

Danach starten wir Apache2 und php7.4-fpm neu:

systemctl restart apache2 php7.4-fpm

und gehen zum nächsten….

Schritt 6: Installation Certbot und weitere Tools

Um unsere Nextcloud mit einem Zertifikat abzusichern nutzen wir Certbot mit dem Apache2-Plugin:

apt install -y python3-certbot-apache certbot wget curl sudo unzip

Die anderen Tools benötigen wir zum Herunterladen, entpacken und für die Einrichtung eines Cronjobs. Weiter geht es mit…

Schritt 7: Datenbank anlegen

Nextcloud benötigt eine Datenbank, die wir wie folgt anlegen:

sudo -u postgres psql

und dann:

CREATE USER nextcloud WITH PASSWORD 'your-password';
CREATE DATABASE nextclouddb TEMPLATE template0 ENCODING 'UNICODE';
ALTER DATABASE nextclouddb OWNER TO nextcloud;
GRANT ALL PRIVILEGES ON DATABASE nextclouddb TO nextcloud;
\q

nun können wir uns die Installationsdateien herunterladen…

Schritt 8: Download Nextcloud

Die ZIP-Datei bekommen wir wie folgt auf unseren Server:

wget https://download.nextcloud.com/server/releases/latest-20.zip

im Anschluß entpacken wir die Dateien:

unzip latest-20.zip

und verschieben sie an die richtige Stelle inklusive Anpassung der Rechte:

mv nextcloud /var/www/html/
chown -R www-data:www-data /var/www/html/nextcloud

das Archiv können wir wieder löschen:

rm latest-20.zip

für unsere Dateien legen wir einen extra Ordner außerhalb der Webroot an:

mkdir /nextcloud_data

und passen hier auch die Rechte an, damit der Webserver die Dateien lesen kann:

chown -R www-data:www-data /nextcloud_data

weiter geht es mit dem…

Schritt 9: Anlegen Apache2-vHost und Zertifikat

den vHost für Apache2 legen wir in das Standard-Verzeichnis /etc/apache2/sites-available :

nano /etc/apache2/sites-available/001-nextcloud.conf

für erste tragen wir dort den folgenden Block ein (Servernamen anpassen):

<VirtualHost *:80>
ServerName nextcloud.your-domain.tld
ServerAdmin webmaster@your-domain.tld
DocumentRoot /var/www/html/nextcloud

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

und speichern wieder mit STRG+x. Danach müssen wir die Seite aktivieren, den von Apache2 angelegten default-vHost deaktivieren wir auch gleich:

a2ensite 001-nextcloud.conf
a2dissite 000-default.conf
systemctl reload apache2

danach fordern wir ein entsprechendes Zertfikat für https an:

certbot --apache --rsa-key-size 4096

die letzte Abfrage beantworten wir mit „2“ für Redirect

und passen den automatisch erstellten vHost an:

nano /etc/apache2/sites-available/001-nextcloud-le-ssl.conf

unter DocumentRoot setzen wir den folgenden Block:

<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=15768000; preload"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
# Prevent MIME based attacks
Header always set X-Content-Type-Options "nosniff"
Header always set X-Frame-Options "SAMEORIGIN"
</IfModule>
# SSL Configuration - uses strong cipher list - these might need to be downgraded if you need to support older browsers/devices
SSLEngine on
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLHonorCipherOrder On

<Directory /var/www/html/nextcloud/>
Require all granted
AllowOverride All
Options FollowSymLinks MultiViews

<IfModule mod_dav.c>
Dav off
</IfModule>

SetEnv HOME /var/www/html/nextcloud
SetEnv HTTP_HOME /var/www/html/nextcloud
Satisfy Any

</Directory>

und führen ein Reload durch:

systemctl reload apache2

Schritt 10: Konfiguration Nextcloud

Im Anschluß rufen wir unsere Seite im Browser unserer Wahl auf und schließen die Konfiguration ab:

Wenn der Installer fertig ist, passen wir die config.php an, damit unser redis-server als cache genutzt wird:

nano /var/www/html/nextcloud/config/config.php

dort unter dem array „trusted_domains“ den folgenden Block einfügen:

'memcache.local' => '\OC\\Memcache\\Redis',
'memcache.locking' => '\\OC\\Memcache\\Redis',
'redis' => array(
'host' => 'localhost',
'port' => 6379,
),

und mit STRG+x abspeichern.

In den Einstellungen ändern wir „Hintergrund-Aufgaben“ auf Cron:

und erstellen dazu den Cron-Job für den User www-data:

sudo crontab -u www-data -e

in der letzten Zeile folgendes einfügen:

*/5 * * * * php7.4 -f /var/www/html/nextcloud/cron.php

und mit STRG+x speichern.

Im Anschluß prüfen wir, ob in der Übersicht noch Warnungen auftreten:

Jetzt habt Ihr es fasst geschafft und müsst nur noch die Mailserver-Einstellungen anpassen.

Ich wünsche Euch viel Spaß mit Eurer Nextcloud.

Bis zum nächsten Mal.

Beitragsbild mit freundlicher Genehmigung von Marcus Günther.

http://guenique-photography.de