
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:
Aprire il browser e visitare https://cloud.tuodominio.com
Creare un account amministratore con username e password sicuri
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
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!