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.
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.
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.
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.