Nextcloud ist eine Open-Source-Software zum Speichern und Synchronisieren Ihrer Daten auf mehreren Geräten. Sie können es als Ihren eigenen Dropbox-Klon betrachten. Aber neben dem Speichern von Dateien bietet es auch zusätzliche Funktionen wie Kalender, Kontakte, geplante Aufgaben, Medienstreaming usw.
Nextcloud bietet Apps für Windows, Linux, MacOS und mobile Apps für Android und iOS, mit denen Sie Dateien auf Ihren verschiedenen Geräten 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 ist.
$ sudo dnf update
-
Grundlegende Pakete.
$ sudo dnf install wget curl bzip2 nano unzip policycoreutils-python-utils -y
Einige dieser Pakete befinden sich möglicherweise bereits auf Ihrem System.
Firewall konfigurieren
Der erste Schritt besteht darin, die Firewall zu konfigurieren. Der Fedora-Server wird mit vorinstallierter Firewalld-Firewall geliefert.
Überprüfen Sie, ob die Firewall ausgeführt wird.
$ sudo firewall-cmd --state
running
Überprüfen Sie die aktuell erlaubten Dienste/Ports.
$ sudo firewall-cmd --permanent --list-services
Es sollte die folgende Ausgabe zeigen.
dhcpv6-client mdns ssh
HTTP- und HTTPS-Ports zulassen.
$ 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 zum Installieren von PHP-Paketen ist.
$ sudo dnf -y install https://rpms.remirepo.net/fedora/remi-release-32.rpm
Aktivieren Sie remi
-Repository und deaktivieren Sie remi-modular
Repository. Dadurch wird das Repository aktiviert, das zum Installieren von PHP 7.4-Paketen erforderlich ist.
$ 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
Überprü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
PHP konfigurieren
Ö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 user=apache
und group=apache
Zeilen in der Datei und ändern Sie sie in 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
...
Entkommentieren Sie die folgenden PHP-Umgebungsvariablen.
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 geben Sie Y ein 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 folgt.
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 geben Sie Y ein wenn Sie dazu aufgefordert werden.
Führen Sie die folgenden Befehle aus, um die Datei-Upload- und Speicherlimits 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 in /var/lib/php/
Verzeichnis, dessen Gruppeneigentümer auf apache
gesetzt sind , aber wir verwenden Nginx. Also müssen wir dem nginx-Benutzer mit setfacl
Lese- und Schreibberechtigungen für die 3 Verzeichnisse 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.
Nginx installieren.
$ sudo dnf install nginx -y
Überprüfen Sie, ob es richtig funktioniert.
$ nginx -v
nginx version: nginx/1.18.0
Nginx starten und aktivieren.
$ sudo systemctl start nginx
$ sudo systemctl enable nginx
Öffnen Sie die IP-Adresse Ihres Servers in einem Browser, um die folgende Seite anzuzeigen. Das bedeutet, dass Nginx ordnungsgemäß funktioniert.
Installieren Sie MariaDB
MariaDB ist ein Drop-in-Ersatz für MySQL, was bedeutet, dass die Befehle zum Ausführen und Betreiben von MariaDB die gleichen sind wie die für MySQL.
Fedora 32 wird standardmäßig mit MariaDB 10.4 ausgeliefert, das wir verwenden werden.
MariaDB-Server installieren.
$ sudo dnf install mariadb-server
Überprüfen Sie, ob MariaDB korrekt installiert wurde.
$ 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 eine Standardkonfiguration durchzuführen, z. B. das Vergeben eines Root-Passworts, das Entfernen anonymer Benutzer, das Verbieten der Root-Anmeldung aus der Ferne und das Löschen von Testtabellen.
$ sudo mysql_secure_installation
Durch Drücken der Eingabetaste wird die Standardoption ausgewählt (in diesem Fall die großgeschriebene Option 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 ist es. Wenn Sie sich das nächste Mal bei MySQL anmelden möchten, verwenden 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 die MySQL-Shell aufzurufen.
$ sudo mysql
Erstellen Sie einen MySQL-Benutzer für die Verwaltung 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 Berechtigungen für die 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
Generieren Sie das Zertifikat. Wir erstellen auch ein DHParams-Zertifikat.
$ export LDOMAIN="nextcloud.example.com"
$ export LEMAIL="[email protected]"
$ 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 einrichten, um das SSL automatisch zu erneuern. Um den Crontab-Editor zu öffnen, führen Sie den folgenden Befehl aus
$ sudo EDITOR=nano crontab -e
Der obige Befehl öffnet Crontab mit dem Nano-Editor anstelle des standardmäßigen Vim-Editors.
Fügen Sie unten die folgende Zeile ein.
25 2 * * * /usr/bin/certbot renew --quiet --pre-hook “systemctl stop nginx” --post-hook “systemctl start nginx”
Der obige Cron-Job führt certbot jeden Tag um 2:25 Uhr aus. Sie können es beliebig ändern.
Speichern Sie die Datei, indem Sie Strg + X drücken und geben Sie Y ein wenn Sie dazu aufgefordert werden.
SELinux/Berechtigungen konfigurieren
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, wenn sie in Ihrem Fall anders 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 Updates über die Weboberfläche von Nextcloud zu aktivieren, führen Sie auch den folgenden Befehl aus.
$ sudo setsebool -P httpd_unified on
Nginx für Nextcloud konfigurieren
Als nächstes müssen wir Nginx für das Hosting von Nextcloud konfigurieren.
Für unsere Zwecke wird Nextcloud unter 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 /etc/nginx/nginx.conf
Datei zum Bearbeiten.
$ sudo nano /etc/nginx/nginx.conf
Fügen Sie die folgenden Zeilen nach der Zeile include /etc/nginx/conf.d/*.conf
ein
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 aufgefordert werden, die Datei zu speichern.
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 Beispieldomain vor dem Einfügen durch Ihre echte Domain ersetzen.
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 aufgefordert werden, die Datei zu speichern.
Aktivieren Sie diese Konfigurationsdatei, indem Sie sie mit sites-enabled
verknüpfen Verzeichnis.
$ 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 neu, wenn alles in Ordnung ist.
$ sudo systemctl reload nginx
Nextcloud installieren
Es gibt zwei Möglichkeiten, Nextcloud zu konfigurieren – über die Befehlszeile oder über die grafische Oberfläche. Wir entscheiden uns für die Kommandozeilenmethode.
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
ausgeführt Benutzer, weil er Schreibrechte für den Nextcloud-Ordner hat.
Als nächstes müssen wir unsere Domain zur Liste der vertrauenswürdigen Domains hinzufügen. Öffnen Sie die /var/www/html/nextcloud/config/config.php
Datei.
$ sudo nano config/config.php
Ändern Sie den Wert von trusted_domains
Variable, 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 aufgefordert werden, die Datei zu speichern.
Starten Sie Ihre Nextcloud-Installation, indem Sie https://nextcloud.example.com
öffnen in Ihrem Browser und Sie sehen den folgenden Bildschirm.
Geben Sie Ihre Anmeldedaten für die Verwaltung ein. Scrollen Sie durch die einführenden Nextcloud-Banner, legen Sie Ihren Wetterstandort und -status fest und wählen Sie ein Hintergrundbild aus. Sobald Sie fertig sind, sollten Sie mit einem ähnlichen Bildschirm begrüßt werden.
Schlussfolgerung
Damit ist unser Tutorial zur Installation von Nextcloud auf einem Fedora 32-Server abgeschlossen. Wenn Sie Fragen haben, posten Sie diese in den Kommentaren unten.