Wie man Nextcloud auf Fedora 32 installiert und konfiguriert

Nextcloud ist eine Open-Source-Software zum Speichern und Synchronisieren Ihrer Daten über mehrere Geräte hinweg. Sie können es als Ihren eigenen Dropbox-Klon betrachten. Aber neben der Speicherung von Dateien bietet sie auch zusätzliche Funktionen wie Kalender, Kontakte, geplante Aufgaben, Medien-Streaming usw.

Nextcloud bietet Anwendungen für Windows, Linux, MacOS und mobile Anwendungen für Android und iOS, mit denen Sie Dateien über Ihre verschiedenen Geräte hinweg synchronisieren können.

In diesem Tutorial lernen wir, wie man Nextcloud auf einem Fedora 32-basierten Server installiert und konfiguriert. Wir werden auch den Nginx-Webserver zusammen mit PHP 7.4 und MariaDB installieren.

Voraussetzungen

  • Ein Server mit Fedora 32.
  • Ein Nicht-Root-Sudo-Benutzer.
  • Stellen Sie sicher, dass alles aktualisiert wird.
    $ sudo dnf update
    
  • Unverzichtbare Pakete.
    $ sudo dnf install wget curl bzip2 nano unzip policycoreutils-python-utils -y
    

    Einige dieser Pakete befinden sich möglicherweise bereits auf Ihrem System.

Konfigurieren Sie die Firewall

Der erste Schritt ist die Konfiguration der Firewall. Auf dem Fedora-Server ist die Firewall Firewalld vorinstalliert.

Überprüfen Sie, ob die Firewall läuft.

$ sudo firewall-cmd --state
running

Prüfen Sie die aktuell erlaubten Dienste/Ports.

$ sudo firewall-cmd --permanent --list-services

Es sollte die folgende Ausgabe zeigen.

dhcpv6-client mdns ssh

Erlauben Sie HTTP- und HTTPS-Ports.

$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https

Überprüfen Sie den Status der Firewall erneut.

$ sudo firewall-cmd --permanent --list-services

Sie sollten eine ähnliche Ausgabe sehen.

dhcpv6-client http https mdns ssh

Laden Sie die Firewall neu.

$ sudo systemctl reload firewalld

Installieren Sie PHP

Fedora 32 wird standardmäßig mit PHP 7.4 ausgeliefert, aber um ein aktualisiertes PHP-Repository zu haben, werden wir das REMI-Repository hinzufügen.

Installieren Sie das REMI-Repository, das das offizielle Fedora-Repository für die Installation von PHP-Paketen ist.

$ sudo dnf -y install https://rpms.remirepo.net/fedora/remi-release-32.rpm

Aktivieren Sie das remi -Repository und deaktivieren Sie das remi-modular -Repository. Dadurch wird das für die Installation von PHP 7.4-Paketen erforderliche Repository aktiviert.

$ sudo dnf config-manager --set-enabled remi
$ sudo dnf config-manager --set-disabled remi-modular

Installieren Sie PHP 7.4 zusammen mit einigen zusätzlichen Paketen.

$ sudo dnf install php-fpm php-cli php-gd php-mbstring php-intl php-mysqlnd php-imagick php-zip php-json php-process php-xml php-bcmath php-gmp php-ftp php-smbclient php-opcache

Prüfen Sie, ob PHP korrekt funktioniert.

$ php --version
PHP 7.4.11 (cli) (built: Sep 29 2020 10:17:06) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.11, Copyright (c), by Zend Technologies

Konfigurieren Sie PHP

Öffnen Sie die Datei /etc/php-fpm.d/www.conf.

$ sudo nano /etc/php-fpm.d/www.conf

Wir müssen den Unix-Benutzer/die Gruppe von PHP-Prozessen auf nginx setzen. Suchen Sie die Zeilen user=apache und group=apache in der Datei und ändern Sie sie auf nginx.

...
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx
...

Kommentieren Sie die PHP-Umgebungsvariablen unten aus.

env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp

Entkommentieren Sie die opcache-Konfiguration in der letzten Zeile.

php_value[opcache.file_cache] = /var/lib/php/opcache

Speichern Sie die Datei, indem Sie Strg + X drücken und Y eingeben, wenn Sie dazu aufgefordert werden.

Bearbeiten Sie nun die PHP-Opcache-Konfiguration /etc/php.d/10-opcache.ini.

$ sudo nano /etc/php.d/10-opcache.ini

Ändern Sie die Konfiguration wie unten beschrieben.

opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.revalidate_freq=1
opcache.save_comments=1

Speichern Sie die Datei, indem Sie Strg + X drücken und Y eingeben, wenn Sie dazu aufgefordert werden.

Führen Sie die folgenden Befehle aus, um die Datei-Upload- und Speichergrenzen für PHP zu erhöhen.

$ sudo cp /etc/php.ini /etc/php.ini.bak
$ sudo sed -i "s/memory_limit = 128M/memory_limit = 512M/" /etc/php.ini
$ sudo sed -i "s/post_max_size = 8M/post_max_size = 100M/" /etc/php.ini
$ sudo sed -i "s/upload_max_filesize = 2M/upload_max_filesize = 100M/" /etc/php.ini

Standardmäßig gibt es 3 Dateien im Verzeichnis /var/lib/php/, deren Gruppeneigentümer auf apache gesetzt sind, aber wir verwenden Nginx. Daher müssen wir dem nginx-Benutzer Lese- und Schreibberechtigungen für die 3 Verzeichnisse mit setfacl erteilen.

$ sudo setfacl -R -m u:nginx:rwx /var/lib/php/opcache/
$ sudo setfacl -R -m u:nginx:rwx /var/lib/php/session/
$ sudo setfacl -R -m u:nginx:rwx /var/lib/php/wsdlcache/

Aktivieren und starten Sie den php-fpm-Prozess.

$ sudo systemctl enable php-fpm
$ sudo systemctl start php-fpm

Nginx installieren

Fedora 32 wird standardmäßig mit der neuesten stabilen Version von Nginx ausgeliefert.

Installieren Sie Nginx.

$ sudo dnf install nginx -y

Prüfen Sie, ob es korrekt funktioniert.

$ nginx -v
nginx version: nginx/1.18.0

Starten und aktivieren Sie Nginx.

$ sudo systemctl start nginx
$ sudo systemctl enable nginx

Öffnen Sie die IP-Adresse Ihres Servers in einem Browser, um die folgende Seite anzuzeigen. Dies bedeutet, dass Nginx ordnungsgemäß funktioniert.

Fedora-Standard-Nginx-Seite

MariaDB installieren

MariaDB ist ein Drop-in-Ersatz für MySQL, d.h. die Befehle zum Ausführen und Betreiben von MariaDB sind die gleichen wie die für MySQL.

Fedora 32 wird standardmäßig mit MariaDB 10.4 ausgeliefert, welches dasjenige ist, das wir verwenden werden.

MariaDB-Server installieren.

$ sudo dnf install mariadb-server

Überprüfen Sie, ob MariaDB korrekt installiert ist.

$ mysql --version
mysql  Ver 15.1 Distrib 10.4.14-MariaDB, for Linux (x86_64) using  EditLine wrapper

Aktivieren und starten Sie den MariaDB-Dienst.

$ sudo systemctl enable mariadb
$ sudo systemctl start mariadb

Führen Sie den folgenden Befehl aus, um die Standardkonfiguration durchzuführen, z.B. um ein Root-Passwort zu vergeben, anonyme Benutzer zu entfernen, Root-Login per Fernzugriff zu verbieten und Testtabellen zu löschen.

$ sudo mysql_secure_installation

Durch Drücken der Eingabetaste wählen Sie die Standardoption (diejenige, die großgeschrieben wird, in diesem Fall Y).

Enter current password for root (enter for none): [PRESS ENTER]
Switch to unix_socket authentication [Y/n] [PRESS ENTER]
Change the root password? [Y/n] [ANSWER n]
Remove anonymous users? [Y/n] [PRESS ENTER]
Disallow root login remotely? [Y/n] [PRESS ENTER]
Remove test database and access to it? [Y/n] [PRESS ENTER]
Reload privilege tables now? [Y/n] [PRESS ENTER]

Das war’s. Wenn Sie sich das nächste Mal bei MySQL anmelden wollen, benutzen Sie den folgenden Befehl

$ sudo mysql

Geben Sie Ihr Root-Passwort ein, wenn Sie dazu aufgefordert werden.

MariaDB konfigurieren

Geben Sie den folgenden Befehl ein, um in die MySQL-Shell zu gelangen.

$ sudo mysql

Erstellen Sie einen MySQL-Benutzer für den Umgang mit der NextCloud-Datenbank.

mysql> CREATE USER 'nextuser'@'localhost' IDENTIFIED BY 'yourpassword';

Erstellen Sie die NextCloud-Datenbank.

mysql> CREATE DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

Gewähren Sie dem von uns erstellten Benutzer alle Privilegien der NextCloud-Datenbank.

mysql> GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextuser'@'localhost';

Beenden Sie die MySQL-Shell.

mysql> exit

Nextcloud herunterladen

Zeit zum Herunterladen und Einrichten der Nextcloud-Ordner.

$ wget https://download.nextcloud.com/server/releases/latest.tar.bz2
$ tar -jxvf latest.tar.bz2
$ sudo mv nextcloud /var/www/html/

Als nächstes müssen wir einen Datenordner erstellen.

$ sudo mkdir /var/www/html/nextcloud/data
$ sudo chown -R nginx:nginx /var/www/html/nextcloud

SSL installieren

Wir werden SSL mit dem Dienst Let’s Encrypt installieren.

Installieren Sie dazu Certbot.

$ sudo dnf install certbot

Stoppen Sie Nginx, da es den Certbot-Prozess stören wird.

$ sudo systemctl stop nginx

Erzeugen Sie das Zertifikat. Wir erstellen auch ein DHParams-Zertifikat.

$ export LDOMAIN="nextcloud.example.com"
$ export LEMAIL="email@example.com"
$ sudo certbot certonly --standalone -d $LDOMAIN --preferred-challenges http --agree-tos -n -m $LEMAIL --keep-until-expiring 
$ sudo systemctl start nginx
$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Wir müssen auch einen Cron-Job für die automatische Erneuerung des SSL einrichten. Um den Crontab-Editor zu öffnen, führen Sie den folgenden Befehl aus

$ sudo EDITOR=nano crontab -e

Der obige Befehl öffnet Crontab mit Nano-Editor anstelle des Standard-Vim-Editors.

Fügen Sie die folgende Zeile unten ein.

25 2 * * * /usr/bin/certbot renew --quiet --pre-hook “systemctl stop nginx” --post-hook “systemctl start nginx”

Der obige Cron-Job lässt certbot jeden Tag um 2:25 Uhr morgens laufen. Sie können ihn in alles ändern, was Sie wollen.

Speichern Sie die Datei, indem Sie Strg + X drücken und Y eingeben, wenn Sie dazu aufgefordert werden.

Konfigurieren Sie SELinux/Berechtigungen

SELinux muss konfiguriert werden, damit Nextcloud auf Fedora funktioniert. Geben Sie die folgenden Befehle ein, um grundlegende SELinux-Einstellungen vorzunehmen, die für alle funktionieren sollten.

Stellen Sie sicher, dass Sie die Dateipfade anpassen, falls sie in Ihrem Fall unterschiedlich sind.

$ sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/data(/.*)?'
$ sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/config(/.*)?'
$ sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/apps(/.*)?'
$ sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/.user.ini'
$ sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/3rdparty/aws/aws-sdk-php/src/data/logs(/.*)?'

$ sudo restorecon -Rv '/var/www/html/nextcloud/'

Um Aktualisierungen über die Webschnittstelle von Nextcloud zu ermöglichen, führen Sie auch den folgenden Befehl aus.

$ sudo setsebool -P httpd_unified on

Konfigurieren Sie Nginx für Nextcloud&rsquo

Als nächstes müssen wir Nginx für das Hosting von Nextcloud konfigurieren.

Für unseren Zweck wird Nextcloud auf der Domain http://nextcloud.example.com gehostet,

Richten Sie Verzeichnisse ein, in denen die Serverblöcke leben werden.

$ sudo mkdir /etc/nginx/sites-available
$ sudo mkdir /etc/nginx/sites-enabled

Öffnen Sie die Datei /etc/nginx/nginx.conf zum Bearbeiten.

$ sudo nano /etc/nginx/nginx.conf	

Fügen Sie die folgenden Zeilen nach der Zeile include /etc/nginx/conf.d/*.conf

include /etc/nginx/sites-enabled/*.conf;
server_names_hash_bucket_size 64;

Drücken Sie Strg + X, um den Editor zu schließen, und drücken Sie Y, wenn Sie zum Speichern der Datei aufgefordert werden.

Erstellen Sie die Datei /etc/nginx/sites-available/nextcloud.conf mit dem Nano-Editor.

$ sudo nano /etc/nginx/sites-available/nextcloud.conf

Fügen Sie den folgenden Code in den Editor ein. Stellen Sie sicher, dass Sie die Beispieldomäne durch Ihre reale Domäne ersetzen, bevor Sie den Code einfügen.

upstream php-handler {
    #server 127.0.0.1:9000;
    server unix:/run/php-fpm/www.sock;
}

server {
    listen 80;
    listen [::]:80;
    server_name nextcloud.example.com;
    # enforce https
    return 301 https://$server_name:443$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name nextcloud.example.com;
	
	access_log /var/log/nginx/nextcloud.access.log;
    error_log /var/log/nginx/nextcloud.error.log;

    # 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.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/nextcloud.example.com/privkey.pem;
	ssl_protocols TLSv1.2 TLSv1.3;
	ssl_session_timeout 1d;
    ssl_session_cache shared:MozSSL:10m;  # about 40000 sessions
    ssl_session_tickets off;
	ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;
	ssl_dhparam /etc/ssl/certs/dhparam.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/html/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 100M;
    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\/.+|.+\/richdocumentscode\/proxy)\.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_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|mp4|webm)$ {
        try_files $uri /index.php$request_uri;
        # Optional: Don't log access to other assets
        access_log off;
    }
}

Drücken Sie Strg + X, um den Editor zu schließen, und drücken Sie Y, wenn Sie zum Speichern der Datei aufgefordert werden.

Aktivieren Sie diese Konfigurationsdatei, indem Sie sie mit dem Verzeichnis sites-enabled verknüpfen.

$ sudo ln -s /etc/nginx/sites-available/nextcloud.conf /etc/nginx/sites-enabled/

Testen Sie die Nginx-Konfiguration.

$ sudo nginx -t

Laden Sie den Nginx-Dienst erneut, wenn alles in Ordnung ist.

$ sudo systemctl reload nginx

Installieren Sie Nextcloud

Es gibt zwei Möglichkeiten, Nextcloud zu konfigurieren – über die Kommandozeile oder über die grafische Oberfläche. Wir werden uns für die Kommandozeilenmethode entscheiden.

Geben Sie das Nextcloud-Verzeichnis ein.

$ cd /var/www/html/nextcloud

Führen Sie den folgenden Befehl aus, um Nextcloud zu installieren.

$ sudo -u nginx php occ  maintenance:install --database "mysql" --database-name "nextcloud"  --database-user "nextuser" --database-pass "yourpassword" --admin-user "admin" --admin-pass "password"

Dieser Befehl wird als nginx Benutzer ausgeführt, da er Schreibberechtigungen für den Nextcloud Ordner hat.

Als nächstes müssen wir unsere Domäne zur Liste der vertrauenswürdigen Domänen hinzufügen. Öffnen Sie die Datei /var/www/html/nextcloud/config/config.php.

$ sudo nano config/config.php

Ändern Sie den Wert der Variable trusted_domains, indem Sie Ihre Server-IP-Adresse und Ihre Nextcloud-Domain nextcloud.example.com hinzufügen, damit Sie von Ihrer Domain aus auf Ihre Installation zugreifen können.

'trusted_domains' =>
  array (
    0 => 'localhost',
    1 => '167.172.35.56',
    2 => 'nextcloud.example.com',
  ),

Drücken Sie Strg + X, um den Editor zu schließen, und drücken Sie Y, wenn Sie zum Speichern der Datei aufgefordert werden.

Starten Sie Ihre Nextcloud-Installation, indem Sie https://nextcloud.example.com in Ihrem Browser öffnen, und Sie werden den folgenden Bildschirm sehen.

Nextcloud Anmeldeseite

Geben Sie Ihre Administrations-Login-Details ein. Scrollen Sie durch die einleitenden Nextcloud-Banner, stellen Sie Ihren Wetterstandort und -status ein und wählen Sie ein Hintergrundbild aus. Sobald Sie fertig sind, sollten Sie mit einem ähnlichen Bildschirm begrüßt werden.

Nextcloud-Startseite

Schlussfolgerung

Hiermit beenden wir unser Tutorial zur Installation von Nextcloud auf einem Fedora-32-Server. Wenn Sie Fragen haben, stellen Sie diese in den Kommentaren unten.

Das könnte dich auch interessieren …