Vai al contenuto

Nextcloud con Docker: installare All-in-One su un server Linux

Illustrazione 3D isometrica con persone che configurano un server e un simbolo cloud.
Immagine generata con IA

Questa guida è per chi vuole un cloud personale al posto di Google Drive, su un server gestito in prima persona. Nextcloud All-in-One (AIO) è il metodo di installazione ufficiale di Nextcloud. Si avvia un solo container, il mastercontainer, che crea e gestisce tutti gli altri: Nextcloud, il database PostgreSQL, Redis e il proxy con HTTPS automatico. Se li volete, aggiunge anche Talk, Nextcloud Office e il backup.

Alla fine Nextcloud risponderà sul vostro dominio con un certificato valido e avrete un backup cifrato con BorgBackup. I comandi sono quelli del README ufficiale di Nextcloud All-in-One, elencato in fondo con le altre pagine.

Cosa serve

  • Un server Linux con Docker Engine, installato seguendo la documentazione ufficiale di Docker. Lì trovate le procedure per Debian, Ubuntu, Fedora, RHEL, CentOS e altre. Se partite da zero, sul sito c’è anche la nostra guida a Docker.
  • Un processore x86_64 (amd64) oppure aarch64 (arm64): sono le due architetture supportate da AIO.
  • Un disco adatto: il README consiglia un SSD. Un HDD funziona ma è più lento; le schede SD sono sconsigliate.
  • Un dominio che punta all’indirizzo IP pubblico del server. AIO non accetta un semplice indirizzo IP al posto del dominio.
  • Le porte giuste aperte sul firewall e sul router, come nella tabella qui sotto.
Porta A cosa serve Da aprire e inoltrare?
443/TCP Nextcloud, tramite il container Apache Sì, sempre
3478/TCP e 3478/UDP Server TURN di Nextcloud Talk Sì, se attivate Talk
443/UDP HTTP/3 per il container Apache Solo se volete HTTP/3
80/TCP Certificato per l’interfaccia AIO con la challenge HTTP di ACME, poi reindirizza a Nextcloud Solo per l’interfaccia AIO sulla 8443
8443/TCP Interfaccia AIO con certificato valido Solo per l’interfaccia AIO sulla 8443
8080/TCP Interfaccia AIO con certificato autofirmato, da aprire tramite l’IP del server No, va usata dalla rete locale

Il README ha istruzioni dedicate anche a macOS, Windows, Unraid e Synology. Questa guida riguarda un server Linux. Se sul server c’è già un web server o un reverse proxy (Apache, Nginx, Caddy, Cloudflare Tunnel) e volete mettere AIO dietro quello, seguite la documentazione AIO sui reverse proxy.

Schermata del firewall con le porte 80, 443 e 3478 evidenziate.
Configurazione delle regole del firewall con le porte di rete necessarie per Nextcloud AIO. — Immagine: GitHub

Controllare che Docker non sia installato tramite snap

Le installazioni di Docker fatte con snap non sono supportate. Di solito riguarda solo Ubuntu. Questo comando lo verifica:

sudo docker info | grep "Docker Root Dir" | grep "/var/snap/docker/"

Se non stampa nulla, va tutto bene. Se invece stampa questa riga, Docker è installato tramite snap:

/var/snap/docker/

In quel caso passate a un’installazione standard seguendo la procedura di Docker per Ubuntu e togliete il pacchetto snap. Toglietelo solo se siete sicuri che non ci giri nessun container che vi serve, altrimenti rischiate di perdere dati o interrompere servizi.

Avviare il mastercontainer di Nextcloud AIO

Il mastercontainer contiene l’interfaccia web di AIO e crea, aggiorna e salva tutti gli altri container. Copiate il comando così com’è, senza adattarlo. Non cambiate né il nome del container né quello del volume: gli aggiornamenti e i backup integrati dipendono da quei nomi.

Prima di lanciarlo, sappiate cosa fa. Monta in sola lettura il socket di Docker (/var/run/docker.sock), così il mastercontainer può gestire gli altri container. Inoltre pubblica le porte 80, 8080 e 8443 su tutte le interfacce di rete dell’host, che è il comportamento predefinito di Docker. Su un server con IP pubblico, come quasi tutti i VPS, queste porte possono quindi essere raggiungibili direttamente da Internet anche senza inoltri sul router, e questo vale anche per la 8080 dell’interfaccia AIO. Prima di avviare il container, limitate l’accesso alla 8080 alla rete locale con regole di rete compatibili con Docker. La pagina di Docker sulla pubblicazione delle porte spiega che Docker crea delle regole firewall proprie per ogni porta pubblicata.

sudo docker run \
  --init \
  --sig-proxy=false \
  --name nextcloud-aio-mastercontainer \
  --restart always \
  --publish 80:80 \
  --publish 8080:8080 \
  --publish 8443:8443 \
  --volume nextcloud_aio_mastercontainer:/mnt/docker-aio-config \
  --volume /var/run/docker.sock:/var/run/docker.sock:ro \
  ghcr.io/nextcloud-releases/all-in-one:latest

Le opzioni principali:

  • --sig-proxy=false: se premete Ctrl+C nel terminale, il container non si ferma.
  • --restart always: il container riparte automaticamente insieme al demone Docker.
  • --volume nextcloud_aio_mastercontainer:/mnt/docker-aio-config: la configurazione di AIO viene salvata in un volume Docker con nome.

Per un uso in produzione il README consiglia il file Compose di esempio al posto di docker run, perché rende più semplici aggiornamenti e modifiche.

Verificare che il mastercontainer sia in esecuzione

Grazie a --sig-proxy=false potete chiudere il terminale senza fermare nulla. Controllate i container in esecuzione:

sudo docker ps --format {{.Names}}

Nell’elenco deve comparire nextcloud-aio-mastercontainer. Se non c’è, il mastercontainer non è partito: rileggete il comando di avvio e i messaggi che ha stampato.

Aprire l’interfaccia AIO e annotare la passphrase

Da un computer della stessa rete, aprite nel browser https://<IP-del-server>:8080, mettendo al posto di <IP-del-server> l’indirizzo IP del server (per esempio https://192.168.5.5:8080). Usate l’IP e non il dominio: con il dominio può funzionare per un po’, ma più avanti l’accesso rischia di bloccarsi per via di HSTS. Sulla porta 8080 il certificato è autofirmato, quindi dovete accettarlo nel browser.

Se avete inoltrato le porte 80 e 8443 e il dominio punta già al server, potete usare anche https://<vostro-dominio>:8443, dove <vostro-dominio> è il dominio puntato sul server. Su quella porta AIO ottiene automaticamente un certificato valido. Il README avverte però che l’interfaccia esposta pubblicamente può ricevere richieste ACME per domini arbitrari, causando il superamento dei limiti e il rifiuto dei rinnovi dei certificati. Raccomanda quindi di limitarne l’esposizione pubblica e/o di proteggerla con una VPN.

La prima schermata mostra la passphrase di AIO. Copiatela e conservatela in un gestore di password. Se la smarrite, potete recuperarla dal mastercontainer con questo comando: sudo docker exec nextcloud-aio-mastercontainer grep password /mnt/docker-aio-config/data/configuration.json.

Inserire il dominio e avviare i container di Nextcloud

Entrate con la passphrase, scrivete il dominio nel campo dedicato e confermate. AIO controlla che il dominio punti al server e che la porta 443 sia raggiungibile, quindi la 443/TCP deve essere già aperta e inoltrata.

Poi scegliete i container opzionali che vi servono, come Nextcloud Office, Talk, ClamAV o Imaginary. Se attivate Talk, aprite e inoltrate anche le porte 3478/TCP e 3478/UDP.

Infine avviate i container con il pulsante dell’interfaccia e aspettate che risultino tutti in esecuzione. A quel punto AIO mostra le credenziali dell’amministratore di Nextcloud: annotatele subito. Con quelle entrate in Nextcloud dal vostro dominio.

Attivare il backup integrato con BorgBackup

Il backup di AIO si basa su BorgBackup e si gestisce tutto dall’interfaccia: creazione, ripristino, controllo di integrità e riparazione. I backup sono incrementali, compressi e cifrati.

  1. Nella sezione del backup indicate come cartella di destinazione il punto di mount di un disco esterno, per esempio /mnt/backup.
  2. Premete Create Backup.
  3. AIO mostra la password di cifratura del backup. Salvatela in un posto sicuro, fuori dal server. Per ripristinare servono l’archivio e questa password: senza, non si recupera nulla.

Per tornare a uno stato precedente scegliete il backup dall’elenco e usate Restore selected backup. Dall’interfaccia potete anche attivare i backup giornalieri, che possono essere seguiti dall’aggiornamento automatico dei container, di Nextcloud e delle sue app.

Il README riporta anche un comando facoltativo, comodo negli script, che fa partire il backup giornaliero dal terminale. Attenzione: il comando ferma i container di Nextcloud per fare il backup e al termine li lascia fermi, quindi Nextcloud resta irraggiungibile finché non lo riavviate. Potete riavviarlo dall’interfaccia AIO. In alternativa, il README descrive la variabile START_CONTAINERS=1, che si aggiunge al comando per far ripartire i container in automatico a fine backup.

sudo docker exec -it --env DAILY_BACKUP=1 nextcloud-aio-mastercontainer /daily-backup.sh

Aggiornare i container dall’interfaccia

Per rientrare in AIO mentre Nextcloud è in esecuzione, accedete a Nextcloud come amministratore, aprite https://<vostro-dominio>/settings/admin/overview e premete il pulsante per AIO: potrete quindi inserire la passphrase. Quando AIO segnala un aggiornamento, procedete in quest’ordine:

  1. Premete Stop containers.
  2. Create un backup dello stato attuale con Create Backup. Se l’aggiornamento dà problemi, potete tornare indietro con questo backup.
  3. Solo dopo premete Start and update containers.

Il mastercontainer ha una procedura di aggiornamento sua, che l’interfaccia indica sotto il pulsante Stop containers.

Ripartire da zero: cancellare l’istanza

Questa procedura va usata solo su un’installazione nuova, di prova o andata male. Cancella tutti i dati dell’istanza Nextcloud: file, database e configurazione. Prima fermate i container dall’interfaccia AIO, poi lanciate questi comandi nell’ordine indicato.

Fermate il mastercontainer e il container che controlla il dominio:

sudo docker stop nextcloud-aio-mastercontainer
sudo docker stop nextcloud-aio-domaincheck

Prima di eliminare container, rete e volumi, controllate che nessun container di AIO sia ancora in esecuzione:

sudo docker ps --format {{.Names}}

Se compaiono nomi che iniziano con nextcloud-aio, fermateli con sudo docker stop seguito dal nome esatto che vedete nell’elenco. Poi ripetete il controllo. Andate avanti solo quando nell’elenco non compare più nessun container di AIO.

Elencate i container fermi:

sudo docker ps --filter "status=exited"

Attenzione: il prossimo comando elimina tutti i container fermi del server, anche quelli che non hanno a che fare con Nextcloud. Nell’elenco appena stampato devono esserci solo container di AIO, con il nome che inizia per nextcloud-aio. Se c’è qualcos’altro che volete tenere, fermatevi qui.

sudo docker container prune

Eliminate la rete creata da AIO:

sudo docker network rm nextcloud-aio

Elencate i volumi che nessun container usa più:

sudo docker volume ls --filter "dangling=true"

Con il prossimo passaggio i dati si perdono davvero. Il comando cancella tutti i volumi inutilizzati, compresi quelli con i file di Nextcloud e il database. Se nell’elenco precedente compaiono volumi di altri progetti, verranno cancellati anche quelli. Andate avanti solo se nell’elenco ci sono soltanto volumi di AIO e non vi serve niente di quello che contengono.

sudo docker volume prune --filter all=1

Controllate i volumi rimasti. Non devono più comparire volumi di Nextcloud AIO:

sudo docker volume ls --format {{.Name}}

Infine potete liberare lo spazio occupato dalle immagini. Questo comando cancella tutte le immagini Docker che nessun container sta usando, non solo quelle di AIO, e quelle che vi servono andranno scaricate di nuovo.

sudo docker image prune -a

A questo punto potete ricominciare dal comando che avvia il mastercontainer.

Se qualcosa va storto

  • Il controllo del dominio dice che l’IP è interno o riservato. Prima verificate che il dominio punti davvero all’IP pubblico del server. Il README spiega poi come aggiungere l’opzione --add-host al comando del mastercontainer: il container va fermato, rimosso e ricreato, senza perdere dati.
  • Su Fedora, RHEL, CentOS o SUSE i container non comunicano tra loro. È un problema noto delle distribuzioni che usano firewalld. Il README spiega come passare firewalld al backend iptables.
  • Con SELinux attivo il mastercontainer non riesce ad accedere al socket di Docker. Il README indica l’opzione da aggiungere al comando del mastercontainer.
  • Il VPS dà problemi. Il README sconsiglia i vecchi VPS Strato basati su Virtuozzo e quelli di Hostinger. In generale consiglia i VPS KVM.

Documentazione di riferimento

Pagine ufficiali consultate il 16 ottobre 2026:

Leggi anche