Nextcloud ist eine kostenlose (Open Source) Dropbox-ähnliche Software, eine Abspaltung des ownCloud-Projekts. Nextcloud ist in PHP und JavaScript geschrieben und unterstützt viele Datenbanksysteme wie MySQL/MariaDB, PostgreSQL, Oracle-Datenbank und SQLite.
Um Ihre Dateien zwischen Desktop und Server synchron zu halten, bietet Nextcloud Anwendungen für Windows-, Linux- und Mac-Desktops sowie eine mobile Anwendung für Android und iOS.
In diesem Tutorial zeigen wir Ihnen, wie Sie Nextcloud 17 mit dem Nginx-Webserver, PHP 7.3 und der MariaDB-Datenbank auf einem CentOS 8-Server installieren. Wir installieren Nextcloud und sichern es mit einem kostenlosen SSL-Zertifikat von Let's Encrypt.
Voraussetzung
Für diese Anleitung installieren wir Nextcloud auf dem CentOS 8-Server mit 2 GB RAM, 25 GB freiem Speicherplatz und 2 CPUs.
Was wir tun werden:
- Nginx-Webserver installieren
- Installieren Sie PHP-FPM 7.3
- Konfigurieren Sie PHP-FPM 7.3
- Installieren und konfigurieren Sie die MariaDB-Datenbank
- SSL Letsencrypt generieren
- Nextcloud 17 herunterladen
- Nginx Virtualhost für Nextcloud einrichten
- SELinux für Nextcloud einrichten
- Nextcloud-Nachinstallation
Schritt 1 – Nginx installieren
Zuerst installieren wir den Nginx-Webserver auf dem CentOS 8-Server und öffnen den HTTP- und HTTPS-Port auf der Firewalld.
Installieren Sie Nginx aus dem AppStream-Repository mit dem folgenden dnf-Befehl.
sudo dnf install nginx
Starten Sie nach Abschluss der Installation den nginx-Dienst und fügen Sie ihn zum Systemstart hinzu.
systemctl start nginx
systemctl enable nginx
Überprüfen Sie nun den Status des nginx-Dienstes mit dem folgenden Befehl.
systemctl status nginx
Sie erhalten, dass der nginx-Dienst auf dem CentOS 8-Server ausgeführt wird.
Als Nächstes fügen wir die HTTP- und HTTPS-Dienste zur Firewall hinzu.
Fügen Sie die HTTP- und HTTPS-Dienste mithilfe des Befehls firewall-cmd unten zu firewalld hinzu.
firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent
Laden Sie danach die Firewalld-Dienste neu.
firewall-cmd --reload
Als Ergebnis haben Sie den Nginx-Webserver erfolgreich installiert und die HTTP- und HTTPS-Ports auf dem CentOS 8-Server geöffnet.
Schritt 2 – PHP-FPM installieren
Gemäß den Nextcloud-Systemanforderungen wird empfohlen, PHP 7.2 oder PHP 7.3 für die Installation zu verwenden.
Für diese Anleitung verwenden wir PHP 7.3, das aus dem REMI-Repository installiert werden kann.
Bevor wir fortfahren, aktivieren wir das „PowerTools“-Repository und fügen die EPEL- und REMI-Repositorys für den CentOS 8-Server hinzu.
Führen Sie den folgenden dnf-Befehl aus.
sudo dnf config-manager --set-enabled PowerTools
sudo dnf install epel-release
sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm
Überprüfen Sie nun alle verfügbaren Repositorys auf dem System.
dnf repolist
Und Sie erhalten das Ergebnis wie folgt.
Sie haben das „PowerTools“-Repository aktiviert und die EPEL- und REMI-Repositorys für CentOS 8 hinzugefügt.
Als Nächstes aktivieren wir das PHP 7.3 REMI-Repository.
Überprüfen Sie alle verfügbaren Module für PHP-Pakete.
dnf module list php
Aktivieren Sie nun das Modul des PHP 7.3 REMI-Repositorys.
dnf module enable php:remi-7.3
Installieren Sie danach die PHP- und PHP-FPM 7.3-Pakete für Nextcloud mit dem folgenden dnf-Befehl.
sudo dnf install php-fpm php-cli php-devel php-gd php-mysqlnd php-pear php-xml php-mbstring php-pdo php-json php-pecl-apcu php-pecl-apcu-devel php-pecl-imagick-devel php-intl php-opcache php-zip
Und Sie haben PHP und PHP-FPM 7.3 auf dem CentOS 8-System installiert.
Schritt 3 – PHP-FPM 7.3 konfigurieren
In diesem Schritt richten wir das PHP-FPM für die Nextcloud-Bereitstellung ein.
Bearbeiten Sie die 'php.ini'-Konfiguration mit dem folgenden Befehl.
vim /etc/php.ini
Entkommentieren Sie die Konfiguration und ändern Sie sie wie unten beschrieben.
memory_limit = 512M
date.timezone = Asia/Jakarta
cgi.fixpathinfo = 0
Speichern und schließen.
Bearbeiten Sie nun die PHP-Opcache-Konfiguration ‚/etc/php.d/10-opcache.ini‘.
vim /etc/php.d/10-opcache.ini
Ändern Sie die Konfiguration wie folgt.
opcache.enable=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1
Speichern und schließen.
Als nächstes bearbeiten Sie die PHP-FPM-Konfiguration ‚/etc/php-fpm.d/www.conf‘.
vim /etc/php-fpm.d/www.conf
Ändern Sie den „Benutzer“ und die „Gruppe“ in „nginx“.
user = nginx
group = nginx
Ändern Sie die „Listen“-Konfiguration wie unten beschrieben in die SOCKET-Datei.
listen = /run/php-fpm/www.sock
Entkommentieren Sie die PHP-Umgebungsvariable unten.
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 und schließen.
Erstellen Sie nun ein neues Verzeichnis für die PHP-Sitzung und den Opcache und ändern Sie dann den Eigentümer dieser Verzeichnisse in „nginx“-Benutzer und -Gruppe.
mkdir -p /var/lib/php/{session,opcache}
chown -R nginx:nginx /var/lib/php/{session,opcache}
Und Sie haben die PHP-FPM-Konfiguration für die Nextcloud-Installation abgeschlossen.
Starten Sie den PHP-FPM-Dienst und fügen Sie ihn zum Systemstart hinzu.
systemctl enable php-fpm
systemctl start php-fpm
Überprüfen Sie nun die PHP-FPM-Sock-Datei und den Dienststatus.
netstat -pl | grep php
systemctl status php-fpm
Und Sie erhalten das Ergebnis wie folgt.
Als Ergebnis läuft das PHP-FPM unter der Sock-Datei '/run/php-fpm/www.sock'.
Schritt 4 – MariaDB installieren und konfigurieren
In diesem Schritt installieren wir den MariaDB-Datenbankserver, richten die Root-Passwort-Authentifizierung ein und erstellen eine neue Datenbank und einen neuen Benutzer für Nextcloud.
Installieren Sie die MariaDB-Datenbank mit dem folgenden dnf-Befehl.
sudo dnf install mariadb mariadb-server
Starten Sie nach Abschluss der Installation den MariaDB-Dienst und fügen Sie ihn zum Systemstart hinzu.
systemctl start mariadb
systemctl enable mariadb
Und der MariaDB-Dienst ist in Betrieb.
Als Nächstes richten wir die Root-Passwort-Authentifizierung mit dem Befehl „mysql_secure_installation“ unten ein.
mysql_secure_installation
Geben Sie Ihr Root-Passwort ein und geben Sie 'Y' für die restliche Konfiguration ein.
Set a root password? [Y/n] Y
Remove anonymous users? [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 konfiguriert.
Melden Sie sich nun mit dem folgenden mysql-Befehl bei der MySQL-Shell an.
mysql -u root -p
TYPE YOUR ROOT PASSWORD
Erstellen Sie nun eine neue Datenbank „nextcloud_db“ und erstellen Sie einen neuen Benutzer „nextclouduser“ mit dem Passwort „nextcloudpassdb“, indem Sie die folgenden Abfragen verwenden.
create database nextcloud_db;
create user [email protected] identified by 'nextcloudpassdb';
grant all privileges on nextcloud_db.* to [email protected] identified by 'nextcloudpassdb';
flush privileges;
Und Sie haben die Datenbank und den Benutzer für die Nextcloud-Installation erstellt.
Schritt 4 - Generieren Sie SSL Letsencrypt
In diesem Schritt generieren wir die SSL-Letsencrypt mit dem „certbot“. Die SSL-Zertifikate werden verwendet, um den Zugriff auf Nextcloud zu sichern.
Installieren Sie certbot aus dem EPEL-Repository mit dem folgenden dnf-Befehl.
sudo dnf install certbot
Generieren Sie nach Abschluss der Installation die SSL-Zertifikate für den Nextcloud-Domainnamen mit dem folgenden Befehl und stellen Sie sicher, dass Sie den Domainnamen und die E-Mail-Adresse durch Ihre eigenen ersetzen.
certbot certonly --webroot --webroot-path /usr/share/nginx/html --agree-tos -m [email protected] -d cloud.hakase-labs.io
Sobald dies abgeschlossen ist, befinden sich alle generierten SSL-Zertifikate im Verzeichnis „/etc/letsencrypt/live/cloud.hakase-labs.io“.
Überprüfen Sie es mit dem folgenden Befehl.
ls -lah /etc/letsencrypt/live/cloud.hakase-labs.io/
Und Sie haben das SSL-letsencrypt mit dem certbot-Tool generiert.
Schritt 5 – Nextcloud herunterladen und installieren
In diesem Schritt werden wir die neueste Version von Nextcloud 17 herunterladen.
Installieren Sie vor dem Herunterladen des Nextcloud-Quellcodes das ZIP-Paket auf dem System.
sudo dnf install unzip
Gehen Sie nun in das Verzeichnis ‚/var/www/‘ und laden Sie den Nextcloud-Quellcode mit dem wget-Befehl wie unten beschrieben herunter.
cd /var/www/
wget https://download.nextcloud.com/server/releases/nextcloud-17.0.2.zip
Extrahieren Sie den Nextcloud-Quellcode mit dem folgenden Befehl.
unzip nextcloud-17.0.2.zip
Und Sie erhalten ein neues Verzeichnis namens ‚nextcloud‘.
Erstellen Sie nun ein neues ‚data‘-Verzeichnis für Nextcloud. Das Verzeichnis „data“ wird zum Speichern von Benutzerdaten verwendet.
mkdir -p /var/www/nextcloud/data/
Ändern Sie danach den Eigentümer des Verzeichnisses „nextcloud“ in den Benutzer und die Gruppe „nginx“.
sudo chown -R nginx:nginx /var/www/nextcloud
Und Sie haben die neueste Nextcloud 17 in das Verzeichnis „/var/www“ heruntergeladen.
Schritt 6 – Richten Sie den virtuellen Nginx-Host für Nextcloud ein
Nach dem Herunterladen des Nextcloud-Quellcodes richten wir den virtuellen Nginx-Host für Nextcloud ein.
Gehen Sie in das Verzeichnis ‚/etc/nginx/conf.d‘ und erstellen Sie eine neue Konfiguration ‚nextcloud.conf‘.
cd /etc/nginx/conf.d/
vim nextcloud.conf
Ändern Sie nun den Domänennamen und den Pfad des SSL-Zertifikats mit Ihrem eigenen und fügen Sie die folgende Konfiguration darin ein.
upstream php-handler {
#server 127.0.0.1:9000;
server unix:/run/php-fpm/www.sock;
}
server {
listen 80;
listen [::]:80;
server_name cloud.hakase-labs.io;
# enforce https
return 301 https://$server_name:443$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name cloud.hakase-labs.io;
# 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/ssl/nginx/fullchain.pem;
ssl_certificate_key /etc/ssl/nginx/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 built 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 schließen.
Testen Sie danach die Nginx-Konfiguration und starten Sie den Nginx-Dienst neu. Und stellen Sie sicher, dass kein Fehler vorliegt.
nginx -t
systemctl restart nginx
Jetzt öffnet der Nginx-Dienst einen neuen HTTPS-Port auf dem System, überprüfen Sie ihn mit dem folgenden Befehl.
netstat -plntu
Und Sie erhalten das Ergebnis wie folgt.
Als Ergebnis haben Sie die Konfiguration des virtuellen Nginx-Hosts für Nextcloud hinzugefügt und das sichere HTTPS darüber aktiviert.
Schritt 7 – SELinux für Nextcloud einrichten
Für dieses Tutorial verwenden wir SELinux im „enforcing“-Modus. Und wir werden SELinux für die Nextcloud-Installation einrichten.
Installieren Sie das SELinux-Verwaltungstool mit dem folgenden dnf-Befehl.
sudo dnf install policycoreutils-python-utils
Führen Sie nun folgenden Befehl als root auf Ihrem Server aus.
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/data(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/config(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/apps(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/assets(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/.htaccess'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/.user.ini'
restorecon -Rv '/var/www/nextcloud/'
Und die SELinux-Konfiguration für Nextcloud ist abgeschlossen.
Schritt 8 - Nextcloud-Installationsassistent
Öffnen Sie nun Ihren Webbrowser und geben Sie Ihren Nextcloud-Domainnamen in die Adressleiste ein.
https://cloud.hakase-labs.io/
Jetzt erhalten Sie die Nextcloud-Installationsseite wie unten gezeigt.
Geben Sie Ihren Admin-Benutzer und Ihr Passwort ein, wählen Sie dann „MySQL/MariaDB“ als Ihre Datenbank und geben Sie Details über die Datenbank ein, die Sie oben erstellt haben.
Klicken Sie nun auf die Schaltfläche „Setup beenden“ und die Installation beginnt.
Sobald die Installation abgeschlossen ist, erhalten Sie das Nextcloud-Dashboard wie unten gezeigt.
Als Ergebnis haben Sie erfolgreich das neueste Nextcloud 17 mit dem Nginx-Webserver, PHP-FPM 7.3 und der MariaDB-Datenbank auf dem CentOS 8-Server installiert.