ITA - Debian installare nextcloud
June 2021 (930 Words, 6 Minutes)
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
:
e lo compilo :
Systemd timers
La macchina che ospita il server dispone di systemd, quindi ho deciso di abilitare due timers:
- un servizio che genera le preview di tutte le immagini, viene eseguito una volta al giorno
- il servizio cron interno a nextcloud stesso.
Per fare questo ho usato in entrambi i casi :
- serve creare il servizio (il file con estensione .service)
- server creare il timer (file di estenzione .timer) che lancia il corrispettivo servizio
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:
- interno a Nextcloud stesso, l’esecuzione dei task periodici viene stimolato dall’utilizzio dell’interfaccia web.
- stimolato dal sistema operativo
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
- https://it.wikipedia.org/wiki/Nextcloud
- https://docs.nextcloud.com/server/latest/admin_manual/installation/example_ubuntu.html
- https://docs.nextcloud.com/server/latest/admin_manual/installation/source_installation.html#apache-configuration-label
- https://docs.nextcloud.com/server/21/admin_manual/installation/server_tuning.html
- https://http2.pro/doc/Apache
- https://docs.nextcloud.com/server/21/admin_manual/configuration_server/caching_configuration.html#id2
- https://www.digitalocean.com/community/tutorials/how-to-protect-an-apache-server-with-fail2ban-on-ubuntu-14-04
- https://docs.nextcloud.com/server/latest/admin_manual/installation/harden_server.html#setup-fail2ban
- https://geekflare.com/10-best-practices-to-secure-and-harden-your-apache-web-server/
- https://nextcloud.com/blog/setup-cron-or-systemd-timers-for-the-nextcloud-preview-generator/
- https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/background_jobs_configuration.html
Quest'opera è distribuita con Licenza Creative Commons Attribuzione - Condividi allo stesso modo 4.0 Internazionale Theme Moonwalk