Home

ITA - Debian installare nextcloud

debian nextcloud

Introduzione

Dopo aver installato il server base come ho descritto in questo articolo mi sono dedicato all’installazione del software applicativo: ebbene su questo server installerò nextcloud.

Nextcloud è una suite di software client-server per la creazione e l’utilizzo di servizi di file hosting, di cloud storage, di memorizzazione e sincronizzazione online.

Nextcloud è software libero e open-source, il che significa che chiunque può installarlo e utilizzarlo sui propri server.

Nextcloud, grazie all’integrazione con OnlyOffice o Collabora Online, è funzionalmente simile a Dropbox, Office 365 o Google Drive.

Procedura

NB: tutti i passi successivi li ho eseguiti con i diritti di amministrazione.

Installazione dei pacchetti

Installo tutti i pacchetti necessari con il seguente comando:

$ apt install apache2 mariadb-server libapache2-mod-php \
    php-gd php-mysql php-curl php-mbstring php-intl \
    php-gmp php-bcmath php-imagick php-xml php-zip \
    php-ldap unzip wget

Configurazione del database

Abilitiamo il servizio del database:

$ systemctl enable --now mariadb

Per continuare mi collego al database:

$ mysql -uroot -p

e creo l’utente, il db e estendo i permessi (tutte le configurazioni necessarie):

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
CREATE DATABASE IF NOT EXISTS nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
GRANT ALL PRIVILEGES ON nextcloud.* TO 'username'@'localhost';
FLUSH PRIVILEGES;
quit;

Download e installazione di nextcloud

Mi colleco alla pagina di download e scarico i files

$ wget https://download.nextcloud.com/server/releases/nextcloud-21.0.2.zip
$ wget https://download.nextcloud.com/server/releases/nextcloud-21.0.2.zip.md5

verifico l’integrità del pacchetto:

$ md5sum -c nextcloud-21.0.2.zip.md5
  nextcloud-21.0.2.zip: OK

Scompatto i file nella root del server apache:

$ unzip nextcloud-21.0.2.zip -d /var/www/
$ chown -R www-data. /var/www/nextcloud

aggiungere la seguente linea al file /var/www/nextcloud/config/config.php

  'default_phone_region' => 'IT',

per configurare la il prefisso di default per i numeri di telefono.

Configurazione apache

Disabilito il virtualhost di default:

$ a2dissite 000-default

Creo il file del virtual host:

$ touch /etc/apache2/sites-available/nextcloud.conf

Al suo interno inserisco il contenuto:

<VirtualHost *:80>
  DocumentRoot /var/www/nextcloud/
  ServerName  your.server.com

  php_value memory_limit 1G

    <IfModule mod_headers.c>
      Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
    </IfModule>

  <Directory /var/www/nextcloud/>
    Require all granted
    AllowOverride All
    Options FollowSymLinks MultiViews

    <IfModule mod_dav.c>
      Dav off
    </IfModule>
  </Directory>
</VirtualHost>

NB: questo è un template

Abilito il virtualhost per nextcloud:

$ a2ensite 001-nextcloud

Abilito i seguenti moduli di apache:

a2enmod rewrite
a2enmod headers
a2enmod env
a2enmod dir
a2enmod mime

per abilitarle riavvio il servizio con il comando:

systemctl restart apache2

HTTP2

La versione 2 del protocollo http migliora le performance per usarlo abilito il modulo :

a2enmod http2

Poi aggiungo la riga nel virtualhost https:

Protocols h2 http/1.1

E riavvio il server apache:

systemctl restart apache2

Per controllare uso il comando:

curl -I https:// your.server.com

Cache

Ho deciso di usare il sistema di cache per migliorare la responsività del server, per farlo ho installato il pacchetto:

$ apt install php-apcu

Ho poi aggiunto la seguente linea al file /var/www/nextcloud/config/config.php:

'memcache.local' => '\OC\Memcache\APCu',

Certificati ssl

Ho deciso di usare i certifficati ssl forniti da certbot, quindi lo ho installato:

$ apt install python3-certbot-apache

e lo eseguo con il comando:

$ certbot

Nextcloud installer

Per raggiungere il form di installazione aprire il browser e collegarsi alla pagina http:// your.server.com:

installation form

e lo compilo :

installation form compiled

Systemd timers

La macchina che ospita il server dispone di systemd, quindi ho deciso di abilitare due timers:

  1. un servizio che genera le preview di tutte le immagini, viene eseguito una volta al giorno
  2. il servizio cron interno a nextcloud stesso.

Per fare questo ho usato in entrambi i casi :

Generatore delle preview

Creo il file /etc/systemd/system/nextcloud-preview-generator.service con il seguente contenuto

[Unit]
Description=Nextcloud Preview Generator

[Service]
Type=oneshot
User=www-data
ExecStart=/usr/bin/php -f /var/www/nextcloud/occ preview:pre-generate

[Install]
WantedBy=basic.target

Dopo di che creo il timer /etc/systemd/system/nextcloud-preview-generator.timer:

[Unit]
Description=Run Nextcloud Preview Generator daily at 04:00

[Timer]
OnCalendar=*-*-* 4:00:00
Persistent=true

[Install]
WantedBy=timers.target

Triggero la rilettura dei file di configurazione di systemd

$ systemd reload systemctl daemon-reload

Abilito il timer:

$ systemctl enable --now nextcloud-preview-generator.timer

Cron jobs

Nextcloud deve eseguire molto frequentement dei task interni, per triggerare queste operazioni è possibile usare diversi meccanismi:

Essendo questo server pensato per pochi utenti e quindi probabile che sfruttando solamente i meccanismi interni i job non vengano stimolati a sufficienza.

Ho quindi deciso di sfruttare i timers di systemd per stimolare questi job:

Ho creato il file /etc/systemd/system/nextcloudcron.service :

[Unit]
Description=Nextcloud cron.php job

[Service]
User=www-data
ExecStart=/usr/bin/php -f /var/www/nextcloud/cron.php
KillMode=process

Poi il timer /etc/systemd/system/nextcloudcron.timer con questo contenuto:

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

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

[Install]
WantedBy=timers.target

E lo abilito con il comando:

systemctl enable --now nextcloudcron.timer

Fail2Ban

Fail2Ban è un sistema di sicurezza che analizza i log dei servizi esposti cercando i segni di attività maliziose e che attiva delle regole del firewall per bloccare queste attività.

Il programma si installa con il comando:

$ apt install fail2ban

Create a file in /etc/fail2ban/filter.d named nextcloud.conf with the following contents:

[Definition]
_groupsre = (?:(?:,?\s*"\w+":(?:"[^"]+"|\w+))*)
failregex = ^\{\%(_groupsre)s,?\s*"remoteAddr":"<HOST>"%(_groupsre)s,?\s*"message":"Login failed:
            ^\{\%(_groupsre)s,?\s*"remoteAddr":"<HOST>"%(_groupsre)s,?\s*"message":"Trusted domain error.
datepattern = ,?\s*"time"\s*:\s*"%%Y-%%m-%%d[T ]%%H:%%M:%%S(%%z)?"

The jail file defines how to handle the failed authentication attempts found by the Nextcloud filter.

Create a file in /etc/fail2ban/jail.d named nextcloud.local with the following contents:

[nextcloud]
backend = auto
enabled = true
port = 80,443
protocol = tcp
filter = nextcloud
maxretry = 3
bantime = 86400
findtime = 43200
logpath = /path/to/data/directory/nextcloud.log

Riferimenti