Nextcloud

Creare uno spazio personale di archiviazione e condivisione personale

1- creare la scheda con Raspberry Pi Imager

2- La seguente guida funziona con il sistema operativo Raspberry Pi OS Lite (64-BIT)

3- prima di masterizzare la ISO cliccare sull’ingranaggio dell’applicazione per abilitare host, ssh, password e wifi

4- Avvio il Raspberry Pi con il sistema operativo con la configurazione personalizzata

5- Trova l’indirizzo IP assegnato dal tuo router con il comando

hostname -I

6 – E’ possibile recuperarlo anche dal tuo router entrando nella sua configurazione, tipicamente 192.168.1.1

7 – Il più delle volte l’indirizzo IP assegnato dal router non cambia ma per sicurezza è possibile rendere statico l’IP sul Raspberry Pi modificando il file /etc/dhcpcd.conf con il seguente comando

sudo nano /etc/dhcpcd.conf

8- Nota: per inserire i comandi o accedete direttamente al Raspberry Pi o potete scegliere due alternative:

a- se usate linux avendo abilitato ssh basta digitare

ssh pi@192.168.1.007 (dove 192.168.1.77 va cambiato con IP  assegnato dal router) (anche "pi" va modificato con l'hostname scelto in fase di configurazione della scheda)

b- se usate Windows installate Putty un client ssh e collegatevi all’indirizzo IP assegnato dal router

Una volta connessi al terminale del Raspberry Pi eseguite i classici comandi di aggiornamento della distribuzione

sudo apt-get update
sudo apt-get upgrade

9 – Rendiamo statico l’indirizzo IP del nostro Raspberry Pi

sudo nano /etc/dhcpcd.conf

cerca la sezione # Example static IP configuration e modificala come segue:

Con l’editor nano usare ctrl “O” per salvare il file modificato e ctrl “X” per uscire

interface eth0
static ip_address=192.168.1.007/24
# static ip6_address=gh33:12t4:klle:a12e::ff/64
static routers=192.168.1.1
static domain_name_servers=192.168.1.1 9.9.9.9 9.9.9.10

Nel tuo file dovrai: a) mettere il vero IP del tuo Raspberry, seguito da /24; b) lasciare # davanti a static ip6_address; c) inserire il corretto IP del router; d) alla quarta riga inserire di nuovo l’IP del router seguito da uno spazio e, se vuoi, dai DNS di Bind 9 che ho messo qui (9.9.9.9 e 9.9.9.10) o di altro gestore di DNS

Riavvia il Raspberry e ricollegati al terminale

sudo reboot

Installare Nextcloud sul Raspberry Pi

Esistono numerose possibilità, quella indicata di seguito permette il controllo di ogni passaggio del deployment di NextCloud

Prima di installare NextCloud bisogna installare i seguenti pacchetti sul sistema: Apache, MySQL (MariaDB) and PHP e alcuni moduli PHP.
Digita i seguenti comandi per installare tutto

sudo apt install apache2 mariadb-server libapache2-mod-php
sudo apt install php-gd php-json php-mysql php-curl php-mbstring php-intl php-imagick php-xml php-zip

1- scaricare e installare NextCloud

controllare sul sito l’ultima edizione disponibile

https://download.nextcloud.com/server/releases/

Mentre scrivo la guida l’ultima versione è la 25.0.2.zip

Spostarsi nella directory web di Apache

cd /var/www/html

e scaricare NextCloud

sudo wget https://download.nextcloud.com/server/releases/nextcloud-25.0.2.zip

scompattare l’archivio

sudo unzip nextcloud-25.0.2.zip

se nella distro in uso non è presente il programma unzip installarlo come segue:

sudo apt install unzip

Adesso bisogna cambiare i permessi della cartella per consentire ad Apache di accedervi

sudo chmod 750 nextcloud -R
sudo chown www-data:www-data nextcloud -R

Configurare il Database MySQL

Connettersi al database come root

sudo mysql

creare un nuovo utente

CREATE USER 'nextcloud' IDENTIFIED BY 'password';

sostituire ‘password’ con una più efficace (almeno 12 caratteri alfanumerici)

creare il nuovo database

CREATE DATABASE nextcloud;

assegnare i permessi del nuovo utente sul database

GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextcloud'@localhost IDENTIFIED BY 'password';

sostituire il campo password con quella impostata precedentemente

salvare ed uscire

FLUSH PRIVILEGES;
quit

Prima di aprire il browser riavviamo il Raspberry Pi con sudo reboot

Adesso siamo pronti ad eseguire la procedura guidata attraverso un browser

Aprire un browser e nella barra degli indirizzi digitare http://IP/nexcloud

es. http://192.168.1.99/nextcloud

L’indirizzo IP da digitare è quello assegnato dal router

Basta inserire le credenziali create nel database

– User: nextcloud
– Password: “password” (la tua password)
– Database: nextcloud
– Host: localhost

Cliccare sul tasto installa

Post installazione

Una volta installato NextCloud andando nella sezione amministrazione Nextcloud farà un controllo della configurazione e ti suggerirà alcuni miglioramenti

  • Il limite di memoria di PHP è inferiore al valore consigliato di 512MB

digita:

sudo find / -name php.ini

per trovare il file di configurazione di php

apri con l’editor il file trovato:

sudo nano /etc/php/7.4/apache2/php.ini

sostituire la versione con la versione trovata con il comando find

vai alla riga memory_limit 

con l’editor nano basta premere ctrl ‘W’ e scrivere memory_limit

sostituire il valore di default (128M) con 1536M (considerando che Raspberry Pi abbia 2 GB dei memoria). In linea di massima 3/4 di memoria del totale della RAM possiamo dedicarla a NextCloud, il resto al Raspberry.

Per aumentare la velocità di trasferimento durante la sincronizzazione modifichiamo anche questi tre valori:

post_max_size=25G

upload_max_filesize=25G (considerando anche il caricamento di grossi file da memorizzare, per esempio foto)

aprire con l’editor il file di configurazione di NexCloud

sudo nano /var/www/html/nextcloud/config/config.php

aggiungere la seguente riga prima della chiusura del file

'chunkSize' => '5120MB',

riavviare Apache

sudo systemctl restart apache2
  • PHP configuration option output_buffering must be disabled

aprire con l’editor il file php.ini nella versione trovata con il comando find

sudo nano /etc/php/7.4/apache2/php.ini (sostituisci "7.4" col numero corretto);

cercare la riga riga output_buffering = 4096 con ctrl’W’ e sostituire con 0 (zero)

riavviare Apache

sudo systemctl restart apache2

Accesso remoto

Per accedere al nostro server dal web occorre configurare un servizio di DNS dinamico tipo NoIP e configurare alcune porte sul proprio router

Con un account gratuito è possibile creare 3 hostname

Scegliere un hostname, selezionare un dominio e inserire IPv4, il vostro indirizzo IP pubblico (di solito preso in automatico e trovato su WhatsMyIP)

Una volta ottenute le credenziali DDNS apri il browser, digita l’IP del router e accedi al pannello di amministrazione

esempio di configurazione di un router Vodafone

Nella sezione DDNS inserisci le credenziali dell’account no-ip

in associazione porte aprite la porta 443 sia in TCP che in UDP

in dispositivo scegliere il proprio Raspberry Pi

Se si prova ora ad accedere al proprio dominio

xxxxxxx.hopto.org/nextcloud

si riceve il seguente messaggio

occorre quindi modificare l’impostazione “trusted_domains” nel file config.php inserindo il proprio dominio creato su NoIp

Effettua queste due modifiche:

  1. aprire il file di configurazione generale di Apache
sudo nano /etc/apache2/apache2.conf

Alla fine del file aggiungere

ServerName xxxxx.hopto.org (l'hostname creato su NoIp)

Salvare ed uscire ctrl ‘o’ ctrl ‘x’

Attivare il nuovo dominio in Apache

sudo a2ensite
sudo systemctl reload apache2

Segnalare il nuovo dominio a Nextcloud, aprendo il file /var/www/html/nextcloud/config/config.php

sudo nano /var/www/html/nextcloud/config/config.php

Aggiungere dopo o (zero) i punti 1 e 2 con il proprio hostname

'trusted_domains' => 
  array (
    0 => '192.168.1.007',
    1 => 'xyz.ilmioddns.com',
  ),

Salvare ed uscire ctrl ‘o’ ctrl ‘x’

Creare nel server web Apache un file corrispondente all’indirizzo “esterno” di Nextcloud

sudo nano /etc/apache2/sites-enabled/default-ssl.conf

Inserire queste modifiche

(N.B. Le modifiche saranno effettive solo dopo aver installato il certificato SSL)

DocumentRoot /var/www/html/nextcloud
     ServerName xxxx.hopto.org
     ErrorLog /var/log/apache2/nextcloud-error.log
     CustomLog /var/log/apache2/nextcloud-access.log combined

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

    <Directory /var/www/html/nextcloud>
        Options +FollowSymlinks
        AllowOverride All
        Require all granted
        SetEnv HOME /var/www/html/nextcloud
        SetEnv HTTP_HOME /var/www/html/nextcloud
        <IfModule mod_dav.c>
          Dav off
        </IfModule>
    </Directory>

Se il sistema riporta ancora il seguente errore:

The “Strict-Transport-Security” HTTP header is not set to at least “15552000” seconds. For enhanced security, it is recommended to enable HSTS as described in the security tips ↗.

modificare il file come segue:

Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains; preload"

ed eseguire dopo

sudo a2enmod headers
sudo systemctl start apache2

Installare il certificato SSL

Questa procedura spiega come installare il certificato gratuito SSL “Let’s Encrypt”

eseguire il comando

sudo apt install -y certbot python3-certbot-apache

e poi

sudo certbot --apache

Lo script creerà i certificati, chiedendovi email e hostname, poi inserirà i certificati in /etc/apache2/sites-enabled/default-ssl.conf (o file simile)

I certificato hanno una scadenza e bisogna al termine rinnovarli con il comando

sudo certbot renew

si può automatizzare la cosa con cron

Per vedere se tutto funziona basta collegarsi al proprio hostname in un browser digitando solo quello e non /nextcloud

esempio: xxxx.hopto.org (hostname di NoIP)

Per controllare il grado di sicurezza del proprio server Nextcloud andare su: Nextcloud Security Scan e inserire il proprio hostname

Per far puntare direttamente al dominio creato occorre modificare i due file presenti in sites-enabled (/etc/apache2/sites-enabled) con “sudo nano 000-default.conf” e sudo nano 000-default-le-ssl.conf modificando DocumentRoot sia sulla porta 80 che 443

modificare DocumentRoot /var/www/html

in

DocumentRoot /var/www/html/nextcloud

Aggiungere “storage”

Per aggiungere un harddisk esterno/sd card aggiuntiva potete seguire questo tutorial #2 Nextcloud