Le soluzioni di file hosting disponibili in rete sono oggi numerose e si adattano ad ogni esigenza. Grazie alla diffusione dei device mobile questi servizi sono ormai comunissimi e vengono sfruttati sia nel privato che all'interno di configurazioni aziendali.
Questo perché avere i file disponibili ovunque su più device, o magari condivisi con più utenti, è molto funzionale. I servizi di file hosting più popolari prevedono l'upload dei dati su di un server di proprietà del provider. Questo significa affidare file, anche riservati, ad un'azienda che potenzialmente opera al di fuori del quadro normativo nazionale o europeo. Ecco perché sono nate diverse soluzioni self-hosted che permettono appunto di eseguire il file hosting/sharing da un server locale. Evitando di ricorrere a servizi Cloud di terze parti.
Si tratta di un approccio scelto per esempio da chi preferisce non dover pagare un canone mensile. Inoltre non tutti hanno accesso ad una connessione ad internet prestante per caricare o scaricare file di grandi dimensioni in modo rapido. Esiste infatti ancora una vasta fascia di utenti privi di accesso a connessioni in fibra ottica.
Quest'oggi vogliamo quindi parlare di Seafile, un file hosting service che supporta le configurazioni self-hosted. Nello specifico capiremo come realizzare un server Linux con Seafile, cosi da creare un sistema di file hosting personale sfruttando hardware già in nostro possesso che può operare anche offline. Senza dover caricare file su dischi esterni alla rete LAN.
Come distribuzione di riferimento ci affideremo a Debian ma è possibile utilizzare anche ad altre distribuzioni come Ubuntu, Fedora o Arch Linux. Infatti Seafile è compatibile potenzialmente con qualsiasi piattaforma Linux.
Seafile è un progetto open source che include un pratico file manager, accessibile direttamente da web interface, con cui generare librerie di media e documenti condivisi con più utenti. Tali librerie possono essere protette anche da password, cosi da garantire un elevato grado di riservatezza.
Inoltre si possono sincronizzare diverse directory su più server, gestire i conflitti di versione con un pratico sistema di version control e interrompere o riprendere gli upload dei dati quando si preferisce.
Il team di Seafile offre delle pratiche applicazioni dedicate ai sistemi operativi mobile, Android e iOS, con cui accedere agilmente al server anche da smartphone. Un'altra funzionalità interessante di Seafile riguarda infine il supporto all'editing WYSIWYG per Markdown e ai sistemi di Wiki.
Installazione di Docker in Debian
Iniziamo la nostra procedura sincerandoci di avere installato le ultime versioni dei programmi della distribuzione. Invochiamo quindi il pratico gestore di pacchetti APT tramite la CLI in bash:
sudo apt update && sudo apt upgrade
Ora andiamo ad installare i pacchetti di Docker scaricando con curl lo script messo a disposizione dai developer del progetto:
curl -sSL https://get.docker.com | sh
sudo sh get-docker.sh
Per poter usare Docker senza problemi di permessi aggiungiamo il nostro utente al gruppo dedicato:
sudo usermod -aG docker nomedelnostroutente
e per concludere il setting indichiamo all'init system della distribuzione, systemd, di avviare il processo di Docker al boot in backgroud:
sudo systemctl enable docker.service && sudo systemctl enable containerd.service
Configurazione di Seafile
Passiamo quindi alla creazione del Docker compose file di Seafile e generiamo la directory dedicata:
mkdir ~/seafile
Posizioniamoci poi al suo interno:
cd ~/seafile
e con l'editor di testo nano passiamo al Docker compose file:
nano docker-compose.yml
Al suo interno dobbiamo inserire tali setting:
services:
db:
image: mariadb:10.11
container_name: seafile-mysql
environment:
- MYSQL_ROOT_PASSWORD=LATUAPASSWORD
- MYSQL_LOG_CONSOLE=true
volumes:
- /opt/seafile-mysql/db:/var/lib/mysql
networks:
- seafile-net
memcached:
image: memcached:1.6.18
container_name: seafile-memcached
entrypoint: memcached -m 256
networks:
- seafile-net
seafile:
image: seafileltd/seafile-mc:latest
container_name: seafile
ports:
- "80:80"
# - "443:443" #Remove hashtag if using HTTPS
volumes:
- <LADIRECTORYDOVECARICAREIDATI>:/shared
environment:
- DB_HOST=db
- DB_ROOT_PASSWD=LATUAPASSWORD
- TIME_ZONE=Europe/Rome
- SEAFILE_ADMIN_EMAIL=LATUAMAIL
- SEAFILE_ADMIN_PASSWORD=LATUAPASSWORD
- SEAFILE_SERVER_LETSENCRYPT=false
- SEAFILE_SERVER_HOSTNAME=<HOSTNAME>
depends_on:
- db
- memcached
networks:
- seafile-net
networks:
seafile-net:
Nel nostro esempio andremo ad operare con Seafile in locale, senza affidarci ad HTTPS o a device al di fuori dalla rete LAN. Ecco perché abbiamo impostato l'opzione LETSENCRYPT
in "false". Inoltre se nel vostro server è già in esecuzione un altro servizio in ascolto sulla porta 8080
è bene modificare tale parametro cosi da non generare conflitti. Ovviamente nulla ci vieta di modificare questa configurazione successivamente per rendere disponibili anche al di fuori della nostra rete LAN i file caricati nel server.
Salviamo le modifiche con CTRL+O e chiudiamo con CTRL+X, quindi avviamo Docker con questo comando:
docker compose up -d
Accedere alla web interface di Seafile su Linux
Ora siamo pronti per accedere alla WebGUI di Seafile direttamente dal nostro browser di riferimento. Cosi da configurare il servizio nel modo in cui preferiamo ed iniziare a caricare i file. Quindi apriamo il browser web e digitiamo:
http://IPdelserver:porta
Se non ricordiamo l'IP locale basterà affidarci al comando:
hostname -I
Come output dovremmo visualizzare nella shell un IP come questo:
192.186.1.12
La porta è invece quella che abbiamo impostato nel file Docker compose. Nel nostro caso è la 8080
, quindi dobbiamo scrivere l'URL:
http://192.186.1.12:8080
Dopo aver digitato l'URL verremo portati nella schermata di login di Seafile. Le credenziali sono quelle scelte ed inserite nel file di configurazione, dopo averle inserite verrà mostrata la welcome screen del programma.
Come accennato in precedenza, Seafile offre diverse funzionalità per il management con cui amministrare una libreria di dati condivisi con più utenti. Oltre ovviamente ad una serie di funzioni di Wiki e gestione dei messaggi interni. Inoltre i developer hanno implementato un sistema di document management con cui gestire e modificare documenti tramite il pratico editor WYSIWYG già citato all'inizio della guida.