Come installare Nextcloud: la soluzione di archiviazione cloud con docker compose

Se stai cercando un'alternativa sicura e privata ai servizi di archiviazione cloud più diffusi, Nextcloud rappresenta la scelta ideale. Scopri come configurare Nextcloud senza sforzo utilizzando Docker Compose.

In un’epoca in cui la privacy dei dati e il controllo sono fondamentali, avere un server cloud personale è diventato sempre più importante. Nextcloud, un potente software open-source, ti permette di creare la tua soluzione di archiviazione cloud personale, consentendo una sincronizzazione, condivisione e collaborazione dei file senza interruzioni. Grazie alla sua flessibilità e al pieno controllo sui dati, è perfetto per utenti privati, aziende e professionisti.

Perché scegliere Nextcloud

Nextcloud offre una piattaforma di archiviazione cloud self-hosted che ti permette di mantenere il pieno controllo sui tuoi file. Tra le sue caratteristiche principali troviamo:

  • Sincronizzazione dei file su tutti i dispositivi
  • Collaborazione su documenti in tempo reale
  • Gestione di calendari e contatti
  • Compatibilità con numerose applicazioni aggiuntive

Grazie a Docker Compose, l’installazione diventa semplice e veloce, riducendo al minimo i tempi di configurazione. In questa guida ti spiegherò come installare Nextcloud utilizzando Docker Compose, semplificando la gestione e l’aggiornamento del servizio.

Link al progetto

Puoi trovare il repository ufficiale di Nextcloud su GitHub all’indirizzo: https://github.com/nextcloud

Requisiti necessari

Prima di iniziare, assicurati di avere a disposizione:

  • Un server con Docker e Docker Compose installati. Se non l’hai già installati, ti sarà utile una guida su Come installare Docker e Docker Compose
  • Un nome di dominio configurato attraverso il quale il servizio sarà accessibile, ad esempio: nextcloud.emanuelegori.uno
  • Accesso al server tramite SSH con permessi di amministratore.
Installare Nextcloud con Docker Compose

Per installare Nextcloud, utilizzeremo cinque container separati: Caddy come reverse proxy, Nginx come web server, MariaDB come database, Redis per il caching e Nextcloud con FPM. Li distribuiremo insieme utilizzando Docker Compose.

È possibile configurare un’istanza completa di Nextcloud utilizzando solo la sua immagine, ma questa configurazione è più adatta a scopi di test e presenta alcune limitazioni. L’approccio scelto con cinque container separati offre un’eccellente flessibilità e un’alta configurabilità.

Il primo passo è creare la cartella in cui verranno inseriti i file di distribuzione di Docker Compose. Successivamente, spostati al suo interno; da questo momento in poi, dovrai eseguire tutti i comandi riportati in questa guida da quella posizione.

mkdir nextcloud && cd nextcloud

Crea un file denominato “.env”. Questo file conterrà le variabili d’ambiente necessarie per configurare la nostra istanza di Nextcloud in container.

nano .env

Copia incolla il contenuto, quindi salva il file ed esci.

MYSQL_ROOT_PASSWORD=tua-password-root
MYSQL_USER=nextcloud
MYSQL_PASSWORD=nextcloud-password-database
MYSQL_DATABASE=nextcloud
MYSQL_HOST=db
REDIS_HOST=redis
OVERWRITEPROTOCOL=https
TRUSTED_PROXIES=caddy
APACHE_DISABLE_REWRITE_IP=1
OVERWRITEHOST=nextcloud.emanuelegori.uno

Questo il significato di ciascun valore:

  • MYSQL_ROOT_PASSWORD: La password che verrà impostata per l’account root di MariaDB.
  • MYSQL_USER: Il nome per l’utente che interagisce con il database di Nextcloud.
  • MYSQL_PASSWORD: Imposta una password per l’utente che interagisce con il database di Nextcloud.
  • MYSQL_DATABASE: Il nome del database di Nextcloud.
  • MYSQL_HOST: Il nome del servizio che impostiamo nel file “docker-compose.yaml” per il container di MariaDB.
  • REDIS_HOST: Il nome del servizio che impostiamo nel file “docker-compose.yaml” per il container di Redis.
  • OVERWRITEPROTOCOL: Imposta il protocollo del servizio proxy (Caddy). Nel nostro caso, utilizzeremo HTTPS.
  • TRUSTED_PROXIES: Permette al container di Nextcloud di ottenere l’indirizzo IP reale del visitatore inviato dal container di Caddy.
  • APACHE_DISABLE_REWRITE_IP: Disabilita la riscrittura degli indirizzi IP.
  • OVERWRITEHOST: Imposta il nome host del proxy.

Assicurati di sostituire i valori per “MYSQL_ROOT_PASSWORD”, “MYSQL_USER”, “MYSQL_PASSWORD”, “MYSQL_DATABASE” e “OVERWRITEHOST” con quelli che desideri utilizzare.

Crea una Rete Docker e chiamala “nextcloud_network”. Facendo questo, garantiamo che tutti i container della nostra installazione di Nextcloud abbiano visibilità di rete tra loro, permettendo così di interagire.

docker network create nextcloud_network

Inoltre, affinché Nginx possa inoltrare i file PHP richiesti (Nextcloud è un’applicazione PHP) al container di Nextcloud per l’esecuzione, è necessario modificare la sua configurazione.

Crea un file “nginx.conf” e copia incolla il contenuto seguente. Quindi, salva il file ed esci.

nano nginx.conf
worker_processes auto;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;
    server_tokens   off;
    keepalive_timeout  65;
    #gzip  on;

    upstream php-handler {
        server nextcloud:9000;
    }

    server {
        listen 80;
        client_max_body_size 512M;
        fastcgi_buffers 64 4K;

        gzip on;
        gzip_vary on;
        gzip_comp_level 4;
        gzip_min_length 256;
        gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
        gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;

        add_header Referrer-Policy                      "no-referrer"       always;
        add_header X-Content-Type-Options               "nosniff"           always;
        add_header X-Download-Options                   "noopen"            always;
        add_header X-Frame-Options                      "SAMEORIGIN"        always;
        add_header X-Permitted-Cross-Domain-Policies    "none"              always;
        add_header X-Robots-Tag                         "noindex, nofollow" always;
        add_header X-XSS-Protection                     "1; mode=block"     always;

        fastcgi_hide_header X-Powered-By;
        root /var/www/html;
        index index.php index.html /index.php$request_uri;

        location = / {
            if ( $http_user_agent ~ ^DavClnt ) {
                return 302 /remote.php/webdav/$is_args$args;
            }
        }

        location = /robots.txt {
            allow all;
            log_not_found off;
            access_log off;
        }

        location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)(?:$|/)  { return 404; }
        location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console)                { return 404; }

        location ~ \.php(?:$|/) {
            rewrite ^/(?!index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|oc[ms]-provider\/.+|.+\/richdocumentscode\/proxy) /index.php$request_uri;

            fastcgi_split_path_info ^(.+?\.php)(/.*)$;
            set $path_info $fastcgi_path_info;
            try_files $fastcgi_script_name =404;

            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_param PATH_INFO $path_info;
            #fastcgi_param HTTPS on;

            fastcgi_param modHeadersAvailable true;
            fastcgi_param front_controller_active true;
            fastcgi_pass php-handler;

            fastcgi_intercept_errors on;
            fastcgi_request_buffering off;
        }

        location ~ \.(?:css|js|svg|gif)$ {
            try_files $uri /index.php$request_uri;
            expires 6M;
            access_log off;
        }

        location ~ \.woff2?$ {
            try_files $uri /index.php$request_uri;
            expires 7d;
            access_log off;
        }

        location /remote {
            return 301 /remote.php$request_uri;
        }

        location / {
            try_files $uri $uri/ /index.php$request_uri;
        }
    }
}

Infine, per garantire le prestazioni di Nextcloud, è necessario regolare alcune impostazioni PHP. Per fare questo, crea un file “php-fpm-www.conf” e incolla il seguente contenuto al suo interno.

nano php-fpm-www.conf
user = www-data
group = www-data
pm = dynamic
pm.max_children = 281
pm.start_servers = 140
pm.min_spare_servers = 93
pm.max_spare_servers = 187

Finalmente creiamo il nostro file docker-composer.yml

nano docker-compose.yml

Copia e incolla il seguente contenuto al suo interno:

Ricorda di sostituire in “web:” parametro “labels:” l’etichetta “caddy: nextcloud.emanuelegori.uno” con il nome di dominio che servirà la tua installazione di NextCloud.

Avviare Nextcloud con Docker Compose

Adesso possiamo eseguire il nostro stack di Nextcloud utilizzando Docker Compose. Per farlo, esegui il comando seguente dalla directory “nextcloud” in cui si trova il nostro file “docker-compose.yml”.

Avvia ed esegui i container in background:

docker-compose up -d

Le immagini Docker inizieranno a scaricarsi. L’intera procedura può richiedere da pochi secondi a qualche minuto.

Apri un browser web e vai all’indirizzo del dominio che hai scelto. Nel nostro caso, è https://nextcloud.emanuelegori.uno

Vedrai una schermata che ti chiede di creare un account amministrativo per Nextcloud. Come noterai, il servizio di reverse proxy Caddy ha automaticamente emesso un certificato SSL Let’s Encrypt per il dominio.

Inserisci il nome utente e la password che desideri creare e ottieni i privilegi amministrativi per l’istanza di Nextcloud, quindi fai clic sul pulsante “Installa”.

Una volta completata l’installazione, che può richiedere fino a 1-2 minuti, verrai reindirizzato a una schermata che offre l’installazione di app consigliate come Calendario, Contatti, Mail, Note, ecc.

La tua istanza personale di Nextcloud è stata installata con successo ed è pronta a soddisfare le tue esigenze di cloud.

Buon divertimento !

emanuelegori
emanuelegori

Sono Emanuele, un appassionato di informatica da quando, negli anni 90, ho scoperto il mondo digitale con il mio primo personal computer Intel 486.
Da allora, non ho mai smesso di esplorare, imparare e condividere.
Oggi mi dedico al self-hosting, all'open source e alla privacy, per costruire un futuro digitale più autonomo e sicuro.

Lascia una risposta

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Leave the field below empty!

Importante !