Nextcloud te installeren en in te stellen op Fedora 32
Nextcloud is een opensource software om je gegevens op te slaan en te synchroniseren op meerdere apparaten. Je kunt het beschouwen als je eigen Dropbox kloon. Maar behalve bestanden opslaan biedt het ook extra functies zoals Agenda, Contacten, Geplande Taken, media streaming enz.
Nextcloud biedt apps voor Windows, Linux, MacOS en mobiele apps voor Android en iOS die je kunt gebruiken om bestanden over je verschillende apparaten te synchroniseren.
In deze zelfstudie leren we hoe je Nextcloud installeert en configureert op een Fedora 32 gebaseerde server. We zullen ook Nginx webserver installeren, samen met PHP 7.4 en MariaDB
Vereisten
Een server waarop Fedora 32 draait.
Een niet-root sudo gebruiker.
Zorg ervoor dat alles bijgewerkt is.
$ sudo dnf update
Essentiële pakketten.
$ sudo dnf install wget curl bzip2 nano unzip policycoreutils-python-utils -y
Sommige van deze pakketten kunnen al op je systeem staan.
Configureer de firewall
De eerste stap is het instellen van de firewall. Fedora server wordt geleverd met Firewalld firewall voorgeïnstalleerd.
Controleer of de firewall draait.
$ sudo firewall-cmd --state
running
Controleer de huidige toegestane diensten/poorten.
$ sudo firewall-cmd --permanent --list-services
Het zou de volgende uitvoer moeten tonen.
dhcpv6-client mdns ssh
Sta HTTP en HTTPS poorten toe.
$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https
Controleer nogmaals de status van de firewall.
$ sudo firewall-cmd --permanent --list-services
Je zou een gelijkaardige uitvoer moeten zien.
dhcpv6-client http https mdns ssh
Herlaad de firewall.
$ sudo systemctl reload firewalld
Installeer PHP
Fedora 32 wordt standaard geleverd met PHP 7.4 maar om een bijgewerkte PHP repository te hebben, zullen we de REMI repository toevoegen.
Installeer de REMI repository die de officiële Fedora repository is voor het installeren van PHP pakketten.
$ sudo dnf -y install https://rpms.remirepo.net/fedora/remi-release-32.rpm
Schakel de remi
repository in en de remi-modular
repository uit. Dit schakelt de repository in die nodig is om PHP 7.4 pakketten te installeren.
$ sudo dnf config-manager --set-enabled remi
$ sudo dnf config-manager --set-disabled remi-modular
Installeer PHP 7.4 samen met enkele aanvullende pakketten.
$ 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
Controleer of PHP correct werkt.
$ 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
Configureer PHP
Open het bestand /etc/php-fpm.d/www.conf
.
$ sudo nano /etc/php-fpm.d/www.conf
We moeten de Unix gebruiker/groep van PHP processen instellen op nginx. Zoek de regels user=apache
en group=apache
in het bestand en verander ze 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
...
Haal het commentaar weg bij de PHP omgevingsvariabelen hieronder.
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
Haal het commentaar weg bij de opcache configuratie op de laatste regel.
php_value[opcache.file_cache] = /var/lib/php/opcache
Sla het bestand op door op Ctrl + X te drukken en Y in te voeren als daarom gevraagd wordt.
Bewerk nu de PHP opcache configuratie /etc/php.d/10-opcache.ini
.
$ sudo nano /etc/php.d/10-opcache.ini
Verander de configuratie als hieronder.
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
Sla het bestand op door op Ctrl + X te drukken en Y in te voeren als daarom wordt gevraagd.
Voer de volgende commando's uit om de Bestandsupload en Geheugen grenzen voor PHP te verhogen.
$ 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
Standaard staan er 3 bestanden in de map /var/lib/php/
waarvan de groepseigenaar ingesteld is op apache
, maar we gebruiken Nginx. We moeten dus de nginx gebruiker permissies geven om te lezen en te schrijven naar de 3 mappen met setfacl
.
$ 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/
Schakel het php-fpm proces in en start het.
$ sudo systemctl enable php-fpm
$ sudo systemctl start php-fpm
Installeer Nginx
Fedora 32 wordt standaard geleverd met de nieuwste Stable versie van Nginx.
Installeer Nginx.
$ sudo dnf install nginx -y
Controleer of het correct werkt.
$ nginx -v
nginx version: nginx/1.18.0
Start Nginx en schakel het in.
$ sudo systemctl start nginx
$ sudo systemctl enable nginx
Open het IP adres van je server in een browser om de volgende pagina te zien. Dat betekent dat Nginx goed werkt.
Installeer MariaDB
MariaDB is een drop-in vervanger voor MySQL, wat betekent dat de commando's om MariaDB te draaien en te bedienen dezelfde zijn als die voor MySQL.
Fedora 32 wordt standaard geleverd met MariaDB 10.4 en dat is degene die we zullen gebruiken.
Installeer MariaDB server.
$ sudo dnf install mariadb-server
Controleer of MariaDB correct geïnstalleerd is.
$ mysql --version
mysql Ver 15.1 Distrib 10.4.14-MariaDB, for Linux (x86_64) using EditLine wrapper
Schakel de MariaDB dienst in en start hem.
$ sudo systemctl enable mariadb
$ sudo systemctl start mariadb
Voer het volgende commando uit om standaard instellingen uit te voeren, zoals het geven van een root wachtwoord, het verwijderen van anonieme gebruikers, het op afstand verbieden van root login en het laten vallen van testtabellen.
$ sudo mysql_secure_installation
Door op Enter te drukken kies je de standaard optie (die met een hoofdletter, Y in dit geval).
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]
Dat is het. De volgende keer dat je in MySQL wilt inloggen, gebruik je het volgende commando
$ sudo mysql
Voer je root wachtwoord in als daarom gevraagd wordt.
MariaDB configureren
Voer het volgende commando in om in de MySQL shell te komen.
$ sudo mysql
Maak een MySQL gebruiker aan om de NextCloud Database te beheren.
mysql> CREATE USER 'nextuser'@'localhost' IDENTIFIED BY 'yourpassword';
Maak de NextCloud database aan.
mysql> CREATE DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
Verleen alle rechten voor de Nextcloud database aan de gebruiker die we maakten.
mysql> GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextuser'@'localhost';
Sluit de MySQL Shell af.
mysql> exit
Nextcloud downloaden
Tijd om de Nextcloud mappen te downloaden en in te stellen.
$ wget https://download.nextcloud.com/server/releases/latest.tar.bz2
$ tar -jxvf latest.tar.bz2
$ sudo mv nextcloud /var/www/html/
Vervolgens moeten we een gegevensmap maken.
$ sudo mkdir /var/www/html/nextcloud/data
$ sudo chown -R nginx:nginx /var/www/html/nextcloud
SSL installeren
We zullen SSL installeren met de Let's Encrypt dienst.
Installeer daarvoor Certbot.
$ sudo dnf install certbot
Stop Nginx want dat zal het Certbot proces hinderen.
$ sudo systemctl stop nginx
Genereer het certificaat. We maken ook een DHParams certificaat.
$ 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
We moeten ook een cron job instellen om de SSL automatisch te vernieuwen. Om de crontab editor te openen, voer je het volgende commando uit
$ sudo EDITOR=nano crontab -e
Het bovenstaande commando opent Crontab met Nano editor in plaats van de standaard Vim editor.
Plak de volgende regel onderaan.
25 2 * * * /usr/bin/certbot renew --quiet --pre-hook “systemctl stop nginx” --post-hook “systemctl start nginx”
De bovenstaande cron job zal certbot elke dag om 2:25 uur draaien. Je kunt het veranderen in wat je maar wilt.
Bewaar het bestand door op Ctrl + X te drukken en Y in te voeren wanneer daarom gevraagd wordt.
Configureer SELinux/permissies
SELinux moet ingesteld worden om Nextcloud op Fedora te laten werken. Voer de volgende commando's in voor basis SELinux instellingen die voor iedereen zouden moeten werken.
Zorg ervoor dat je de bestandspaden aanpast als ze bij jou anders zijn.
$ 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/'
Om updates via de Nextcloud's webinterface in te schakelen, voer je ook het volgende commando uit.
$ sudo setsebool -P httpd_unified on
Configureer Nginx voor Nextcloud
Vervolgens moeten we Nginx instellen voor het hosten van Nextcloud.
Voor ons doel zal Nextcloud gehost worden op het domein http://nextcloud.example.com
,
Zet mappen op waar de serverblokken zullen komen te staan.
$ sudo mkdir /etc/nginx/sites-available
$ sudo mkdir /etc/nginx/sites-enabled
Open het /etc/nginx/nginx.conf
bestand om het te bewerken.
$ sudo nano /etc/nginx/nginx.conf
Plak de volgende regels na de regel include /etc/nginx/conf.d/*.conf
include /etc/nginx/sites-enabled/*.conf;
server_names_hash_bucket_size 64;
Druk op Ctrl + X om de editor te sluiten en druk op Y als je gevraagd wordt het bestand op te slaan.
Maak het bestand /etc/nginx/sites-available/nextcloud.conf
met Nano editor.
$ sudo nano /etc/nginx/sites-available/nextcloud.conf
Plak de volgende code in de editor. Zorg ervoor dat je het voorbeeld domein vervangt door je echte domein alvorens te plakken.
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;
}
}
Druk op Ctrl + X om de editor te sluiten en druk op Y als gevraagd wordt om het bestand op te slaan.
Activeer dit configuratiebestand door het te linken naar de sites-enabled
directory.
$ sudo ln -s /etc/nginx/sites-available/nextcloud.conf /etc/nginx/sites-enabled/
Test de Nginx configuratie.
$ sudo nginx -t
Herlaad de Nginx dienst als alles in orde is.
$ sudo systemctl reload nginx
Installeer Nextcloud
Er zijn twee manieren om Nextcloud in te stellen - via de commandoregel of via de grafische interface. We zullen kiezen voor de commandoregel methode.
Ga de Nextcloud directory binnen.
$ cd /var/www/html/nextcloud
Voer het volgende commando uit om Nextcloud te installeren.
$ sudo -u nginx php occ maintenance:install --database "mysql" --database-name "nextcloud" --database-user "nextuser" --database-pass "yourpassword" --admin-user "admin" --admin-pass "password"
Dit commando wordt uitgevoerd als nginx
gebruiker omdat die schrijfrechten heeft op de Nextcloud map.
Vervolgens moeten we ons domein toevoegen aan de lijst met vertrouwde domeinen. Open het /var/www/html/nextcloud/config/config.php
bestand.
$ sudo nano config/config.php
Verander de Waarde van de variabele trusted_domains
door er je Server IP adres en je Nextcloud domein nextcloud.example.com
aan toe te voegen, zodat je je installatie vanaf je domein kunt benaderen.
'trusted_domains' =>
array (
0 => 'localhost',
1 => '167.172.35.56',
2 => 'nextcloud.example.com',
),
Druk op Ctrl + X om de editor te sluiten en druk op Y als dat gevraagd wordt om het bestand op te slaan.
Start je Nextcloud installatie door https://nextcloud.example.com
in je browser te openen en je ziet het volgende scherm.
Voer je beheerders login gegevens in. Scroll door de inleidende Nextcloud banners, stel je weerlocatie en status in en kies een achtergrond en als je klaar bent zou je begroet moeten worden met een gelijkaardig scherm.
Conclusie
Dit beëindigt onze zelfstudie over het installeren van Nextcloud op Fedora 32 server. Als je nog vragen hebt, stel ze dan in de reacties hieronder.