Nextcloud ist eine selbst gehostete Open-Source-Anwendung zum Synchronisieren und Teilen von Dateien (Kalender, Kontakte, Dokumente, E-Mail und mehr). Die Entwickler von Nextcloud tun ihr Bestes, um den Benutzern eine sicherere Plattform, weniger Fehler und insgesamt ein besseres Produkt zu bieten.
Hier bei LinuxAPT helfen wir unseren Kunden im Rahmen unserer Serververwaltungsdienste regelmäßig bei Fragen zur Installation von Open-Source-Software.
In diesem Zusammenhang werden wir untersuchen, wie Nextcloud auf Ubuntu 20.04 LTS installiert wird.
Schritte zum Installieren und Konfigurieren von Nextcloud auf Ubuntu 20.04 LTS Focal Fossa
1. Systemaktualisierung durchführen
Stellen Sie zunächst sicher, dass alle Ihre Systempakete auf dem neuesten Stand sind, indem Sie die folgenden apt-Befehle im Terminal ausführen:
$ sudo apt update
$ sudo apt upgrade
2. Nginx-Webserver installieren
Hier wird der Nginx-Webserver anstelle des Apache-Webservers verwendet. Installieren Sie den Nginx-Webserver mit dem apt-Befehl:
$ sudo apt install nginx -y
Nachdem die Installation abgeschlossen ist, starten Sie den Nginx-Dienst und aktivieren Sie den Dienst so, dass er jedes Mal beim Systemstart mit systemctl gestartet wird:
$ systemctl start nginx
$ systemctl enable nginx
Der Nginx-Dienst wird betriebsbereit sein. Sie können dies mit dem folgenden Befehl überprüfen:
$ systemctl status nginx
3. PHP installieren und konfigurieren
Hier verwenden wir PHP7.4-FPM. Standardmäßig wird Ubuntu 20.04 mit der Standardversion PHP 7.4 geliefert.
Installieren Sie die von Nextcloud benötigten PHP- und PHP-FPM-Pakete mit dem folgenden apt-Befehl:
$ sudo apt install php-fpm php-curl php-cli php-mysql php-gd php-common php-xml php-json php-intl php-pear php-imagick php-dev php-common php-mbstring php-zip php-soap php-bz2 -y
Nachdem die Installation abgeschlossen ist, konfigurieren wir die php.ini-Dateien für php-fpm und php-cli.
Wechseln Sie in das Verzeichnis „/etc/php/7.4“:
$ cd /etc/php/7.4/
Bearbeiten Sie die php.ini-Dateien für php-fpm und php-cli mit vim:
vim fpm/php.ini
vim cli/php.ini
Entkommentieren Sie die Zeile „date.timezone“ und ändern Sie den Wert mit Ihrer eigenen Zeitzone:
date.timezone =Australien/Sydney
Kommentieren Sie die Zeile „cgi.fix_pathinfo“ aus und ändern Sie den Wert auf „0“:
cgi.fix_pathinfo=0
Speichern und beenden.
Bearbeiten Sie als Nächstes die php-fpm-Pool-Konfiguration „www.conf“.
$ vim fpm/pool.d/www.conf
Entkommentieren Sie diese Zeilen unten:
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
Speichern und beenden.
Starten Sie den PHP7.4-FPM-Dienst neu und aktivieren Sie ihn so, dass er bei jedem Systemstart gestartet wird:
$ systemctl restart php7.4-fpm
$ systemctl enable php7.4-fpm
Überprüfen Sie nun den PHP-FPM-Dienst mit den folgenden Befehlen:
$ ss -xa | grep php
$ systemctl status php7.4-fpm
Und Sie werden feststellen, dass php-fpm unter der Sock-Datei „/run/php/php7.4-fpm.sock“ ausgeführt wird.
4. MariaDB-Server installieren und konfigurieren
Hier werden wir die neueste MariaDB-Version installieren und eine neue Datenbank für die nextcloud-Installation erstellen. Die neueste Version der MariaDB-Pakete ist standardmäßig im Repository verfügbar.
Installieren Sie die neueste Version des MariaDB-Servers mit dem folgenden apt-Befehl:
$ sudo apt install mariadb-server -y
Nachdem die Installation abgeschlossen ist, starten Sie den MariaDB-Dienst und aktivieren Sie ihn so, dass er jedes Mal beim Systemstart gestartet wird:
$ systemctl start mariadb
$ systemctl enable mariadb
Überprüfen Sie nun den MySQL-Dienst mit dem folgenden Befehl:$
$ systemctl status mariadb
Sie werden sehen, dass der MariaDB-Server auf dem System betriebsbereit ist.
Als Nächstes konfigurieren wir das MariaDB-Root-Passwort mit dem Befehl „mysql_secure_installation“.
Führen Sie den folgenden Befehl aus:
$ mysql_secure_installation
Und Sie werden nach einer Konfiguration von MariaDB Server gefragt. Geben Sie außerdem das neue Root-Passwort für MariaDB Server ein:
Enter current password for root (enter for none): Press Enter
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
Und das MariaDB-Root-Passwort wurde eingerichtet.
Als nächstes erstellen wir eine neue Datenbank für die Nextcloud-Installation. Wir werden eine neue Datenbank namens „nextcloud_db“ mit dem Benutzer „nextclouduser“ und dem Passwort „Nextclouduser421@“ erstellen.
Melden Sie sich bei der MySQL-Shell als Root-Benutzer mit dem mysql-Befehl an:
$ mysql -u root -p
GEBEN SIE DAS MYSQL-ROOT-PASSWORT EIN
Erstellen Sie nun die Datenbank und den Benutzer mit dem Passwort, indem Sie die folgenden MySQL-Abfragen ausführen:
create database nextcloud_db;
create user nextclouduser@localhost identified by 'Nextclouduser421@';
grant all privileges on nextcloud_db.* to nextclouduser@localhost identified by 'Nextclouduser421@';
flush privileges;
5. Generieren Sie SSL Let's Encrypt
Hier sichern wir nextcloud mit kostenlosem SSL von Letsencrypt und generieren Zertifikatsdateien mit dem Letsencrypt-Tool.
Wenn Sie keinen Domänennamen haben oder nextcloud auf dem lokalen Computer installieren, können Sie das selbstsignierte Zertifikat mit OpenSSL generieren.
Installieren Sie das Tool „letsencrypt“ mit dem folgenden apt-Befehl:
$ sudo apt install certbot -y
Stoppen Sie nach Abschluss der Installation den nginx-Dienst:
$ systemctl stop nginx
Als Nächstes generieren wir die SSL-Zertifikate für unseren Domänennamen „nextcloud.linuxapt.com“ mit dem cerbot-Befehlszeilenbefehl:
$ certbot certonly --standalone -d nextcloud.linuxapt.com
Sie werden nach der E-Mail-Adresse gefragt, die für die Verlängerungsbenachrichtigung verwendet wird. Geben Sie für die Letsencrypt TOS-Vereinbarung „A“ ein, um zuzustimmen, und für die gemeinsame E-Mail-Adresse können Sie „N“ für „Nein“ eingeben.
Jetzt werden die SSL-Zertifikate Letsencrypt für den netxcloud-Domainnamen mit allen SSL-Dateien / Zertifikaten generiert, die sich im Verzeichnis „/etc/letsencrypt/live/your-domain“ befinden.
6. Nextcloud herunterladen
Stellen Sie vor dem Herunterladen des Nextcloud-Quellcodes sicher, dass das Entpackpaket auf dem System installiert ist. Wenn Sie das Paket nicht haben, installieren Sie es mit dem folgenden apt-Befehl:
$ sudo apt install wget unzip zip -y
Gehen Sie nun in das Verzeichnis ‚/var/www‘ und laden Sie die neueste Version von Nextcloud mit dem folgenden Befehl herunter.
$ cd /var/www/
$ wget -q https://download.nextcloud.com/server/releases/latest.zip
Extrahieren Sie den Nextcloud-Quellcode und Sie erhalten ein neues Verzeichnis „netxcloud“, ändern Sie den Besitz des nextcloud-Verzeichnisses auf den Benutzer „www-data“:
$ unzip -qq latest.zip
$ sudo chown -R www-data:www-data /var/www/nextcloud
Jetzt wurde die Nextcloud in das Verzeichnis „/var/www/nextcloud“ heruntergeladen, und es wird das Web-Root-Verzeichnis sein.
7. Konfigurieren Sie den virtuellen Nginx-Host für Nextcloud
In diesem Schritt konfigurieren wir den virtuellen nginx-Host für nextcloud. Wir werden nextcloud so konfigurieren, dass es unter der HTTPS-Verbindung ausgeführt wird, und die HTTP-Verbindung automatisch auf die sichere HTTPS-Verbindung zwingen.
Gehen Sie nun in das Verzeichnis ‚/etc/nginx/sites-available‘ und erstellen Sie eine neue virtuelle Hostdatei ‚nextcloud‘:
$ cd /etc/nginx/sites-available/
$ vim nextcloud
Fügen Sie in diese Datei die folgende Konfiguration des virtuellen Nextcloud-Hosts ein:
upstream php-handler {
#server 127.0.0.1:9000;
server unix:/var/run/php/php7.4-fpm.sock;
}
server {
listen 80;
listen [::]:80;
server_name nextcloud.linuxapt.com;
# enforce https
return 301 https://$server_name:443$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name nextcloud.linuxapt.com;
# Use Mozilla's guidelines for SSL/TLS settings
# https://mozilla.github.io/server-side-tls/ssl-config-generator/
# NOTE: some settings below might be redundant
ssl_certificate /etc/letsencrypt/live/nextcloud.linuxapt.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/nextcloud.linuxapt.com/privkey.pem;
# Add headers to serve security related headers
# Before enabling Strict-Transport-Security headers please read into this
# topic first.
#add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;" always;
#
# WARNING: Only add the preload option once you read about
# the consequences in https://hstspreload.org/. This option
# will add the domain to a hardcoded list that is shipped
# in all major browsers and getting removed from this list
# could take several months.
add_header Referrer-Policy "no-referrer" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Download-Options "noopen" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Permitted-Cross-Domain-Policies "none" always;
add_header X-Robots-Tag "none" always;
add_header X-XSS-Protection "1; mode=block" always;
# Remove X-Powered-By, which is an information leak
fastcgi_hide_header X-Powered-By;
# Path to the root of your installation
root /var/www/nextcloud;
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
# The following 2 rules are only needed for the user_webfinger app.
# Uncomment it if you're planning to use this app.
#rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
#rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;
# The following rule is only needed for the Social app.
# Uncomment it if you're planning to use this app.
#rewrite ^/.well-known/webfinger /public.php?service=webfinger last;
location = /.well-known/carddav {
return 301 $scheme://$host:$server_port/remote.php/dav;
}
location = /.well-known/caldav {
return 301 $scheme://$host:$server_port/remote.php/dav;
}
# set max upload size
client_max_body_size 512M;
fastcgi_buffers 64 4K;
# Enable gzip but do not remove ETag headers
gzip on;
gzip_vary on;
gzip_comp_level 4;
gzip_min_length 256;
gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;
# Uncomment if your server is build with the ngx_pagespeed module
# This module is currently not supported.
#pagespeed off;
location / {
rewrite ^ /index.php;
}
location ~ ^\/(?:build|tests|config|lib|3rdparty|templates|data)\/ {
deny all;
}
location ~ ^\/(?:\.|autotest|occ|issue|indie|db_|console) {
deny all;
}
location ~ ^\/(?:index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|oc[ms]-provider\/.+)\.php(?:$|\/) {
fastcgi_split_path_info ^(.+?\.php)(\/.*|)$;
set $path_info $fastcgi_path_info;
try_files $fastcgi_script_name =404;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $path_info;
fastcgi_param HTTPS on;
# Avoid sending the security headers twice
fastcgi_param modHeadersAvailable true;
# Enable pretty urls
fastcgi_param front_controller_active true;
fastcgi_pass php-handler;
fastcgi_intercept_errors on;
fastcgi_request_buffering off;
}
location ~ ^\/(?:updater|oc[ms]-provider)(?:$|\/) {
try_files $uri/ =404;
index index.php;
}
# Adding the cache control header for js, css and map files
# Make sure it is BELOW the PHP block
location ~ \.(?:css|js|woff2?|svg|gif|map)$ {
try_files $uri /index.php$request_uri;
add_header Cache-Control "public, max-age=15778463";
# Add headers to serve security related headers (It is intended to
# have those duplicated to the ones above)
# Before enabling Strict-Transport-Security headers please read into
# this topic first.
#add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;" always;
#
# WARNING: Only add the preload option once you read about
# the consequences in https://hstspreload.org/. This option
# will add the domain to a hardcoded list that is shipped
# in all major browsers and getting removed from this list
# could take several months.
add_header Referrer-Policy "no-referrer" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Download-Options "noopen" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Permitted-Cross-Domain-Policies "none" always;
add_header X-Robots-Tag "none" always;
add_header X-XSS-Protection "1; mode=block" always;
# Optional: Don't log access to assets
access_log off;
}
location ~ \.(?:png|html|ttf|ico|jpg|jpeg|bcmap)$ {
try_files $uri /index.php$request_uri;
# Optional: Don't log access to other assets
access_log off;
}
}
Speichern und beenden.
Aktivieren Sie den virtuellen Host, testen Sie die Konfiguration und vergewissern Sie sich, dass kein Fehler vorliegt:
$ ln -s /etc/nginx/sites-available/nextcloud /etc/nginx/sites-enabled/
$ nginx -t
Starten Sie nun den PHP7.4-FPM-Dienst und den Nginx-Dienst mit dem folgenden systemctl-Befehl neu:
$ systemctl restart nginx
$ systemctl restart php7.4-fpm
8. Konfigurieren Sie die UFW-Firewall
Hier schalten wir die Firewall ein und verwenden die UFW-Firewall für Ubuntu.
Fügen Sie SSH, HTTP und HTTPS mit dem folgenden Befehl zur UFW-Firewallliste hinzu:
for svc in ssh http https
do
ufw allow $svc
done
Aktivieren Sie danach die UFW-Firewall und überprüfen Sie den zulässigen Dienst und Port:
$ ufw enable
$ ufw status numbered
Und Sie erhalten den HTTP-Port 80 und HTTPS-Port 443 ist auf der Liste.
Wie greife ich auf die Nextcloud-Weboberfläche zu?
Nextcloud ist standardmäßig auf HTTP-Port 80 verfügbar.
Öffnen Sie Ihren bevorzugten Browser und navigieren Sie zu https://your-domain.com/ oder https://server-ip-address/ und führen Sie die erforderlichen Schritte aus, um die Installation abzuschließen.
Was Sie mit Nextcloud machen, liegt ganz bei Ihnen.
Sie können neue Module hinzufügen oder es einfach als Cloud-basierte Dateisynchronisierung und -freigabe verwenden.
Sie können die Android-App installieren und sogar die ownCloud-Desktop-Clients verwenden (sie funktionieren gut mit Nextcloud).