Come installare Nextcloud con Docker
Nextcloud è una soluzione cloud open source piuttosto affermata e molto diffusa. Oltre ai client per sistemi operativi mobili e desktop, il software offre un componente server. In questo articolo vi mostreremo come installare un server Nextcloud in un ambiente Docker.
Grazie a un credito iniziale, puoi provare gratuitamente il Server Cloud di IONOS per 1 mese (o fino all’esaurimento del credito) e beneficiare del giusto mix di prestazioni e sicurezza!
Installare Nextcloud su Docker
Nextcloud è una soluzione cloud open source, prodotto derivato dal progetto ownCloud. La sua gamma di funzioni è paragonabile a quella di soluzioni cloud come Microsoft 365 o Google Workspace. Nextcloud sincronizza dati come calendario e contatti tra utenti e dispositivi. Accanto alla sincronizzazione di file obbligatoria, la suite offre funzioni per la collaborazione e la comunicazione interna ai team. Dal 2020 Nextcloud è persino utilizzato come base per il servizio cloud del Governo federale tedesco.
Come per altre soluzioni cloud, la gamma di funzioni di Nextcloud comprende anche un componente server e client sia per sistemi operativi desktop che mobili. Il server di Nextcloud gestisce i dati e comunica con i client; inoltre, mette a disposizione un’interfaccia web indipendente.
In questo articolo vi guideremo attraverso l’installazione di un server Nextcloud su Ubuntu-Linux. Per farlo, ci serviremo di Docker Compose e prenderemo come riferimento l’installazione su un’infrastruttura cloud. In alternativa, esiste la possibilità di installare il server su un proprio hardware e configurare, ad esempio, Nextcloud su un Raspberry Pi.
Nextcloud e ownCloud hanno molto in comune. Nel nostro articolo ownCloud vs Nextcloud: due soluzioni cloud a confronto vi illustriamo anche in cosa si differenziano.
L’architettura di Nextcloud
Per prima cosa, esaminiamo quali componenti sono inclusi nel server di Nextcloud e come sono connessi tra loro. Oltre al software stesso di Nextcloud, vengono impiegati tre ulteriori servizi salvati in container (letteralmente “contenitore” in italiano). Per fornire la rete del gruppo di container e manovrarli come unità unica, ci serviamo di Compose, uno dei tool di Docker.
Di seguito, una panoramica dei singoli servizi:
- Nginx Reverse Proxy: necessario per realizzare connessioni HTTPS crittografate per l’accesso a Nextcloud.
- Let’s Encrypt: utilizzato per la configurazione automatica di certificati SSL.
- MariaDB: per il salvataggio dei dati a carico del server durante l’utilizzo di Nextcloud.
- Server Nextcloud: mette a disposizione la funzionalità effettiva di Nextcloud comunicando con i client di Nextcloud e occupandosi dell’hosting della piattaforma web.
Preparare il server di Nextcloud all’installazione
Prima di tutto, è necessario installare Docker Engine e Docker Compose su un sistema Ubuntu-Linux appena configurato. Docker Engine prepara le funzionalità di base dei container, mentre Docker Compose permette la gestione di gruppi di container simili. Se Docker Engine e Docker Compose sono già installati, potete saltare questo passaggio.
Installare Docker Engine su Ubuntu
In questo articolo vi illustreremo come procedere all’installazione su Ubuntu-Linux facendo riferimento alle istruzioni ufficiali. Per altre distribuzioni Linux trovate le rispettive istruzioni sul sito web di Docker. Cominciamo quindi con l’installazione di Docker Engine:
- Rimuovere l’eventuale installazione Docker, se presente:
sudo apt-get remove docker docker-engine docker.io containerd runc
- Aggiornare il file “installer” alla versione più recente:
sudo apt-get update
- Preparare i repository:
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
- Aggiungere la chiave GPG Docker ufficiale:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
- Configurare un repository Docker stabile:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
- Aggiornare i repository alla versione più recente:
sudo apt-get update
- Installare Docker Engine, incluse le dipendenze:
sudo apt-get install docker-ce docker-ce-cli containerd.io
- Per finire, eseguire il container “Hello World” a fini di verifica.
Se Docker Engine è stato installato correttamente, il container “Hello World” verrà eseguito fornendo l’omonimo messaggio.
sudo docker run hello-world
Installare Docker Compose su Ubuntu
Successivamente, ci occuperemo dell’installazione di Docker Compose. Il processo di installazione è più semplice e veloce rispetto all’installazione di Docker Engine. Nello specifico, dovremo compiere i seguenti passaggi:
- Attivare il repository Universe di Ubuntu:
sudo add-apt-repository universe
- Aggiornare la gestione dei pacchetti alla versione più recente:
sudo apt update
- Installare Docker Compose:
sudo apt install docker-compose
- Verificare se Docker Compose sia stato installato correttamente:
docker-compose --version
Se appare un numero di versione, significa che Docker Compose è stato installato correttamente.
Eseguire l’installazione del server Nextcloud
Non appena Docker Engine e Docker Compose sono stati installati, si può procedere con la vera e propria installazione di Nextcloud. Per farlo, configureremo i container Docker per i diversi servizi. Per la configurazione dei container, dei volumi e delle reti Docker necessarie si impiegano due file di configurazione:
File | Spiegazione |
---|---|
docker-compose.yaml | Istruzioni Docker Compose in formato YAML per la costruzione di applicazioni multi-container |
.env | File di testo con variabili di ambiente; una definizione di variabile per riga |
Come già accennato, Docker Compose serve alla gestione di applicazioni multi-container. A tal proposito si utilizzano istruzioni Docker Compose che definiscono come deve essere strutturata l’applicazione e come interagiscono i singoli componenti tra loro. Le istruzioni Docker Compose descrivono i singoli servizi, gli elementi Docker e le impostazioni; inoltre sono scritti in linguaggio YAML (“Yet Another Markup Language”, tradotto in italiano: “l’ennesimo linguaggio di markup”). Procediamo ora a creare progressivamente il file docker-compose.yaml utilizzato.
Accanto a docker-compose.yaml è necessario un ulteriore file, il quale contiene variabili di ambiente, incluse nelle istruzioni di Docker Compose. Per impostazione predefinita, le variabili di ambiente si raccolgono in un file .env nella cartella del progetto insieme ai valori. Il file .env, che non viene acquisito nel sistema di controllo delle versioni, si occupa di proteggere dati sensibili come le password.
L’utilizzo di un file .env rende superfluo definire diverse impostazioni per diversi ambienti di applicazione. Ad esempio, per utilizzare impostazioni differenti per un sito live e uno di staging, è necessario modificare esclusivamente il rispettivo file .env.
Creare le strutture necessarie per il server Nextcloud
Per iniziare con l’installazione del server Nextcloud ci servono una serie di strutture. Nei seguenti passaggi vi spieghiamo come crearle:
- Creare la cartella del progetto. Create la cartella nextcloud-docker nella directory home dell’utente:
mkdir ~/nextcloud-docker/
- Creare i file. Create i file docker-compose.yaml ed .env nella cartella del progetto:
touch ~/nextcloud-docker/docker-compose.yaml
touch ~/nextcloud-docker/.env
- Creare una rete Docker. Utilizzate il comando docker per creare una nuova rete. I quattro container comunicano all’interno della rete.
docker network create nextcloud_network
Una volta create le strutture, proseguiamo con l’installazione del server Nextcloud.
Configurare un reverse proxy per il server Nextcloud
Per installare il server Nextcloud iniziate con la configurazione di un reverse proxy e per farlo, servitevi di Nginx. Dal momento che la vostra applicazione sarà composta da container, la maggior parte della routine di installazione avrà luogo all’interno del file docker-compose.yaml. Di seguito vi illustreremo in dettaglio come modificare questo file. Replicate gli esempi raffigurati nei seguenti passaggi del processo di installazione:
- Aprire il file docker-compose.yaml per l’elaborazione.
Il seguente comando apre il file ancora vuoto nell’editor “Nano”:
nano ~/nextcloud-docker/docker-compose.yaml
- Aggiungere il seguente blocco di codice in Nano e salvare il file.
Per chiudere il file utilizzate la combinazione di tasti [Ctrl] + [X]. Alla domanda se vogliate salvare il file rispondete premendo “Y” per “yes” (“sì”). Confermate l’utilizzo del nome del file esistente con il tasto [Invio].
In alternativa, lasciate aperto l’editor e utilizzate la combinazione di tasti [Ctrl] + [O] (“Write out”, ovvero “Scrivi nel file”) per scrivere il testo dell’editor nel file.
version: '3'
services:
proxy:
image: jwilder/nginx-proxy:alpine
labels:
- "com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy=true"
container_name: nextcloud-proxy
networks:
- nextcloud_network
ports:
- 80:80
- 443:443
volumes:
- ./proxy/conf.d:/etc/nginx/conf.d:rw
- ./proxy/vhost.d:/etc/nginx/vhost.d:rw
- ./proxy/html:/usr/share/nginx/html:rw
- ./proxy/certs:/etc/nginx/certs:ro
- /etc/localtime:/etc/localtime:ro
- /var/run/docker.sock:/tmp/docker.sock:ro
restart: unless-stopped
Ma cosa significano le singoli voci? Innanzitutto, date l’ordine a Docker Compose di creare un nuovo servizio con il nome proxy e utilizzare un’immagine Nginx basata su Alpine-Linux. Successivamente, stabilite che il reverse proxy deve comunicare con gli altri servizi tramite la rete Docker nextcloud_network.
Dopodiché, mappate le porte standard HTTP e HTTPS 80, o meglio 443, del sistema host sui container. In questo modo le connessioni in entrata vengono inoltrate tramite il proxy. L’ultimo passaggio della configurazione prevede di creare diversi volumi Docker e stabilire che il reverse proxy si riavvii automaticamente, a meno che non sia stato esplicitamente interrotto.
Configurare il servizio Let’s Encrypt per il server Nextcloud
Proseguite installando Let’s Encrypt. Ciò permetterà la comunicazione crittografata con il server Nextcloud tramite HTTPS.
- Aprire il file docker-compose.yaml per elaborarlo:
nano ~/nextcloud-docker/docker-compose.yaml
- Aggiungere un blocco Service.
Procedete come descritto nel precedente passaggio, facendo attenzione all’indentazione: l’inizio del blocco che inizia con letsencrypt: deve essere sul medesimo livello di proxy:. Questo vale anche per i blocchi Service successivi.
letsencrypt:
image: jrcs/letsencrypt-nginx-proxy-companion
container_name: nextcloud-letsencrypt
depends_on:
- proxy
networks:
- nextcloud_network
volumes:
- ./proxy/certs:/etc/nginx/certs:rw
- ./proxy/vhost.d:/etc/nginx/vhost.d:rw
- ./proxy/html:/usr/share/nginx/html:rw
- /etc/localtime:/etc/localtime:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
restart: unless-stopped
Come in precedenza, definite un nuovo servizio con il nome letsencrypt, il quale si basa sul container letsencrypt-nginx-proxy-companion. Stabilite che il servizio sia dipendente dal servizio del reverse proxy e comunichi nella medesima rete Docker. Successivamente, indicate i volumi Docker necessari per lo scambio di dati. Anche in questo caso, stabilite che il servizio si riavvii automaticamente a meno che non sia stato interrotto esplicitamente.
Desiderate una crittografia professionale per il vostro sito web? Acquistate un certificato SSL sul sito web di IONOS!
Configurare il servizio MariaDB per il server Nextcloud
Una volta completata la configurazione del reverse proxy e di Let’s Encrypt, siete a metà dell’installazione. Proseguite ora con il database MariaDB, indispensabile per la gestione dei dati prodotti durante l’utilizzo di Nextcloud. Il salvataggio effettivo tramite volumi Docker avviene al di fuori del container.
- Aprire il file docker-compose.yaml per l’elaborazione:
nano ~/nextcloud-docker/docker-compose.yaml
- Aggiungere un altro blocco Service:
db:
image: mariadb
container_name: nextcloud-mariadb
networks:
- nextcloud_network
volumes:
- db:/var/lib/mysql
- /etc/localtime:/etc/localtime:ro
environment:
- MYSQL_ROOT_PASSWORD
- MYSQL_PASSWORD
- MYSQL_DATABASE
- MYSQL_USER
restart: unless-stopped
A questo punto, la maggior parte delle impostazioni dovrebbe esservi nota. Definite ora un servizio db basato sull’immagine Docker mariadb. Infine, stabilite la rete nextcloud_network, già impiegata per gli altri servizi, e un volume Docker per il salvataggio dei dati.
La novità in questo blocco di configurazione è l’utilizzo di variabili di ambiente. Nel segmento environment immettete il nome per le variabili di ambiente necessarie per MariaDB. I valori effettivi saranno letti in seguito durante l’esecuzione di Docker Compose a partire dal file .env.
Configurare il container del server Nextcloud
Finalmente, siamo arrivati all’installazione vera e propria del software server Nextcloud.
- Aprire il file docker-compose.yaml per l’elaborazione:
nano ~/nextcloud-docker/docker-compose.yaml
- Inserire un ulteriore blocco Service:
app:
image: nextcloud:latest
container_name: nextcloud-app
networks:
- nextcloud_network
depends_on:
- letsencrypt
- proxy
- db
volumes:
- nextcloud:/var/www/html
- ./app/config:/var/www/html/config
- ./app/custom_apps:/var/www/html/custom_apps
- ./app/data:/var/www/html/data
- ./app/themes:/var/www/html/themes
- /etc/localtime:/etc/localtime:ro
environment:
- VIRTUAL_HOST
- LETSENCRYPT_HOST
- LETSENCRYPT_EMAIL
restart: unless-stopped
Create un servizio con il nome app, il quale si basa sull’immagine Docker nextcloud e che comunica nella già nota rete nextcloud_network. Per assicurarvi che il container Nextcloud venga avviato per ultimo, determinate che gli altri servizi siano dipendenze. Per ultimo, definite i volumi Docker necessari e le variabili di ambiente.
Portare a termine la configurazione del server Nextcloud
Per concludere la configurazione del server Nextcloud, avrete bisogno di inserire un altro paio di voci all’interno del file docker-compose.yaml. Sarà anche necessario creare il file .env inserendovi i rispettivi valori.
- Aprire il file docker-compose.yaml per l’elaborazione:
nano ~/nextcloud-docker/docker-compose.yaml
- Aggiungere i seguenti blocchi.
In questo caso non si tratta di blocchi Service; l’indentazione deve quindi avvenire sullo stesso livello di services:.
volumes:
nextcloud:
db:
networks:
nextcloud_network:
- Aprire il file vuoto .env per l’elaborazione:
nano ~/nextcloud-docker/.env
- Scrivere le variabili di ambiente, inclusi i valori contenuti nel file .env:
Copiate il seguente codice nella finestra dell’editor e, prima di salvarlo, sostituite i <segnaposto> con i valori desiderati.
# MariaDB
MYSQL_ROOT_PASSWORD=toor
MYSQL_PASSWORD=mysql
MYSQL_DATABASE=nextcloud
MYSQL_USER=nextcloud
# Nextcloud
VIRTUAL_HOST=<your.domain></your.domain>
LETSENCRYPT_HOST=<your.domain></your.domain>
LETSENCRYPT_EMAIL=<your@email></your@email>
- Dopo il salvataggio, visualizzate il contenuto del file .env per verificare che l’inserimento dei valori sia avvenuto correttamente:
cat ~/nextcloud-docker/.env
Configurazione completa del server Nextcloud
Prima di trasmettere la configurazione creata a Docker Compose e quindi creare e avviare i container, verificate che tutto il necessario sia al suo posto.
- Emettere la configurazione esistente:
cat ~/nextcloud-docker/docker-compose.yaml
- Confrontare con il vostro esempio. L’output della configurazione dovrebbe corrispondere al seguente codice:
version: '3'
services:
proxy:
image: jwilder/nginx-proxy:alpine
labels:
- "com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy=true"
container_name: nextcloud-proxy
networks:
- nextcloud_network
ports:
- 80:80
- 443:443
volumes:
- ./proxy/conf.d:/etc/nginx/conf.d:rw
- ./proxy/vhost.d:/etc/nginx/vhost.d:rw
- ./proxy/html:/usr/share/nginx/html:rw
- ./proxy/certs:/etc/nginx/certs:ro
- /etc/localtime:/etc/localtime:ro
- /var/run/docker.sock:/tmp/docker.sock:ro
restart: unless-stopped
letsencrypt:
image: jrcs/letsencrypt-nginx-proxy-companion
container_name: nextcloud-letsencrypt
depends_on:
- proxy
networks:
- nextcloud_network
volumes:
- ./proxy/certs:/etc/nginx/certs:rw
- ./proxy/vhost.d:/etc/nginx/vhost.d:rw
- ./proxy/html:/usr/share/nginx/html:rw
- /etc/localtime:/etc/localtime:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
restart: unless-stopped
db:
image: mariadb
container_name: nextcloud-mariadb
networks:
- nextcloud_network
volumes:
- db:/var/lib/mysql
- /etc/localtime:/etc/localtime:ro
environment:
- MYSQL_ROOT_PASSWORD
- MYSQL_PASSWORD
- MYSQL_DATABASE
- MYSQL_USER
restart: unless-stopped
app:
image: nextcloud:latest
container_name: nextcloud-app
networks:
- nextcloud_network
depends_on:
- letsencrypt
- proxy
- db
volumes:
- nextcloud:/var/www/html
- ./app/config:/var/www/html/config
- ./app/custom_apps:/var/www/html/custom_apps
- ./app/data:/var/www/html/data
- ./app/themes:/var/www/html/themes
- /etc/localtime:/etc/localtime:ro
environment:
- VIRTUAL_HOST
- LETSENCRYPT_HOST
- LETSENCRYPT_EMAIL
restart: unless-stopped
volumes:
nextcloud:
db:
networks:
nextcloud_network:
Se la vostra versione del file YAML corrisponde a quella riportata qui, potete proseguire con l’ultimo passaggio.
Concludere l’installazione del server Nextcloud
Per generare il server Nextcloud come applicazione multi-container dalle istruzioni di Docker Compose, eseguite il seguente comando sulla riga di comando:
cd ~/nextcloud-docker/ && docker-compose up -d
Infine, verificate che i container siano stati avviati:
docker ps -a
L’elenco dei container avviati dovrebbe contenere i quattro container definiti nel file docker-compose.yaml.