{"id":10610,"date":"2020-10-07T00:48:26","date_gmt":"2020-10-06T22:48:26","guid":{"rendered":"https:\/\/www.dreamsworld.it\/emanuele\/?p=10610"},"modified":"2020-10-15T00:02:09","modified_gmt":"2020-10-14T22:02:09","slug":"guida-completa-per-costruire-un-cloud-personale-gratuito","status":"publish","type":"post","link":"https:\/\/www.dreamsworld.it\/emanuele\/2020-10-07\/guida-completa-per-costruire-un-cloud-personale-gratuito\/","title":{"rendered":"Guida completa per costruire un cloud personale gratuito"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Uno dei problemi che incontro quando provo a suggerire di abbandonre Dropbox o Google Drive \u00e8 che, molto spesso, \u00e8 difficile fornire alternative altrettanto comode. Nel mio caso, ad esempio, <a href=\"https:\/\/www.dreamsworld.it\/emanuele\/2019-06-08\/il-mio-cloud-a-casa-mia\/\">ho configurato Nextcloud sul mio NAS<\/a> e protetto tutti i servizi di casa tramite VPN: sono ben consapevole che non tutti possano spingersi verso queste soluzioni.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Quella che ti suggerir\u00f2 adesso, \u00e8 una <strong>soluzione gratuita<\/strong> che non richiede ragionamenti su possibili scenari di <a href=\"https:\/\/it.wikipedia.org\/wiki\/Disaster_recovery\" target=\"_blank\" rel=\"noreferrer noopener\">disaster-recovery<\/a> esagerati (<em>io ho dovuto gestire la possibilit\u00e0 che il mio NAS vada distrutto<\/em>) ma che permette a chi \u00e8 leggermente pi\u00f9 <strong>coraggioso<\/strong> di avventurarsi verso soluzioni &#8220;<em>self-hosted<\/em>&#8221; che regalano un sufficiente controllo dei propri dati e della propria <a href=\"https:\/\/www.dreamsworld.it\/emanuele\/tag\/privacy\/\">privacy<\/a>.\nLa mia proposta si basa sull&#8217;utilizzo di un VPS (<em>virtual private server<\/em>). Solitamente un VPS, essendo una risorsa hardware &#8220;di qualcun altro&#8221;, ha un certo costo. Oracle per\u00f2 offre la possibilit\u00e0 di utilizzare <strong>un VPS con 100GB di spazio gratuitamente<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Oracle infatti offre dei <a href=\"https:\/\/www.oracle.com\/cloud\/free\/\" target=\"_blank\" rel=\"noreferrer noopener\">VPS in versione &#8220;<em>free tier<\/em>&#8220;<\/a>, dei tagli molto piccoli offerti principalmente per provare il servizio. Tale concessione <strong>non \u00e8 a tempo<\/strong>, pertanto per servizi poco pesanti dal punto di vista delle risorse pu\u00f2 risultare una buona soluzione, in piena legalit\u00e0, per costruire un servizio di cloud personale, con <strong>ottimo uptime e buone garanzie di backup<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Per implementare una soluzione simile ti servono:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li><strong>una carta di credito<\/strong> (non bisogna pagare nulla ma \u00e8 richiesta una carta di credito in fase di creazione dell&#8217;account Oracle)<\/li><li><strong>un dominio<\/strong> (<em>non \u00e8 obbligatorio ma certamente rende tutto pi\u00f9 armonico<\/em>) e la possibilit\u00e0 di configurare un record di tipo A sui DNS del dominio che punti all&#8217;IP del VPS. Se hai un dominio, al 99% \u00e8 possibile farlo.<\/li><\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Il primo passo da fare \u00e8 iscriverti ad <a href=\"https:\/\/www.oracle.com\/cloud\/free\/\" target=\"_blank\" rel=\"noreferrer noopener\">Oracle Free Tier<\/a>. Una volta iscritto, <strong>nella sezione Istanze va creata una nuova VM<\/strong> avendo cura di selezionare le risorse offerte &#8220;<em>gratis per sempre<\/em>&#8221; (<em>a meno di non voler iniziare a pagare per le risorse usate in stile Amazon AWS<\/em>).<\/p>\n\n\n\n<p class=\"has-large-font-size wp-block-paragraph\"><strong>I passaggi per ottenere una macchina funzionante su Oracle sono:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Crea una istanza per una nuova Virtual Machine<\/li><li>Dagli un nome<\/li><li>Seleziona come OS: Canonical Ubuntu 20.04 Minimal<\/li><li>Nelle opzioni del Network e Storage seleziona: Assegna un indirizzo IP pubblico<\/li><li>Aggiungi una chiave SSH  (puoi <a href=\"https:\/\/docs.oracle.com\/en\/cloud\/cloud-at-customer\/occ-get-started\/generate-ssh-key-pair.html\" target=\"_blank\" rel=\"noreferrer noopener\">generarne una<\/a> usando <code>ssh-keygen<\/code> se non ne hai gi\u00e0 una)<\/li><li>Nelle opzioni avanzate rimuovi la funzione di monitoring (<em>poi toglieremo l&#8217;agente dalla VM per risparmiare risorse<\/em>)<\/li><li>Verifica le risorse e abbi cura che l&#8217;istanza e il volume di boot selezionato siano &#8220;Always Free&#8221; se non intendi pagare successivamente.<\/li><li>Una volta creata la VM, assicurati di poterti collegare in SSH sul server (<em>utilizzando la chiave privata che hai configurato precedentemente<\/em>) utilizzando l&#8217;utente &#8220;ubuntu&#8221;.<\/li><\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">A questo punto dovresti essere in grado di entrare in SSH sulla macchina (<em>scegli tu il client che preferisci: su Windows consiglio Putty, su macOS va benissimo il terminale<\/em>).<\/p>\n\n\n\n<p class=\"has-large-font-size wp-block-paragraph\"><strong>I passaggi per installare Nextcloud a questo punto sono i seguenti:<\/strong><\/p>\n\n\n\n<p class=\"has-drop-cap wp-block-paragraph\">1. Aggiorna i repository, crea un&#8217;area di swap (<em>la macchina ha solo 1GB di RAM, un po&#8217; di swap torner\u00e0 utile specie se si installa anche elasticsearch<\/em>) e imposta il timezone sulla macchina<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo apt update &amp;&amp; sudo apt upgrade\nsudo apt install nano\nsudo dd if=\/dev\/zero of=\/swap bs=1M count=4k\nsudo chmod 0600 \/swap\nsudo mkswap \/swap\nsudo swapon \/swap\nsudo echo '\/swap none swap sw 0 0' &gt;&gt; \/etc\/fstab\nsudo dpkg-reconfigure tzdata<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Assicurati che l&#8217;area di swap sia stata creata e resa attiva (puoi verificare usando il comando <code>top<\/code>) e poi rimuovi gli agenti di monitoring di Oracle<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo apt purge netfilter-persistent iptables-persistent<br \/>sudo snap remove oracle-cloud-agent<\/pre>\n\n\n\n<p class=\"has-drop-cap wp-block-paragraph\">2. Installa il server web e tutti i componenti PHP necessari a Nextcloud<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo apt install nginx -y\nsudo apt install wget unzip zip -y\nsudo apt install php-fpm php-curl php-cli php-mysql php-gd php-common php-xml php-json php-intl php-pear php-imagick php-dev php-common php-mbstring php-zip php-soap php-bz2 php-gmp php-bcmath php-opcache php-apcu -y<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Spostati nella cartella di PHP per configurare un paio di righe<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">cd \/etc\/php\/7.4\/\nsudo nano fpm\/php.ini\nsudo nano cli\/php.ini\nnel primo file:\n--&gt; memory_limit=512M\nin entrambi i file:\n--&gt; date.timezone = Europe\/Rome\n--&gt; cgi.fix_pathinfo=0\n<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Modifica inoltre la configurazione di <code>www.conf<\/code> in questo modo:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo nano fpm\/pool.d\/www.conf\nNel file rimuovere i commenti a:\nenv[HOSTNAME] = $HOSTNAME\nenv[PATH] = \/usr\/local\/bin:\/usr\/bin:\/bin\nenv[TMP] = \/tmp\nenv[TMPDIR] = \/tmp\nenv[TEMP] = \/tmp<\/pre>\n\n\n\n<p class=\"has-drop-cap wp-block-paragraph\">3. Installa il server SQL e avvia i servizi<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo apt install mariadb-server -y<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Avvia i servizi, configurali per l&#8217;avvio automatico e verifica che il server SQL sia partito<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo systemctl start nginx\nsudo systemctl enable nginx\nsudo systemctl start php7.4-fpm\nsudo systemctl enable php7.4-fpm\nsudo systemctl start mariadb\nsudo systemctl enable mariadb\nsudo systemctl status mariadb\n<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Configura una password per l&#8217;utente di root del server SQL e <strong>rispondi SI<\/strong> alle altre domande&#8230;<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo mysql_secure_installation<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Entra nel server SQL (<em>inserendo la password appena scelta<\/em>) e crea l&#8217;utente e il database per Nextcloud<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo mysql -u root -p\ncreate database nextcloud_db;\ncreate user Emanuele@localhost identified by 'PaSsWorDMolToComPleSsA';\ngrant all privileges on nextcloud_db.* to Emanuele@localhost identified by 'PaSsWorDMolToComPleSsA';\nflush privileges;\n\\q<\/pre>\n\n\n\n<p class=\"has-drop-cap wp-block-paragraph\">4. Installa certbot per far s\u00ec che il servizio possa girare in HTTPS con un certificato valido rilasciato da <a href=\"https:\/\/letsencrypt.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">Let&#8217;s Encrypt<\/a><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo apt install certbot -y\nsudo systemctl stop nginx<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Hai spento il server web, adesso assicurati che <strong>nel firewall di Oracle<\/strong> siano aperte la porta 80 e la 443 verso la tua VM (<em>dovrai farlo dalla sezione Networking del pannello di controllo di Oracle<\/em>) e poi esegui i comandi successivi per generare il certificato (<em>sostituendo opportunamente il tuo dominio<\/em>)<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo certbot certonly --standalone -d nextcloud.dreamsworld.it<\/pre>\n\n\n\n<p class=\"has-drop-cap wp-block-paragraph\">5. A questo punto dovresti aver generato il certificato (<em>l&#8217;output in shell \u00e8 abbastanza eloquente<\/em>) e puoi iniziare a scaricare e installare Nextcloud<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">cd \/var\/www\/\nsudo wget -q https:\/\/download.nextcloud.com\/server\/releases\/latest.zip\nsudo unzip -qq latest.zip\nsudo chown -R www-data:www-data \/var\/www\/nextcloud\ncd \/etc\/nginx\/sites-available\/\nsudo nano nextcloud<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Dovresti aver aperto un file vuoto, riempilo con tutto quel che \u00e8 scritto qui a seguire, avendo cura di <strong>sostituire<\/strong> le due occorrenze del nome del dominio e il percorso corretto del certificato SSL<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">upstream php-handler {\n    #server 127.0.0.1:9000;\n    server unix:\/var\/run\/php\/php7.4-fpm.sock;\n}\n\nserver {\n    listen 80;\n    listen [::]:80;\n    server_name nextcloud.dreamsworld.it;\n    # enforce https\n    return 301 https:\/\/$server_name:443$request_uri;\n}\n\nserver {\n    listen 443 ssl http2;\n    listen [::]:443 ssl http2;\n    server_name nextcloud.dreamsworld.it;\n\n    # Use Mozilla's guidelines for SSL\/TLS settings\n    # https:\/\/mozilla.github.io\/server-side-tls\/ssl-config-generator\/\n    # NOTE: some settings below might be redundant\n    ssl_certificate \/etc\/letsencrypt\/live\/nextcloud.dreamsworld.it\/fullchain.pem;\n    ssl_certificate_key \/etc\/letsencrypt\/live\/nextcloud.dreamsworld.it\/privkey.pem;\n\n    # Add headers to serve security related headers\n    # Before enabling Strict-Transport-Security headers please read into this\n    # topic first.\n    #add_header Strict-Transport-Security \"max-age=15768000; includeSubDomains; preload;\" always;\n    #\n    # WARNING: Only add the preload option once you read about\n    # the consequences in https:\/\/hstspreload.org\/. This option\n    # will add the domain to a hardcoded list that is shipped\n    # in all major browsers and getting removed from this list\n    # could take several months.\n    add_header Referrer-Policy \"no-referrer\" always;\n    add_header X-Content-Type-Options \"nosniff\" always;\n    add_header X-Download-Options \"noopen\" always;\n    add_header X-Frame-Options \"SAMEORIGIN\" always;\n    add_header X-Permitted-Cross-Domain-Policies \"none\" always;\n    add_header X-Robots-Tag \"none\" always;\n    add_header X-XSS-Protection \"1; mode=block\" always;\n\n    # Remove X-Powered-By, which is an information leak\n    fastcgi_hide_header X-Powered-By;\n\n    # Path to the root of your installation\n    root \/var\/www\/nextcloud;\n\n    location = \/robots.txt {\n        allow all;\n        log_not_found off;\n        access_log off;\n    }\n\n    # The following 2 rules are only needed for the user_webfinger app.\n    # Uncomment it if you're planning to use this app.\n    #rewrite ^\/.well-known\/host-meta \/public.php?service=host-meta last;\n    #rewrite ^\/.well-known\/host-meta.json \/public.php?service=host-meta-json last;\n\n    # The following rule is only needed for the Social app.\n    # Uncomment it if you're planning to use this app.\n    #rewrite ^\/.well-known\/webfinger \/public.php?service=webfinger last;\n\n    location = \/.well-known\/carddav {\n      return 301 $scheme:\/\/$host:$server_port\/remote.php\/dav;\n    }\n    location = \/.well-known\/caldav {\n      return 301 $scheme:\/\/$host:$server_port\/remote.php\/dav;\n    }\n\n    # set max upload size\n    client_max_body_size 512M;\n    fastcgi_buffers 64 4K;\n\n    # Enable gzip but do not remove ETag headers\n    gzip on;\n    gzip_vary on;\n    gzip_comp_level 4;\n    gzip_min_length 256;\n    gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;\n    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;\n\n    # Uncomment if your server is build with the ngx_pagespeed module\n    # This module is currently not supported.\n    #pagespeed off;\n\n    location \/ {\n        rewrite ^ \/index.php;\n    }\n\n    location ~ ^\\\/(?:build|tests|config|lib|3rdparty|templates|data)\\\/ {\n        deny all;\n    }\n    location ~ ^\\\/(?:\\.|autotest|occ|issue|indie|db_|console) {\n        deny all;\n    }\n\n    location ~ ^\\\/(?:index|remote|public|cron|core\\\/ajax\\\/update|status|ocs\\\/v[12]|updater\\\/.+|oc[ms]-provider\\\/.+)\\.php(?:$|\\\/) {\n        fastcgi_split_path_info ^(.+?\\.php)(\\\/.*|)$;\n        set $path_info $fastcgi_path_info;\n        try_files $fastcgi_script_name =404;\n        include fastcgi_params;\n        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;\n        fastcgi_param PATH_INFO $path_info;\n        fastcgi_param HTTPS on;\n        # Avoid sending the security headers twice\n        fastcgi_param modHeadersAvailable true;\n        # Enable pretty urls\n        fastcgi_param front_controller_active true;\n        fastcgi_pass php-handler;\n        fastcgi_intercept_errors on;\n        fastcgi_request_buffering off;\n    }\n\n    location ~ ^\\\/(?:updater|oc[ms]-provider)(?:$|\\\/) {\n        try_files $uri\/ =404;\n        index index.php;\n    }\n\n    # Adding the cache control header for js, css and map files\n    # Make sure it is BELOW the PHP block\n    location ~ \\.(?:css|js|woff2?|svg|gif|map)$ {\n        try_files $uri \/index.php$request_uri;\n        add_header Cache-Control \"public, max-age=15778463\";\n        # Add headers to serve security related headers (It is intended to\n        # have those duplicated to the ones above)\n        # Before enabling Strict-Transport-Security headers please read into\n        # this topic first.\n        add_header Strict-Transport-Security \"max-age=15768000; includeSubDomains; preload;\" always;\n        #\n        # WARNING: Only add the preload option once you read about\n        # the consequences in https:\/\/hstspreload.org\/. This option\n        # will add the domain to a hardcoded list that is shipped\n        # in all major browsers and getting removed from this list\n        # could take several months.\n        add_header Referrer-Policy \"no-referrer\" always;\n        add_header X-Content-Type-Options \"nosniff\" always;\n        add_header X-Download-Options \"noopen\" always;\n        add_header X-Frame-Options \"SAMEORIGIN\" always;\n        add_header X-Permitted-Cross-Domain-Policies \"none\" always;\n        add_header X-Robots-Tag \"none\" always;\n        add_header X-XSS-Protection \"1; mode=block\" always;\n\n        # Optional: Don't log access to assets\n        access_log off;\n    }\n\n    location ~ \\.(?:png|html|ttf|ico|jpg|jpeg|bcmap)$ {\n        try_files $uri \/index.php$request_uri;\n        # Optional: Don't log access to other assets\n        access_log off;\n    }\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Abilita e verifica la configurazione, poi riavvia i servizi:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo ln -s \/etc\/nginx\/sites-available\/nextcloud \/etc\/nginx\/sites-enabled\/\nsudo nginx -t\nsudo systemctl restart nginx\nsudo systemctl restart php7.4-fpm<\/pre>\n\n\n\n<p class=\"has-drop-cap wp-block-paragraph\">6. Configura il firewall della macchina limitando l&#8217;accesso alle sole porte 80 e 443<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo apt install ufw\nsudo su\nfor svc in ssh http https\ndo\nufw allow $svc\ndone\nufw enable\nufw status numbered\nexit<\/pre>\n\n\n\n<p class=\"has-drop-cap wp-block-paragraph\">7. Installa Elasticsearch, il <em>&#8220;motore di ricerca&#8221;<\/em> che indicizzer\u00e0 i contenuti sul tuo cloud per ricerche velocissime (<em>con scansione anche dei contenuti dei file<\/em>)<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo apt update\nwget -qO - https:\/\/artifacts.elastic.co\/GPG-KEY-elasticsearch | sudo apt-key add -\nsudo sh -c 'echo \"deb https:\/\/artifacts.elastic.co\/packages\/7.x\/apt stable main\" &gt; \/etc\/apt\/sources.list.d\/elastic-7.x.list'\nsudo apt update\nsudo apt install elasticsearch\nsudo \/usr\/share\/elasticsearch\/bin\/elasticsearch-plugin install ingest-attachment\nsudo systemctl enable --now elasticsearch.service<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Date le risorse limitate della macchina, il servizio potrebbe fallire ad avviarsi, in tal caso aumenta il tempo di timeout e avvialo nuovamente<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo systemctl show elasticsearch | grep ^Timeout\nsudo mkdir \/etc\/systemd\/system\/elasticsearch.service.d\necho -e \"[Service]\\nTimeoutStartSec=180\" | sudo tee \/etc\/systemd\/system\/elasticsearch.service.d\/startup-timeout.conf\nsudo systemctl daemon-reload<\/pre>\n\n\n\n<p class=\"has-drop-cap wp-block-paragraph\">8. Abilita la cache nella configurazione di Nextcloud per velocizzarne il funzionamento<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo nano var\/www\/nextcloud\/config\/config.php\ninserire:\n'memcache.local' =&gt; '\\OC\\Memcache\\APCu',<\/pre>\n\n\n\n<p class=\"has-drop-cap wp-block-paragraph\">9. Installa e configura un cron per le routine di manutenzione di Nextcloud e riavvia i servizi<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo apt install cron\nsudo crontab -e -u www-data\ninserire:\n*\/15  *  *  *  * php -f \/var\/www\/nextcloud\/cron.php\nsudo systemctl restart nginx\nsudo systemctl restart php7.4-fpm<\/pre>\n\n\n\n<p class=\"has-drop-cap wp-block-paragraph\">A questo punto, se hai eseguito tutto correttamente, collegandoti a <code>https:\/\/nextcloud.TUODOMINIO.it<\/code>, dovresti vedere la pagina di configurazione di Nextcloud.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I parametri da inserire sono i seguenti (<em>sostituisci ovviamente il tuo nome e la tua password<\/em>)<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">Configurazione nextcloud:\nutente: Emanuele\npassword: PaSsWorDMolToComPleSsA\nDir dati: \/var\/www\/nextcloud\/data\nDati database: nextcloud_db<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Nelle &#8220;Impostazioni di base&#8221; di Nextcloud (l&#8217;url \u00e8 <code>\/settings\/admin<\/code>), vai a selezionare &#8220;Cron&#8221; come <strong>modalit\u00e0 di esecuzione delle attivit\u00e0 di manutenzione e installa i tre plugin necessari al funzionamento di Elasticsearch<\/strong>:  <em>Full text search  \/  Full text search &#8211; Elasticsearch Platform  \/  Full text search &#8211; Files<\/em> (questo lo fai da <code>\/settings\/apps<\/code>).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Da qui in poi, sta tutto a te. <a href=\"https:\/\/nextcloud.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">Nextcloud<\/a> \u00e8 una piattaforma di file sharing che si pu\u00f2 ampliare all&#8217;infinito attraverso i suoi plugin.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ho scritto questa guida per un amico che aveva voglia di imparare ad installare Nextcloud da s\u00e9. Se credi ti sia stata utile, se trovi imperfezioni o <strong>hai suggerimenti<\/strong> sei caldamente invitato a lasciare un commento.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Riprendiamoci i nostri dati!<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Emanuele<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Uno dei problemi che incontro quando provo a suggerire di abbandonre Dropbox o Google Drive \u00e8 che, molto spesso, \u00e8 difficile fornire alternative altrettanto comode. Nel mio caso, ad esempio, ho configurato Nextcloud sul mio NAS e protetto tutti i &hellip; <a href=\"https:\/\/www.dreamsworld.it\/emanuele\/2020-10-07\/guida-completa-per-costruire-un-cloud-personale-gratuito\/\">Leggi ancora &rarr;<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"activitypub_content_warning":"","activitypub_content_visibility":"","activitypub_max_image_attachments":4,"activitypub_interaction_policy_quote":"anyone","activitypub_status":"","footnotes":""},"categories":[4],"tags":[2784,1844,653,640,2785,1195,1391,372,2797],"class_list":["post-10610","post","type-post","status-publish","format-standard","hentry","category-internet","tag-cloud","tag-guida","tag-guide","tag-how-to","tag-nextcloud","tag-opensource","tag-privacy","tag-software","tag-vps"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.dreamsworld.it\/emanuele\/wp-json\/wp\/v2\/posts\/10610","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dreamsworld.it\/emanuele\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dreamsworld.it\/emanuele\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dreamsworld.it\/emanuele\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dreamsworld.it\/emanuele\/wp-json\/wp\/v2\/comments?post=10610"}],"version-history":[{"count":0,"href":"https:\/\/www.dreamsworld.it\/emanuele\/wp-json\/wp\/v2\/posts\/10610\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.dreamsworld.it\/emanuele\/wp-json\/wp\/v2\/media?parent=10610"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dreamsworld.it\/emanuele\/wp-json\/wp\/v2\/categories?post=10610"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dreamsworld.it\/emanuele\/wp-json\/wp\/v2\/tags?post=10610"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}