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.

Prova gratuitamente il tuo server cloud di IONOS

Prova subito il tuo server cloud gratuitamente – Testa il tuo server cloud per 30 giorni!

API REST
Traffico illimitato
Virtualizzazione VMware

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.

Consiglio

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:

  1. Nginx Reverse Proxy: necessario per realizzare connessioni HTTPS crittografate per l’accesso a Nextcloud.
  2. Let’s Encrypt: utilizzato per la configurazione automatica di certificati SSL.
  3. MariaDB: per il salvataggio dei dati a carico del server durante l’utilizzo di Nextcloud.
  4. 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 installareDocker 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:

  1. Rimuovere l’eventuale installazione Docker, se presente:
sudo apt-get remove docker docker-engine docker.io containerd runc
  1. Aggiornare il file “installer” alla versione più recente:
sudo apt-get update
  1. Preparare i repository:
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
  1. 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
  1. 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
  1. Aggiornare i repository alla versione più recente:
sudo apt-get update
  1. Installare Docker Engine, incluse le dipendenze:
sudo apt-get install docker-ce docker-ce-cli containerd.io
  1. 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:

  1. Attivare il repository Universe di Ubuntu:
sudo add-apt-repository universe
  1. Aggiornare la gestione dei pacchetti alla versione più recente:
sudo apt update
  1. Installare Docker Compose:
sudo apt install docker-compose
  1. 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:

  1. Creare la cartella del progetto. Create la cartella nextcloud-docker nella directory home dell’utente:
mkdir ~/nextcloud-docker/
  1. 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
  1. 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:

  1. 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
  1. 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.

  1. Aprire il file docker-compose.yaml per elaborarlo:
nano ~/nextcloud-docker/docker-compose.yaml
  1. 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.

Consiglio

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.

  1. Aprire il file docker-compose.yaml per l’elaborazione:
nano ~/nextcloud-docker/docker-compose.yaml
  1. 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.

  1. Aprire il file docker-compose.yaml per l’elaborazione:
nano ~/nextcloud-docker/docker-compose.yaml
  1. 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.

  1. Aprire il file docker-compose.yaml per l’elaborazione:
nano ~/nextcloud-docker/docker-compose.yaml
  1. 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:
  1. Aprire il file vuoto .env per l’elaborazione:
nano ~/nextcloud-docker/.env
  1. 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>
  1. 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.

  1. Emettere la configurazione esistente:
cat ~/nextcloud-docker/docker-compose.yaml
  1. 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 serverNextcloud come applicazione multi-container dalle istruzioni di Docker Compose, eseguite il seguente comando sulla riga di comando:

cd ~/nextcloud-docker/ &amp;&amp; docker-compose up -d

Infine, verificate che i container siano stati avviati:

docker ps -a

L’elencodei container avviati dovrebbe contenere i quattro container definiti nel file docker-compose.yaml.


Abbiamo una proposta per te:
Web hosting a partire da 1 €/mese!

Dominio gratis
Certificato SSL Wildcard incluso
Assistenza clienti 24/7
A partire da 1 €/mese IVA escl. per un anno,
poi 8 €/ mese IVA escl.