Guida Crea il tuo server cloud personale con Raspberry e OwnCloud

0xbro

Super Moderatore
24 Febbraio 2017
4,465
179
3,767
1,825
Turn-your-Raspberry-PI-3-Into-a-Personal-Cloud-Storage-2017.png

Sei stufo di GDrive, OneDrive, DropBox, dei loro costi annuali o dei pochi giga a disposizione per gli abbonamenti gratuiti?
Bene, allora questa guida è ciò che fa per te!

Oggi creeremo il nostro server cloud privato direttamente sul nostro raspberry, in modo da avere uno spazio di archiviazione praticamente illimitato e senza restrizioni!
Per realizzare il nostro progetto ci affideremo a OwnCloud, un'applicazione open source che permette la creazione di uno spazio cloud completamente privato, raggiungibile da ovunque, gestibile da interfaccia web, client app e smartphone!

Ci sono alternative a OwnCloud?
Certo! Il web è un mondo vasto e per ogni programma esiste sempre almeno una sua valida alternativa.
I principali "concorrenti" di OwnCloud sono NextCloud (fratellino di OwnCloud, nasce come suo fork) e Seafile.


Esiste un programma migliore di un altro?

No, è tutta questione di comodità e gusto personale. Sono tutti e tre ottimi prodotti, con funzionalità simili e punti di forza unici. Sta a voi decidere quale scegliere, in base alle vostre esigenze e al vostro gusto personale.
Ovviamente in questa guida installeremo OwnCloud, per il semplice fatto che è la scelta che ho fatto io un paio di anni fa :)


[SOTTOTITOLO]Occorrente[/SOTTOTITOLO]
- Raspberry (Pi 2 B or higher)
- Hard Disk esterno (consigliato SSD o HDD di grandi dimensioni)
- Cavo Ethernet (consigliato)
- Micro SD (consigliata una classe 10 da 16+ GB)
- Case protettivo (consigliato)
- Dissipatori (consigliati)
- Alimentatore tramite micro USB
- Indirizzo IP Locale statico
- Indirizzo IP Pubblico statico (o in alternativa un DDNS)

Step 1

Impostare un IP statico al proprio Raspberry


Per impostare un indirizzo IP statico al vostro raspberry dovrete necessariamente accedere al vostro pannello di controllo del router (solitamente all'indirizzo IP 192.168.1.1 oppure 192.168.1.254), andare nella sezione "Dispositivi" e assegnare al MAC address del vostro Raspberry (oppure al rispettivo hostname) l'indirizzo IP di vostra scelta.
In questo modo, anche se il router si dovesse spegnere o il raspberry si riavviasse, non perdereste il vostro IP e il vostro instradamento verso il server.
Attenzione: ogni provider dispone di un pannello differente per la gestione dei dispositivi nella rete. Fate affidamento alla documentazione ufficiale fornita dal vostro provider (sia per l'indirizzo IP del router, sia per la gestione dei device)

Step 2

Richiedere un IP statico pubblico o impostare un DDNS


Siccome un server cloud deve essere reperibile 24/7h, avrete bisogno di un IP pubblico statico che non cambia mai, o per lo meno di un DDNS (servizio che permette di registrare un dominio statico che punterà al vostro IP dinamico).
In genere gli ISP forniscono IP dinamici (cambiano ogni 24h circa), o in alternativa IP statici ma non pubblici (vedi il NAT della rete Fastweb). Questa disposizione ci limita nel contattare il nostro server, per cui è necessario se possibile richiedere un IP pubblico statico o, in alternativa, creare un DDNS e configurarlo appositamente sul proprio router (tra i servizi DDNS più utilizzati c'è No-Ip).
Nota: Per configurare il DDNS vedere l'apposita documentazione online in riferimento al proprio provider.

Step 3

Effettuare il port forwarding


Per fare in modo che il nostro server cloud sia correttamente raggiungibile e funzionante da ogni parte del mondo e non solo in locale, è necessario "abbinare" tra loro una porta esterna (a cui ci noi ci collegheremo) e una porta interna (quella aperta sul raspberry per farlo comunicare con la rete).
In questo modo noi ci collegheremo alla porta esterna aperta sul router, questo reindirizzerà la connessione verso la porta interna del raspberry, e permetterà così la comunicazione anche dall'esterno.
Nota: Per eseguire il port forwarding fate riferimento alla documentazione fornita dal vostro provider. Il port forwarding si configura nel router, nell'apposita sezione prevista dal pannello di controllo.
Nota2: E' caldamente e largamente consigliato fare uso di numeri di porta esterna molto alti, in modo che i bot che scansionano quotidianamente la rete non identifichino porte aperte potenzialmente vulnerabili sul vostro router.

Step 4

Installare ownCloud


Bene, ora che abbiamo preparato tutto quanto quello che ci serviva possiamo passare all'installazione di ownCloud!
Colleghiamoci al nostro raspberry e installiamo (se non sono presenti) Apache2, PHP7.3, mariadb e tutte le varie dipendenze:
Bash:
sudo apt update
sudo apt upgrade -y
sudo apt install -y apache2 mariadb-server libapache2-mod-php7.3 php7.3-gd php7.3-json php7.3-mysql php7.3-curl php7.3-intl php7.3-mcrypt php-imagick php7.3-zip php7.3-xml php7.3-mbstring
Mentre aspettiamo che si installi tutto andiamo sul sito ufficiale e scarichiamo l'ultima versione dell'applicazione, nel nostro caso in formato tarball (.tar) poichè (quasi sicuramente) staremo usando Raspbian come OS.

Una volta finito di scaricare tutto, avviamo il web server apache e impostiamo che venga eseguito di default all'accensione del Pi
Bash:
sudo systemctl start apache2
sudo systemctl enable apache2
inoltre scompattiamo l'archivio tar di ownCloud, assegnamogli i giusti permessi e spostiamolo all'interno del nostro web server
Bash:
cd ~/Download
tar -xvf owncloud-*
sudo chown -R www-data:www-data owncloud
mv owncloud /var/www/html/

Step 5

Configurare Apache2


Per fare in modo che il portale della web app sia raggiungibile e funzioni correttamente, modifichiamo/creiamo un file di conf per ownCloud:
Bash:
sudo nano /etc/apache2/sites-available/owncloud.conf
e inseriamoci all'interno la seguente configurazione:
Configurazione Apache:
Alias /owncloud "/var/www/html/owncloud/"
DocumentRoot /var/www/html/owncloud

<Directory /var/www/html/owncloud/>
Options +FollowSymlinks
AllowOverride All

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

SetEnv HOME /var/www/html/owncloud
SetEnv HTTP_HOME /var/www/html/owncloud

</Directory>
e creiamo un link simbolico a questo file all'interno dei siti abilitati di Apache
Bash:
sudo ln -s /etc/apache2/sites-available/owncloud.conf /etc/apache2/sites-enabled/owncloud.conf

Step 6

Creare l'utenza MySQL


Siccome l'applicazione per funzionare ha bisogno di lavorare con il DB, avremo bisogno di creare un'apposita utenza su MySQL.
Logghiamoci quindi al suo interno e mettiamoci al lavoro!
Bash:
sudo mysql -u root -p
MariaDB [(none)]> create database owncloud;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> create user owncloud@localhost identified by 'Stup1dP4ssw0rd';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> grant all privileges on owncloud.* to owncloud@localhost identified by 'Stup1dP4ssw0rd';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> exit;
Bye

Step 7

Configurare il disco esterno


Siccome abbiamo bisogno di molto spazio d'archiviazione (e il raspberry non ce lo permette), abbiamo bisogno di configurare e montare un HD esterno (formattato in NTFS).
Colleghiamolo al Pi e digitiamo nel terminale
Bash:
sudo apt install ntfs-3g -y     # Sono i pacchetti necessari per lavorare con ntfs
sudo mkdir /media/ownclouddrive # Creiamo un punto di mount per l'HD
sudo groupadd www-data            # Creiamo il gruppo www-data e aggiungiamoci l'utente www-data
sudo usermod -a -G www-data www-data
sudo chown -R www-data:www-data /media/ownclouddrive     # Rendiamo www-data proprietario
sudo chmod -R 775 /media/ownclouddrive                    # Assegnamo i permessi a www-data
Inoltre per rendere il mount consistente e fare in modo che l'HD venga riconosciuto anche se collegato a un'altra USB, estraiamo gid, uuid e configuriamo appositamente fstab
Bash:
id -g www-data
id -u www-data
ls -l /dev/disk/by-uuid
sudo echo "UUID=$(ls -l /dev/disk/by-uuid |grep sda1 |awk '{print $9}') /media/ownclouddrive auto nofail,uid=$(id -u www-data),gid=$(id -g www-data),umask=0027,dmask=0027,noatime 0 0" >> /etc/fstab
e riavviamo il raspberry con sudo reboot. Al riavvio troveremo il nostro HD montato nel path /media/ownclouddrive

Step 8

Configurare OwnCloud via browser


Siamo quasi alla fine, tenete duro!
Ora dobbiamo collegarci all'indirizzo IP del nostro raspberry (oppure in localhost se stiamo lavorando direttamente sul Pi) e concludere l'installazione.
Colleghiamoci all'URL http://<IP-raspberry>/owncloud e inseriamo le credenziali che desideriamo usare per loggarci come admin, nel campo "Data folder" dovremo inserire il path del device che vogliamo usare come HD esterno, nel nostro caso /media/ownclouddrive mentre su "Configure the database" dovremo inserire il nome utente, password, nome del db e host creati per l'installazione (vedi step 6).
Ultimo edit: entriamo dentro /var/www/html/owncloud/config/config.php e aggiungiamo il nostro IP pubblico e privato all'interno dei trusted_domains, in modo da rendere l'app accessibile sia da rete interna che esterna.
Il risultato dopo le modifiche sarà qualcosa tipo
PHP:
<?php                                                                                       
$CONFIG = array (                                                                           
  'instanceid' => 'qwertyuiop',                                                           
  'passwordsalt' => 'qwertyasdfghzxcvbnqwertyasdfghzxcvbn',                                       
  'secret' => 'qwertyasdfghzxcvbnqwertyasdfghzxcvbnqweghzxcvbn',                           
  'trusted_domains' =>                                                                       
  array (                                                                                   
    0 => '192.168.1.99',                                                                     
    1 => '56.67.78.89',                                                                     
  ),                                                                                         
  'datadirectory' => '/media/ownclouddrive',                                           
  'overwrite.cli.url' => 'http://56.67.78.89/owncloud'
  ...
  ?>

Finito! Abbiamo creato il nostro server cloud!
Ora potremo usare l'interfaccia web per salvare i nostri file e scaricarli successivamente, ma potremo anche installare il client desktop per sincronizzare le cartelle in automatico, oppure usare la mobile app sul nostro cellulare!
Da qui in poi possiamo solo applicare migliorie al nostro server!

Attenzione: I file copiati direttamente nella cartella del HD tramite CLI, senza passare dalla GUI, NON SARANNO PRESENTI nell'applicazione. Per fare in modo che i file siano visibili su tutti i device e tramite il pannello web è necessario che siano sincronizzati tramite canali ufficiali (quindi le varie app di ownCloud).

Step futuri

Configurare SSL/TLS


Attenzione!
Attualmente le vostre credenziali viaggiano in chiaro, poichè SSL/TLS non è abilitato e stiamo usando la porta 80 che di default trasmette senza crittografare nulla! Considerate di attivare SSL/TLS sul vostro server per aumentare la vostra sicurezza e la sicurezza dei vostri dati!

Download
 
nella sezione "Dispositivi" e assegnare al MAC address del vostro Raspberry (oppure al rispettivo hostname) l'indirizzo IP di vostra scelta.
In questo modo, anche se il router si dovesse spegnere o il raspberry si riavviasse, non perdereste il vostro IP e il vostro instradamento vero il server.
Correggi vero con verso
 
  • Mi piace
Reazioni: 0xbro
Ultima modifica:
Ciao, io pensavo di installare nextcloud alla fine è un suo fork e concettualmente sono molto simili.

A livello di sicurezza cos'è meglio?
  1. VPN per accedere alla rete locale e fare tutto da li oppure
  2. Server nextcloud IP pubblico statico
  3. Server nextcloud con DDNS.
Guida fatta benissimo ma mancano delle cose scontate per gente esperta.
  • Aggiornamenti automatici del server e riavvi automatici
  • Disabilitiamo la password di root?
  • SSH abilitato o disabilitato? (Ed in caso rimandare alla guida su come è meglio configurarlo).
  • Certificato SSL o TLS?
Se configurato male può essere pericolosissimo, se fatto bene sicurissimo.
 
Ciao, io pensavo di installare nextcloud alla fine è un suo fork e concettualmente sono molto simili.

A livello di sicurezza cos'è meglio?
  1. VPN per accedere alla rete locale e fare tutto da li oppure
  2. Server nextcloud IP pubblico statico
  3. Server nextcloud con DDNS.
Guida fatta benissimo ma mancano delle cose scontate per gente esperta.
  • Aggiornamenti automatici del server e riavvi automatici
  • Disabilitiamo la password di root?
  • SSH abilitato o disabilitato? (Ed in caso rimandare alla guida su come è meglio configurarlo).
  • Certificato SSL o TLS?
Se configurato male può essere pericolosissimo, se fatto bene sicurissimo.
Allora, io attualmente ho esposto direttamente il servizio online tramite IP statico, ma in questi giorni ho intenzione di spostare il servizio in locale e permettere l'accesso solo tramite VPN, è meno rischioso ed eviti di attirare attenzioni indesiderate. Ti direi quindi di tirare su una VPN e di usare quella per accedere al servizio.

Aggiornamenti automatici del server e riavvi automatici
Aggiornamenti automatici non ne ha (o almeno non li ho mai visti). Quando un aggiornamento è disponibile compare un messaggio all'interno del pannello di controllo. In genere basta confermare l'aggiornamento e il servizio poi fa tutto da solo. Durante l'aggiornamento non si potrà interagire col sito ma al suo completamento esso torna online in autonomia.

Disabilitiamo la password di root?
Se non serve non si ha motivo di permettere l'accesso come root. In genere è sempre meglio loggare con i più bassi privilegi possibili e, se possibile, usando delle chiavi SSH anzichè la password. Se poi si ha una password robusta il problema non persiste, però per "best practice" considera l'utilizzo delle chiavi SSH per effettuare il login.

SSH abilitato o disabilitato?
Come detto sopra lo tengo abilitato, ma una porta non standard (non per "nasconderlo", anche perchè non serve, ma perchè fastweb vuole la porta 22 libera, perciò mi tocca usare altro). Consiglio poi l'utilizzo di chiavi SSH piuttosto che password classiche

Certificato SSL o TLS?
TLS, anche se in genere tutti i certificati vengono definiti SSL anche se in realtà sono TLS. Inoltre consiglio di seguire queste regole di hardening in modo da implementare i vari meccanismi di sicurezza indicati da OwnCloud (e immagino ogni altro prodotto abbia qualcosa di simile)
 
  • Geniale
Reazioni: morugaskorpio
Allora, io attualmente ho esposto direttamente il servizio online tramite IP statico, ma in questi giorni ho intenzione di spostare il servizio in locale e permettere l'accesso solo tramite VPN, è meno rischioso ed eviti di attirare attenzioni indesiderate. Ti direi quindi di tirare su una VPN e di usare quella per accedere al servizio.


Aggiornamenti automatici non ne ha (o almeno non li ho mai visti). Quando un aggiornamento è disponibile compare un messaggio all'interno del pannello di controllo. In genere basta confermare l'aggiornamento e il servizio poi fa tutto da solo. Durante l'aggiornamento non si potrà interagire col sito ma al suo completamento esso torna online in autonomia.


Se non serve non si ha motivo di permettere l'accesso come root. In genere è sempre meglio loggare con i più bassi privilegi possibili e, se possibile, usando delle chiavi SSH anzichè la password. Se poi si ha una password robusta il problema non persiste, però per "best practice" considera l'utilizzo delle chiavi SSH per effettuare il login.


Come detto sopra lo tengo abilitato, ma una porta non standard (non per "nasconderlo", anche perchè non serve, ma perchè fastweb vuole la porta 22 libera, perciò mi tocca usare altro). Consiglio poi l'utilizzo di chiavi SSH piuttosto che password classiche


TLS, anche se in genere tutti i certificati vengono definiti SSL anche se in realtà sono TLS. Inoltre consiglio di seguire queste regole di hardening in modo da implementare i vari meccanismi di sicurezza indicati da OwnCloud (e immagino ogni altro prodotto abbia qualcosa di simile)
In teoria gli aggiornamenti automatici si potrebbero fare con crontab no? Probabilmente molti useranno qualche distro linux.

Per quanto riguarda le VPN ho visto che wireguard è meglio di OpenVpn per il semplice motivo che hai prestazioni migliori, lascio l'ip dinamico e configuro con DDNS? Pensi che un raspberry riesca a gestire una VPN con una rete che ha anche un DVR? Il server VPN deve essere raggiungibile con ssh?


Ho pensato ad un progetto bello ma controverso chiamato ubuntu core che effettua aggiornamenti automatici, in pratica installi una volta e poi ti scordi di tutto.
In pratica in quel caso fa quello che dovrebbe fare un server nextcloud, ma è bloccato in tutti i sensi e puoi fare ben poco (è anche un pregio).
Non mi piace perchè permette solo di usare snap.
Messaggio unito automaticamente:

In teoria gli aggiornamenti automatici si potrebbero fare con crontab no? Probabilmente molti useranno qualche distro linux.

Per quanto riguarda le VPN ho visto che wireguard è meglio di OpenVpn per il semplice motivo che hai prestazioni migliori, lascio l'ip dinamico e configuro con DDNS? Pensi che un raspberry riesca a gestire una VPN con una rete che ha anche un DVR?Il raspberry che fa da server VPN potrebbe eseguire contemporaneamente pi-hole?


Ho pensato ad un progetto bello ma controverso chiamato ubuntu core che effettua aggiornamenti automatici, in pratica installi una volta e poi ti scordi di tutto.
In pratica in quel caso fa quello che dovrebbe fare un server nextcloud, ma è bloccato in tutti i sensi e puoi fare ben poco (è anche un pregio).
Non mi piace perchè permette solo di usare snap.
 
In teoria gli aggiornamenti automatici si potrebbero fare con crontab no? Probabilmente molti useranno qualche distro linux.
Potrebbe funzionare ma non ne sono troppo sicuro, alla fine cliccare su un bottone "Aggiorna" non è così scomodo, soprattutto perchè i Major Updates non sono rilasciati tanto spesso

Per quanto riguarda le VPN ho visto che wireguard è meglio di OpenVpn per il semplice motivo che hai prestazioni migliori, lascio l'ip dinamico e configuro con DDNS? Pensi che un raspberry riesca a gestire una VPN con una rete che ha anche un DVR?
Non lo conoscevo ma direi che sembra un buon prodotto per sostituire OpenVPN, sì lascia pure l'IP dinamico e usa un DDNS, non dovrebbe cambiare nulla.
Credo di sì, che possa reggere, ma non so dirti per certo. Il mio Rasp è abbastanza snello, come servizio di "peso" ha solo OwnCloud, però fa il suo. Non avrà prestazioni simili a un server VPS, ma non ho questa necessità, per cui a me sta bene così ahah

Il server VPN deve essere raggiungibile con ssh?
No, al momento io ho SSH esposto perchè devo ancora configurare la VPN, ma dopo che l'avrò fatto l'unico servizio esposto in rete sarà la VPN, tutto il resto, SSH compreso, sarà limitato alla rete privata
 
  • Mi piace
Reazioni: morugaskorpio
Potrebbe funzionare ma non ne sono troppo sicuro, alla fine cliccare su un bottone "Aggiorna" non è così scomodo, soprattutto perchè i Major Updates non sono rilasciati tanto spesso


Non lo conoscevo ma direi che sembra un buon prodotto per sostituire OpenVPN, sì lascia pure l'IP dinamico e usa un DDNS, non dovrebbe cambiare nulla.
Credo di sì, che possa reggere, ma non so dirti per certo. Il mio Rasp è abbastanza snello, come servizio di "peso" ha solo OwnCloud, però fa il suo. Non avrà prestazioni simili a un server VPS, ma non ho questa necessità, per cui a me sta bene così ahah


No, al momento io ho SSH esposto perchè devo ancora configurare la VPN, ma dopo che l'avrò fatto l'unico servizio esposto in rete sarà la VPN, tutto il resto, SSH compreso, sarà limitato alla rete privata
Si, sto notando che non ha senso poter entrare da una porta sicura e lasciarne una seconda che è sempre sicura me ne aumenta il rischio, se il raspberry per essere alleggerito ulteriormente non un DE si è obbligati ad usare crontab!
 
Ottima guida come sempre, posso chiedere come hai organizzato il tuo setup? Sto cercando un case od una sistemazione compatta per avere Raspberry Pi 4 + HDD esterno, magari con possibilità di installare una ventola nel case stesso
 
Ciao, ma i contatti si sincronizzano in vpn? (lineage os)
Non ne ho idea :(

Ottima guida come sempre, posso chiedere come hai organizzato il tuo setup? Sto cercando un case od una sistemazione compatta per avere Raspberry Pi 4 + HDD esterno, magari con possibilità di installare una ventola nel case stesso
Guarda in verità non è nulla di che, non ha ventola, ha solo dei dissipatori adesivi appiccicati alle componenti che scaldano di più (non so nemmeno se effettivamente servano a qualcosa, ma quando ho preso il bundle erano inclusi, perciò tanto valeva usarli ahaha)
PXL_20210907_181937204.jpg

PXL_20210907_182104027.jpg
 
Guarda in verità non è nulla di che, non ha ventola, ha solo dei dissipatori adesivi appiccicati alle componenti che scaldano di più (non so nemmeno se effettivamente servano a qualcosa, ma quando ho preso il bundle erano inclusi, perciò tanto valeva usarli ahaha)
Grazie lo stesso, pensavo usassi un case particolare, per i dissipatori posso garantirti che un minimo servono a mantenere basse le temperature. Comunque dopo un po' di ricerche ho trovato qualche soluzione su Thingiverse (come questa https://www.thingiverse.com/thing:3850735 se ti interessa)
 
Grazie lo stesso, pensavo usassi un case particolare, per i dissipatori posso garantirti che un minimo servono a mantenere basse le temperature. Comunque dopo un po' di ricerche ho trovato qualche soluzione su Thingiverse (come questa https://www.thingiverse.com/thing:3850735 se ti interessa)
Fico, non mi è mai sorta la necessità ma in caso dovesse servirmi ora so che esiste una cosa del genere :) Thx!
 
  • Mi piace
Reazioni: ElectricDreamer