Salta al contenuto principale

Il Cuore del Nostro Cloud - Nextcloud

Inviato da tuxsa il
cloud

Ben tornati nella nostra serie. Dopo aver configurato il reverse proxy con Nginx, oggi installeremo Nextcloud, la soluzione completa che diventerà il centro del nostro ecosistema cloud domestico.

Obiettivo della puntata: Installare e configurare Nextcloud, integrandolo con il nostro reverse proxy Nginx e preparandolo per essere il sostituto privato di servizi come Dropbox, Google Drive e Microsoft Office Online.

1. Perché Nextcloud?

Nextcloud è la soluzione open source più completa per un cloud privato. Ecco cosa offre:

  • File storage e sincronizzazione (alternativa a Dropbox/Google Drive)

  • Calendar e Contacts (sostituto di Google Calendar/Contacts)

  • Collaborazione documenti online (simile a Google Docs/Office Online)

  • Galleria foto automatica con riconoscimento facciale

  • Note, Task e tantissime altre app attraverso l'ecosistema di estensioni

  • Completamente auto-ospitato e sotto il vostro controllo

2. Preparazione dell'ambiente

Prima di installare Nextcloud, prepariamo l'ambiente con tutti i requisiti necessari:

Installazione dei pacchetti necessari:

sudo apt update
sudo apt install php-fpm php-common php-mbstring php-xmlrpc php-soap php-apcu php-smbclient php-ldap php-redis php-gd php-xml php-intl php-json php-imagick php-mysql php-cli php-curl php-zip php-sqlite3

Installazione e configurazione di MariaDB (MySQL):

sudo apt install mariadb-server
sudo mysql_secure_installation

Creazione del database per Nextcloud:

sudo mysql -u root -p
# Nel prompt di MySQL eseguire:
CREATE DATABASE nextcloud;
CREATE USER 'nextclouduser'@'localhost' IDENTIFIED BY 'password_molto_sicura';
GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextclouduser'@'localhost';
FLUSH PRIVILEGES;
EXIT;

3. Download e installazione di Nextcloud

Scarichiamo l'ultima versione di Nextcloud:

cd /var/www
sudo wget https://download.nextcloud.com/server/releases/latest.zip
sudo unzip latest.zip
sudo rm latest.zip
sudo chown -R www-data:www-data /var/www/nextcloud
sudo chmod -R 755 /var/www/nextcloud

4. Configurazione di Nginx per Nextcloud

Creiamo un file di configurazione Nginx per Nextcloud:

sudo nano /etc/nginx/sites-available/nextcloud

Incollare la seguente configurazione (adattando il server_name al vostro dominio):

upstream php-handler {
    server unix:/run/php/php8.2-fpm.sock;
}

server {
    listen 80;
    server_name cloud.tuodominio.com;
    
    # Redirect HTTP to HTTPS
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    server_name cloud.tuodominio.com;
    
    # SSL configuration (usare i certificati di Let's Encrypt)
    ssl_certificate /etc/letsencrypt/live/cloud.tuodominio.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/cloud.tuodominio.com/privkey.pem;
    
    # Path to the root of your Nextcloud installation
    root /var/www/nextcloud;
    
    # Add headers to serve security related headers
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Robots-Tag none;
    add_header X-Download-Options noopen;
    add_header X-Permitted-Cross-Domain-Policies none;
    add_header Referrer-Policy no-referrer;
    
    # Set max upload size
    client_max_body_size 10G;
    
    # Enable gzip but do not remove ETag headers
    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;
    
    # Pagespeed is not supported by Nextcloud, so disable it
    pagespeed off;
    
    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;
    }
    
    # Make a regex exception for `/.well-known` so that clients can still
    # access it despite the existence of the regex rule
    # `location ~ /(\.|autotest|...)` which would otherwise handle requests
    # for `/.well-known`.
    location ^~ /.well-known {
        # The rules in this block are an adaptation of the rules
        # in `.htaccess` that concern `/.well-known`.
        
        location = /.well-known/carddav { return 301 /remote.php/dav/; }
        location = /.well-known/caldav  { return 301 /remote.php/dav/; }
        
        location /.well-known/acme-challenge    { try_files $uri $uri/ =404; }
        location /.well-known/pki-validation    { try_files $uri $uri/ =404; }
        
        # Let Nextcloud's API for `/.well-known` URIs handle all other
        # requests by passing them to the front-end controller.
        return 301 /index.php$request_uri;
    }
    
    # Rules borrowed from `.htaccess` to hide certain paths from clients
    location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)(?:$|/)  { return 404; }
    location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console)                { return 404; }
    
    # Ensure this block, which passes PHP files to the PHP process, is above the blocks
    # handling static assets (as seen below). If this block is not declared first,
    # then Nginx will encounter an infinite rewriting loop when it prepends `/index.php`
    # to the URI, resulting in a HTTP 500 error response.
    location ~ \.php(?:$|/) {
        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;         # Avoid sending the security headers twice
        fastcgi_param front_controller_active true;     # Enable pretty urls
        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;         # Cache-Control policy borrowed from `.htaccess`
        access_log off;     # Optional: Don't log access to assets
    }
    
    location ~ \.woff2?$ {
        try_files $uri /index.php$request_uri;
        expires 7d;         # Cache-Control policy borrowed from `.htaccess`
        access_log off;     # Optional: Don't log access to assets
    }
    
    # Rule borrowed from `.htaccess`
    location /remote {
        return 301 /remote.php$request_uri;
    }
    
    location / {
        try_files $uri $uri/ /index.php$request_uri;
    }
}

Abilitare il sito e testare la configurazione:

sudo ln -s /etc/nginx/sites-available/nextcloud /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

5. Installazione via Web

Ora completiamo l'installazione attraverso l'interfaccia web:

  1. Aprire il browser e visitare https://cloud.tuodominio.com

  2. Creare un account amministratore con username e password sicuri

  3. Configurare la connessione al database:

    • Tipo database: MySQL/MariaDB

    • Utente database: nextclouduser

    • Password database: la password scelta in precedenza

    • Nome database: nextcloud

    • Host database: localhost

  4. Cliccare su "Installa" e attendere il completamento

6. Configurazioni post-installazione

Configurazione di Redis per le performance (opzionale ma consigliato):

sudo apt install redis-server
sudo nano /var/www/nextcloud/config/config.php

Aggiungere queste righe alla configurazione (prima della parentesi finale):

'memcache.local' => '\\OC\\Memcache\\Redis',
'memcache.locking' => '\\OC\\Memcache\\Redis',
'redis' => [
    'host' => 'localhost',
    'port' => 6379,
],

Configurazione di Cron per le operazioni in background:

sudo crontab -u www-data -e

Aggiungere la riga (assicurarsi di sostituire il percorso se diverso):

*/5  *  *  *  * php -f /var/www/nextcloud/cron.php

7. App e funzionalità aggiuntive

Nextcloud ha un ecosistema di app che potete installare per estenderne le funzionalità:

  • Calendar e Contacts per gestire agenda e contatti

  • Notes per appunti testuali

  • Tasks per la gestione delle attività

  • Collabora Online per l'editing collaborativo di documenti

  • Talk per chat e videochiamate

  • Photos per la galleria foto con riconoscimento facciale

8. Client desktop e mobile

Nextcloud offre client per tutti i dispositivi:

  • Desktop: Client per Windows, macOS e Linux per sincronizzare i file

  • Mobile: App per iOS e Android per accedere ai file, calendario, contatti

  • WebDAV: Accesso diretto via WebDAV da qualsiasi client compatibile

9. Manutenzione e backup

Ecco alcuni comandi utili per la manutenzione:

# Modalità manutenzione
sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --on

# Disattivare modalità manutenzione
sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --off

# Aggiornare Nextcloud
sudo -u www-data php /var/www/nextcloud/occ upgrade

# Vedere lo stato del sistema
sudo -u www-data php /var/www/nextcloud/occ status

Consiglio: Configurate un backup regolare della cartella /var/www/nextcloud e del database Nextcloud per non perdere i vostri dati.

Prepariamoci per la prossima puntata

Ora abbiamo un cloud privato completo e funzionante! Nel prossimo articolo, che sarà l'ultimo della serie, parleremo di backup e manutenzione avanzata:

  • Strategie di backup per i dati e la configurazione

  • Monitoraggio del server

  • Manutenzione periodica

  • Aggiornamenti di sicurezza

Problemi con Nextcloud?

Lascia un commento qui sotto con le tue difficoltà, ti aiuterò a risolverle!


Prossima puntata: Backup e Manutenzione - Conservare i propri dati al sicuro

Non dimenticare di iscriverti alla newsletter per non perdere le prossime puntate!