Deze inhoud is minimaal een jaar oud en hoeft niet meer te kloppen.

Installatie en configuratie nextcloud server

Geschreven op en bijgewerkt op

Inhoudsopgave

Inleiding

In deze handleiding lees je hoe je Nextcloud server installeert en configureert op Fedora.

Softwarepakketten die je nodig hebt.

De volgende packages moet je installeren:

Dit is best een flinke lijst. Dit is in één klap te installeren met het volgede commando:

sudo dnf install httpd mod_ssl php php-bcmath php-cli php-common php-fpm php-gd php-gmp php-intl php-ldap php-mbstring php-mysqlnd php-opcache php-pdo php-pecl-acpu php-pecl-imagick php-pecl-memcached php-pecl-redis6 php-pecl-zip php-process php-sodium php-xml php-imagick mariadb mariadb-backup mariadb-common mariadb-connector-c mariadb-connector-c-config mariadb-cracklib-password-check mariadb-errmsg mariadb-gssapi-server mariadb-server mariadb-server-utils valkey

Configuratie Apache (httpd).

De volgende dingen zijn nodig om ervoor te zorgen dat Nextcloud goed draait, vooral voor zaken als mappen en bestanden kunnen lezen en schrijven voor het updaten van Nextcloud zonder het totaal opnieuw te hoeven installeren.

Eigenaar en groep van de map /var/www/html aanpassen.

Standaard is de eigenaar en groep van deze map root en root. Pas dit aan naar apache met het volgende commando:

sudo chown -R apache: /var/www/html

Apache configuratiebestand voor Nextcloud.

Maak een nieuw configuratiebestand /etc/httpd/conf.d/nextcloud.conf aan voor Nextcloud met de volgende inhoud:

<VirtualHost *:80>
	DocumentRoot "/var/www/html/nextcloud/"
	ServerName servernaam.domein
	
	<IfModule mod_headers.c>
		Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
	</IfModule>
	
	<Directory "/var/www/html/nextcloud/">
		Require all granted
		AllowOverride All
		Options FollowSymLinks MultiViews
		
		<IfModule mod_dav.c>
			Dav off
		</IfModule>
	</Directory>
</VirtualHost>

Instellingen SELinux voor Apache.

Om ervoor te zorgen dat de installatie van Nextcloud zometeen goed en soepel verkoopt heeft Apache een aantal SELinux tweaks nodig. Denk hierbij aan de mogelijkheid om met de database server (op dezelfde machine) te verbinden.

Voer daarvoor het volgende uit:

sudo setsebool -P httpd_can_network_connect 1
sudo setsebool -P httpd_unified 1
sudo setsebool -P httpd_can_connect_ldap 1

Let op dat de laatste optie alleen nodig is als je van plan bent LDAP te gaan gebruiken om gebruikers- en groepen centraal te beheren.

Apache activeren en starten.

Activeer en start apache automatisch met het volgende commando:

sudo systemctl enable --now httpd

Firewall configureren voor Apache.

Open poort 80 en 443 (HTTP en HTTPS) in de firewall zodat je Nextcloud server bereikt kan worden. Doe dit met

sudo firewall-cmd --add-service=http --add-service=https
sudo firewall-cmd --runtime-to-permanent

PHP.

De volgende zaken zijn nodig voor PHP.

Configuratiebestand voor Nextcloud.

Maak een nieuw configuratiebestand /etc/php-fpm.d/z-nextcloud.conf aan met de volgende inhoud:

php_value[upload_max_filesize] = 128M
php_value[post_max_size] = 128M

php_value[memory_limit] = 1024M

php_value[opcache.interned_strings_buffer] = 129

Configuratie php-cli

Om ervoor te zorgen dat de verschillende php commando’s via de commandline die verderop in deze handleiding gebruikt worden werken zonder foutmeldingen moet je een configuratiebestand aanpassen.

Pas in het bestand /etc/php-zts.d/40-acpi.ini regel nummer 9 aan van dit:

; apc.enable_cli=0

Naar dit

apc.enable_cli1=

Om er zeker van te zijn dat dit overal word toegepast herhaal je dit in het bestand /etc/php/40-acpu.ini.

Herstarten PHP service.

Herstart de PHP service om er zeker van te zijn dat de configuratieaanpassingen goed gegaan zijn en ook ingeladen worden. Doe dit met

sudo systemctl reload php-fpm.service

MariaDB.

Hierna is het tijd om de database server te configureren.

Activeer en start MariaDB.

Net als Apache en PHP, activeer en start de server met:

sudo systemctl enable --now mariadb.service

Eerste configuratie.

Na het installeren en nu net activeren en starten van MariaDB moet je de post-install tool uitvoeren, die een aantal belangrijke zaken regelt. Doe dit met

sudo mysql_secure_instalation

Beantwoord de vragen die je krijgt.

Databasegebruiker.

Vanuit veiligheidsoogpunt is het zeer aaangeraden om voor de Nextcloud database ook een eigen gebruiker aan te maken in MariaDB. Log eerst in met het beheer (root) account in de MariaDB server:

sudo mysql -u root -p

En maak dan de database én gebruiker aan voor Nextcloud

CREATE DATAABASE nextcloud;
GRANT ALL PRIVILEGES ON nextcloud.* TO nextcloud@localhost IDENTIFIED BY 'voerhiereensterkwachtwoordin';
FLUSH PRIVILEGES;

Om een sterk wachtwoord te (laten) maken kun je gebruik maken van pwgen, voer daarvoor het volgende uit in een andere terminal:

pwgen 32 1

Dit maakt een enkel wachtwoord van 32 tekens lang aan. Kopieer en plak en gaan met die banaan.

Valkey

Activeer en start Valkey met het volgende commando. Verder hoef je niets te doen.

sudo systemctl enable --now valkey.service

Nextcloud.

Dan nu het deel waar deze handleiding om drait: Nextcloud zelf.

Downloaden en uitpakken van Nextcloud.

Download de meest recente versie van Nextcloud, pak dit uit en zet alles in de juiste map. Dat doe je met

cd /tmp/
curl -LO https://download.nextcloud.com/server/releases/latest.zip
unzip latest.zip
rm latest.zip
sudo mv /tmp/nextcloud /var/www/html/

Aanmaken data map.

De bestanden en mappen die je net hebt verplaatst hebben geen data map. Deze word door Nextcloud gebruikt om data in op te slaan, en die moet je dus handmatig aanmaken. Doe dat met

sudo mkdir /var/www/html/nextcloud/data/

Eigenaar en groep instellen.

De net verplaatste (en aangemaakte) mappen en bestanden in /var/www/html/nextcloud/ zijn nu van jou. Verander dit naar apache:

sudo chown -R apache: /var/www/html/

Achtergrondtaken Nextcloud.

Nextcloud heeft een achtergrondtaak die het eens per 5 minuten wil uitvoeren om (onder andere) mappen en bestanden gesynchroniseerd te houden. Dit is te automatisren met een systemd timer en bijbehorende unit.

Om te beginnen met de unit. Maak een nieuw configuratiebestand aan in /etc/systemd/system/nextcloudcron.servive met de volgende inhoud:

[Unit]
Description=Nextcloud cron.php job

[Service]
User=apache
ExecCondition=/usr/bin/php -f /var/www/html/nextcloud/occ status -e
ExecStart=/usr/bin/php -f /var/www/html/nextcloud/cron.php
KillMode=process

Gevolgd door de timer, die ervoor zorgt dat de taak (regelmatig) word uitgevoerd. Maak een nieuw configuratiebestand /etc/systemd/system/nextcloudcron.timer aan met de volgende inhoud:

[Unit]
Description=Run Nexcloud cron.php every 5 minutes

[Timer]
OnBootSec=5min
OnUnitActiveSec=5min
Unit=nextcloudcron.service

[Install]
WantedBy=timers.target

Herlaad dan systemd zodat je de timer kunt starten, en start de timer:

sudo systemctl daemon-reload
sudo systemctl enable --now nextcloudcron.timer

SELinux (map)configuratie.

Met de standaard SELinux configuratie zal Nextcloud tegen een aantal problemen aanlopen als het data wil beheren of zichzelf wil updaten.

Om dit goed in te stellen voer je het volgende uit:

sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/'
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/.htaccess'
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(/.*)?'
sudo restorecon -RvF /var/www/html

Het kan zijn dat je bij het uitvoeren van sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/data(/.*)?' de foutmelding ValueError: File context for /var/www/html/nextcloud/data(/.*)? already defined krijgt. Dat is omdat dit al gedefineerd is vanuit de orginele zip, en je past daarmee de labels aan naar hetzelfde. Dit kun je veilig negeren, maar controleer aan het eind van het installatieproces voor de zekerheid het label van /var/www/html/nextcloud/data/ voor de zekerheid. Dit kun je doen met

ls -ldZ /var/www/html/nextcloud/data/

Installatie afmaken.

Het einde is in zicht. De installatie en configuratie van systeemdingen is nu klaar. Open een webbrowser en ga naar je Nextcloud URL en doorloop daar het configuratieproces.

Nadat dit gedaan is kun je een aantal zaken aanpassen om ervoor te zorgen dat Nextcloud soepeler draait. Hiervoor moet je het Nextcloud configuratiebestand /var/www/html/nextcloud/config/config.php) aanpassen met het volgende commando:

sudo -u apache vim /var/www/html/nextcloud/config/config.php

Voeg dan het volgende toe:

'htaccess.RewriteBase' => '/',
'memcache.local' => '\\OC\Memcache\\APCu',
'memcache.locking' => '\\OC\\Memcache\\Redis',
'redis' => array(
	'host' => 'localhost',
	'port' => 6379,
	'timeout' => 0,0,
	'password' => ''
),
'default_phone_region' => 'NL',
'maintenance_window_start' => 1

Het config.php bestand heeft al inhoud erin zitten, dus let er goed op dat je de regels hierboven toevoegt aan het einde van het bestand, en niet de inhoud overschrijft!

Als je dit gedaan hebt moet het .htaccess bestand van Nextcloud opnieuw aangemaakt worden. Gelukkig kan Nextcloud dit zelf met het volgende commando. Als je dan toch bezig bent, de laatste twee commando’s optimaliseren de database structuur van Nextcloud:

sudo -u apache php /var/www/html/nextcloud/occ maintenance:update:htaccess
sudo -u apache php /var/www/html/nextcloud/occ maintenance:repair --include-expensive
sudo -u apache php /var/www/html/nextcloud/occ db:add-missing-indices

Klaar!

Als alles goed is gegaan heb je nu een werkende Nextcloud server!