Installeren en configureren Nextcloud server

Inleiding

Met deze handleiding ga je Nextcloud server en vereisten installeren op Fedora Server.

Benodigheden

Je hebt een machine met Fedora Server nodig en wat tijd en koffie. Op de server moet het volgende (los) geïnstalleerd worden voor Nextcloud:

Je kunt dit insatalleren met het volgende commando:

sudo dnf install -y 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-apcu php-pecl-igbinary php-pecl-imagick php-pecl-memcached php-pecl-msgpack php-pecl-redis5 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 redis

Configuratie Apache (httpd)

De volgende stappen zijn nodig om Apache te configureren.

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

Verander de eigenaar en groep van de map /var/www/html/ naar apache met het volgende commando:

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

Configuratiebestand voor Nextcloud

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

<VirtualHost *:80>
	DocumentRoot "/var/www/html/nextcloud/"
	ServerName nextcloud.domeinnaam.nl
	
	<IfModule mod_headers.c>
		Headers 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>

Apache activeren en starten

Activeer en start Apache met het volgende commando:

sudo systemctl enable --now httpd

Firewall configureren voor Apache

Open poort 80 en 443 (HTTP en HTTPS) in de firewall

sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-service=https --permanent
sudo firewall-cmd --reload

Apache SELinux instellingen

Om ervoor te zorgen dat de installatie van Nextcloud zometeen soepel verloopt en er geeen foutmeldingen naar voren komen zoals het niet kunnen verbinden met een database voer je de volgende commando’s uit:

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

De laatste daarvan is niet nodig als je niet van plan bent Nextcloud centraal te beheren vanuit een LDAP oplossing.


PHP

De volgende instellingen zijn nodig voor PHP.

Configuratiebestand voor Nextcloud

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

; Upload settings for PHP
php_value[upload_max_filesize] = 128M
php_value[post_max_size] = 128M

; Memory limit
php_value[memory_limit] = 1024M

; APCu
; php_value[apc.enable_cli] = 1

; Opcache
; php_value[opcache.enable_cli] = 1
php_value[opcache.interned_strings_buffer] = 128

Configuratie PHP-cli

Om ervoor te zorgen dat de verschillende commandline PHP commando’s die verderop gegeven worden werken zonder foutmelding(en) moet je een configuratiebestand aanpassen.

Pas in /etc/php-zts.d/40-apcu.ini regel 9 aan van dit:

; apc.enable_cli=0

Naar

apc.enable_cli=1

Om er zeker van te zijn dat dit overal wordt toegepast doe je dezelfde stappen in het bestand /etc/php.d/40-apcu.ini ook.

Herladen PHP

Om er voor te zorgen dat alle aanpassingen die gedaan zijn ook doorgevoerd worden moet je de php-fpm dienst herladen, dat kan met

sudo systemctl reload php-fpm.service

MariaDB

De volgende stappen zijn nodig voor MariaDB (MySQL).

Activeer en start mariadb

sudo systemctl enable --now mariadb.service

Voer de post-install tool van MariaDB uit

sudo mysql_secure_installation

Gebruiker

Maak een nieuwe database én gebruiker aan (voor meer details zie deze handleiding):

CREATE DATABASE nextcloud;
GRANT ALL PRIVILEGES ON nextcloud.* to nextcloud@localhost IDENTIFIED BY 'sterkwachtwoordhier';
FLUSH PRIVILEGES;

(Een sterk wachtwoord kun je genereren met pwgen 32 1)


Redis

Activeer en start Redis. Er is verder geen configuratie nodig.

sudo systemctl enable --now redis.service

Configuratie Nextcloud

Hieronder de stappen om Nextcloud te installeren en te configureren.

Downloaden en uitpakken van Nextcloud

Om te beginnen moet je de meest recente versie van Nextcloud downloaden, uitpakken en verplaatsen.

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/

Data map aanmaken en eigenaar en groep goedzetten

De uitgepakte zip van Nextcloud heeft geen data map. Die moet dus aangemaakt worden, waarna de hele /var/www/html/nextcloud/ map de juiste eigenaar en groep moet krijgen:

sudo mkdir /var/www/html/nextcloud/data/
sudo chown -R apache:apache /var/www/html/

Nextcloud achtergrondtaken

Nextcloud heeft een achtergrondtaak die het eens per 5 minuten wil uitvoeren om o.a. (nieuwe) mappen en bestanden gesynchroniseerd te houden. Dat kan geautomatiseerd worden met een systemd unit en timer.

Om te beginnen maak een niuewe systemd unit aan in /etc/systemd/system/nextcloudcron.service 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

En dan maak je een nieuwe systemd timer aan in /etc/systemd/system/nextcloudcron.timer met de volgende inhoud:

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

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

[Install]
WantedBy=timers.target

Herlaad vervolgens systemd en activeer de timer.

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

SELinux mapconfiguratie

Voor een goede werking van Nextcloud moet het SELinux label op een aantal mappen en bestanden van Nextcloud iets worden aangepast:

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/aws/aws-sdk-php/src/data/logs(/.*)?'
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.


Afconfigureren

Ga in een webbrowser naar de URL van Nextcloud en doorloop de configuratie. Als dit gedaan is zijn er een aantal zaken die je kunt doen om ervoor te zorgen dat Nextcloud soepeler draait.

Voeg de volgede zaken toe aan /var/www/html/nextcloud/config/config.php (met het volgende commando `sudo -u apache vim /var/www/html/nextcloud/config/config.php’):

'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