In questo 3° articolo ci concentreremo sull’installazione di un ambiente LAMP per far girare Nextcloud e all’installazione vera e propria di Nextcloud. Se vi siete persi gli altri articoli vi consiglio di leggere prima quelli e poi di tornare qui.
La prima cosa da fare è configurare il dominio. Se volete acquistarne uno il mio consiglio è di utilizzare il servizio di google domains, tra l’altro nel prossimo articolo verrà trattato proprio come configurare adeguatamente il dominio dinamico. Intanto però, se volete utilizzare un vostro dominio, è importante che lo acquistiate già e lo configuriate per puntare al vostro NAS. Infatti configureremo il server web apache2 per accettare esclusivamente connessioni cifrate e quindi useremo solo il protocollo https.
Inoltre dovrete al momento aprire almeno la porta 80 e la porta 443 del vostro router, altrimenti non sarete accessibili dal mondo esterno.
Installazione di MariaDB
Per prima cosa pensiamo a installare il database. Utilizzeremo MariaDB pertanto iniziamo l’installazione digitando da root
# apt-get install mariadb-client mariadb-server
Finita l’installazione avviamo lo script di messa in sicurezza del database lanciano
# mysql_secure_installation
Io personalmente ho, per pigrizia, nel mio server personale, non attivato la password di root permettendo l’autenticazione come utenza root del database solamente dall’utente root di sistema. In realtà questa non è affatto una best practice e quindi impostate la password di root!
Configurazione utenze
A questo punto siamo pronti per configurare l’utenza per nextcloud. Effettuiamo l’accesso da root in mysql con
# mysql -p
o nel mio caso (che sono stato una brutta persona e non ho configurato la password di root) solamente con # mysql
A questo punto dobbiamo creare il database che chiameremo d_nextcloud
CREATE DATABASE 'd_nextcloud';
creiamo ora l’utente u_nextcloud con la password c0Mpl3xpwD! che vi consiglio di generare con un generatore casuale di password.CREATE USER 'u_nextcloud'@localhost IDENTIFIED BY 'c0Mpl3xpwD!';
Garantiamo tutti i privilegi all’utente u_nextcloud
al proprio database associato d_nextcloud
GRANT ALL PRIVILEGES ON 'd_nextcloud'.* TO 'u_nextcloud'@localhost;
Aggiorniamo ora i privilegi (altrimenti è come se non avessimo mai creato alcun database).
FLUSH PRIVILEGES;
Usciamo dalla console digitando
\q
Ottimizzazione database
Inoltre per utilizzare al meglio MariaDB con nextcloud è opportuno modificare alcuni parametri del database. Editiamo il file /etc/mysql/my.cnf
e sotto a
[client-server]
# Import all .cnf files from configuration directory
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mariadb.conf.d/
aggiungete
[server]
skip_name_resolve = 1
innodb_buffer_pool_size = 256M
innodb_buffer_pool_instances = 1
innodb_flush_log_at_trx_commit = 2
innodb_log_file_size = 32M
innodb_log_buffer_size = 32M
innodb_max_dirty_pages_pct = 90
#query_cache_type = 0
query_cache_type = 0
query_cache_limit = 4M
query_cache_min_res_unit = 2k
#query_cache_size = 64M
query_cache_size = 0
tmp_table_size= 64M
max_heap_table_size= 64M
performance_schema = ON
[mysqld]
transaction_isolation = READ-COMMITTED
binlog_format = ROW
La configurazione di MariaDB è conclusa, potete riavviare il server con
service mysql restart
Installazione del web-server
Come web-server ho scelto apache2. Per installare tutte le componenti necessarie al corretto utilizzo di Nextcloud digitate
# apt-get install certbot python3-certbot-apache apache2 libapache2-mod-php php-curl php-dom php-gd php-xml php-json php-mbstring php-zip php-mysql php-intl php-bcmath php-gmp php-imagick imagemagick needrestart
In seguito dobbiamo abilitare 2 mod di apache2 con
a2enmod rewrite
a2enmod headers
Modifiche minori
Apache
Sarà necessario ora effettuare alcune piccole modifiche ai file di configurazione
Aprite il file /etc/apache2/conf-available/security.conf
modificare ServerSignature
da On
a Off
;
modificare ServerTokens
da Full
a Prod
;
modificare TraceEnable
da On
a Off
.
Php
Aprite il file /etc/php/7.3/apache2/php.ini
e
Modificate opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.max_wasted_percentage=5
Installazione Nextcloud
È giunto ora il momento (finalmente) di installare Nextcloud!
Preparazione directory
Per prima cosa creiamo la nuova directory di installazione di Nextcloud con un
mkdir /var/www/
Posizioniamoci in quella directory con cd e scarichiamo con wget il file zip contenente Nextcloud reperibile alla pagina di download ufficiale.
A questo punto, ottenuto il file spacchettiamolo con unzip dando
unzip nomearchivio.zip
Se il comando non è presente installatelo con apt-get.
Vi troverete ora la directory nextcloud appena estratta. Fornitele i giusti permessi con
chown -R www-data:www-data nextcloud
Creiamo intanto ora anche la directory dati nel disco esterno per nextcloud con
mkdir /mnt/data/nextcloud
e diamo sempre i giusti permessi con
chown -R www-data:www-data /mnt/data/nextcloud
Configurazione virtualhost
A questo punto dobbiamo creare i virtualhost per apache2
Posizioniamoci in /etc/apache2/sites-available
e creiamo un file chiamato
rediricter.conf
contenente
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# Rewite
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} =www.tuodominio.org
RewriteRule ^ https://tuodominio.org%{REQUEST_URI} [END,NE,R=permanent]
RewriteCond %{SERVER_NAME} =tuodominio.org
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
RewriteCond %{HTTP_HOST} =cloud.tuodominio.org
RewriteRule ^ https://tuodominio.org%{REQUEST_URI} [END,NE,R=permanent]
</IfModule>
</VirtualHost>
Lo scopo di questa configurazione è reindirizzare tutto il traffico di nostro interesse da http verso il protocollo https. Inoltre reindirizzerà anche il traffico proveniente dal dominio di terzo livello www e cloud verso il dominio di secondo livello. Inoltre sarà anche il dominio di default nel caso di richieste provenienti da domini non configurati.
Creiamo ora il file rediricter-ssl.conf
che si occuperà di redirigere il traffico dai sottodomini non desiderati per il protocollo https.
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerName www.tuodominio.org
ServerAlias cloud.tuodominio.org
ServerAdmin webmaster@localhost
#LogLevel info ssl:warn
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
#SSLEngine on
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/tuodominio.org/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/tuodominio.org/privkey.pem
Redirect "/index.html" "https://tuodominio.org/"
</VirtualHost>
</IfModule>
Infine creiamo nextcloud.conf
che è il file di configurazione vero e proprio per Nextcloud.
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerAdmin webmaster@localhost
#LogLevel info ssl:warn
DocumentRoot /var/www/nextcloud
<Directory /var/www/nextcloud>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
#SSLEngine on
ServerName tuodominio.org
Include /etc/letsencrypt/options-ssl-apache.conf
# ServerAlias www.tuodominio.org
# ServerAlias cloud.tuodominio.org
SSLCertificateFile /etc/letsencrypt/live/tuodominio.org/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/tuodominio.org/privkey.pem
#Nextcloud
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.tuodominio.org [NC]
RewriteRule ^(.*)$ https://tuodominio.org/$1 [L,R=301]
RewriteCond %{HTTP_HOST} ^cloud.tuodominio.org [NC]
RewriteRule ^(.*)$ https://tuodominio.org/$1 [L,R=301]
</IfModule>
<IfModule mod_php7.c>
php_value mbstring.func_overload 0
php_value default_charset 'UTF-8'
php_value output_buffering 0
php_value memory_limit 512M
php_value post_max_size 1G
php_value upload_max_filesize 1G
</IfModule>
</VirtualHost>
</IfModule>
Questi virtualhost sono configurati per accettare la connessione su tuodominio.org e reindirizzare su tuodominio.org tutte le connessioni provenienti anche da altri sottodomini. Se non avete creato sottodomini potete anche cancellare quella parte di reindirizzamento. Comunque lasciate il reindirizzamento per www perché necessario.
Ovviamente dovete modificare tuodominio.org con il nome del vostro dominio.
Ora i virtualhost sono disabilitati, dovrete abilitarli con
a2ensite rediricter.conf rediricter-ssl.conf nextcloud.conf
Al contempo disabilitate i siti di default con
a2dissite 000-default.conf default-ssl.conf
Richiesta dei certificati
Ovviamente questo virtualhost per il momento non funzionerà, infatti prevede sia abilitato ssl. Pertanto è giunto il momento di richiedere i certificati ssl con certbot!
certbot certonly --standalone --pre-hook "service apache2 stop" --post-hook "service apache2 start"
Seguite le istruzioni a schermo. Per funzionare ovviamente il dominio deve essere correttamente configurato e la porta 80 deve essere correttamente raggiungibile. Configurate ora per tutti i domini che vi interessano. Inserite per primo il dominio di secondolivello (nell’esempio tuodominio.org) e poi tutti i domini di terzo livello (come www.tuodominio.org). È necessario che inseriate tutti i sottodomini nella stessa richiesta in modo da avere un certificato unico per tutti.
Certbot provvederà anche autonomamente all’auto rinnovo del certificato e al riavvio di apache2.
Installazione di Nextcloud
Fatto ciò potrete ora collegarvi al vostro dominio e vi troverete la pagina di Nextcloud pronta ad accettare una nuova installazione.
Assicuratevi di inserire correttamente il nome del database, della password e come Data folder selezionate la directory che abbiamo creato appositamente, cioè /mnt/data/nextcloud
.
Bene, abbiamo finito! Avrete ora il vostro servizio di Cloud auto hostato personale. Non vi resta che ultimare le vostre personalizzazioni, installando applicazioni aggiuntive, come l’ottima stuite Collabora Online che altro non è che LibreOffice utilizzabile da browser (come google documents).
Inoltre è conveniente che configuriate cron per far eseguire i lavori periodici in maniera indipendente dalla navigazione sul browser. Per fare questo dovrete impostare dalle impostazioni e poi impostazioni di base di NextCloud di eseguire i lavori con cron
e poi digitare da terminale
sudo -u www-data crontab -e
e impostare
*/5 * * * * php -f /var/www/nextcloud/cron.php --define apc.enable_cli=1
In questo modo farete eseguire ogni 5 minuti i task automatici.
Non dimenticate di installare sui vostri dispositivi i client di Nextcloud! Grazie a questi programmi potrete attivare la sincronizzazione automatica di tutti i vostri dispositivi (mobile e desktop) e visualizzare da browser (ed eventualmente ripristinare) le versioni dei file.
Abbiamo praticamente finito, nei prossimi articoli vedremo come configurare al meglio il dominio dinamico, il server di posta e l’UPS per ricevere automaticamente le notifiche in caso di intervento ed infine un sistema di backup automatico!
Considernado che è esposto all’esterno, non converrebbe criptare le partizioni?
In caso di attacco ransomware, il backup è al sicuro?
Mi sono accorto solo ora che non ti ho mai risposto 🙁
Comunque non ha senso crittografare le partizioni per il fatto che sia esposto all’esterno. Ha senso farlo solo se tempo possano fisicamente rubarmi i dischi. Tanto il sistema per funzionare deve avere accesso ai dati e quindi un eventuale “attacco” neanche si accorgerebbe che le partizioni sono state crittografate.
Per quanto riguarda i ransomware dipende chi viene colpito. I computer della rete non è un problema perché nextcloud “tiene” copia delle versioni, anzi c’è un plugin anti ransomware che rifiuta automaticamente gli upload di file crittografati da ransomware noti. In tal caso in ogni caso ci sarebbero versioni e backup.
Nel caso invece che il ransomware si installi sul NAS è tutto collegato e quindi se avesse privilegi di root sarebbe un problema. Diciamo che però è difficile che accada non installando software oltre ai repo ufficiali e non eseguendo script strani. In quel caso entra in soccorso il backup esterno USB.
Grazie Marcomg, tante informazioni preziose, come sempre.
Una domanda banale: avere un dominio è indispensabile per avere l’https?
Ho testato Nextcloud su una VM senza problemi però mi sono limitato ad usare l’http.
Inoltre, per semplificare l’installazione e l’aggiornamento della piattaforma, può aver senso utilizzare docker? Nel LUG che frequento lo stanno utilizzando sul nostro VPS sia per Nextcloud sia per altri software (Jitsi meet) però personalmente non ho esperienza a riguardo per capire vantaggi/svantaggi di una soluzione del genere su un NAS.
Grazie, sei sempre super gentile ☺️♥️
Allora dipende. Avere un dominio è obbligatorio per avere un certificato SSL firmato da let’s encrypt. Se il certificato è autofirmato non è necessario (ma se lo usano più persone o lo usi da smartphone o altri computer è bene che non sia autofirmato).
Altre certification authority potrebbero accettare un certificato per l’IP, ma l’IP deve essere statico e il certificato costa soldoni (e comunque è una attività non standard e poco sensata). In ogni caso se vuoi accedere dall’esterno è bene configurarlo un dominio con DNS dinamico (altrimenti se il router cambia IP sei tagliato fuori fino che non scopri quale sia il nuovo IP).
Il dominio su Google domains costa comunque solo 12 euro/anno, ma se non vuoi spendere e ti accontenti di un dominio di 3° livello puoi usare altre soluzioni come duckdns.
Per il resto io su un NAS non installerei mai docker, anche perché per aggiornare nextcloud basta davvero lanciare 2 comandi da shell. Poi se non ospiti altri software allora non trai il vantaggio dell’isolamento tra i vari applicativi.
Comunque grossi svantaggi non ce ne sono quindi se ti piace docker puoi usare docker ☺️
Grazie del rapido riscontro.
Il mio IP wan è pubblico e statico, per questo mi chiedevo se fosse necessario il dominio ma, se la complicazione è il certificato, non è problema a spendere 12€/anno (conoscevo già let’s encrypt).
Docker sul sarebbe una scusa tanto per farci pratica visto che lo conosco solo di sfuggita. 😉
Un’altra alternativa “pronta all’uso” per ridurre all’osso l’installazione potrebbe essere NextcloudPi, un sistema installabile anche su Debian, che nonostante il nome non è vincolato al solo Raspberry e rende disponibili anche delle funzioni aggiuntive di backup, se non ricordo male.
Comunque per ora le mie sono solo lucubrazioni che spero di concretizzare almeno entro l’anno se si sblocca la fornitura di hardware, NAS e affini, a causa della pandemia.
Se hai un ip statico ti serve comunque un dominio per avere il certificato firmato (la firma si fa sul dominio). Per curiosità, che provider hai?
Comunque se vuoi divertirti potresti chiedere al provider di configurarti il reverse dns così da poter mettere su un server di posta con i fiocchi 😉
Comunque NextcloudPi non lo conosco. Quello che non mi piace di sistemi automatici è la manutenibilità nel caso in cui non so riesca a capire come abbiamo configurato il tutto.
Per le funzioni di backup ho in programma un altro articolo che sarà anche molto breve perché si utilizzerà rsnapshot 😉
Ho Fastweb ma per la posta alzo bandiera bianca, altrimenti diventa un secondo lavoro! 😀
Ti do ragione sui troppi automatismi ma se funzionano bene ti risparmiano un bel po di tempo, soprattutto se, di contro, rischi di non farne di nulla a causa del poco tempo. 🙁
No quello è vero, ma dipende. Alla fine seguendo la guida (installazione esclusa) in 2 ore massimo te la cavi (ma proprio ad essere pessimisti). Sai quello che hai fatto e metterci le mani sarà sempre molto veloce.
Visto che a un sistema del genere affidi tutti i tuoi dati a me piace conoscere il più possibile di ogni parte.