Installazione Nextcloud

Nextcloud è una valida alternativa ai più famosi servizi come GDrive, OneDrive, etc. La principale differenze è la possibilità di installare Nextclod on-premis, quindi completamente sui nostri server. L’installazione che andremo a dimostrare sarà effettuata su un Server Ubuntu 20.04. In questa installazione, avendo come obbiettivo la possibilità di bilanciare il carico sulla parte applicazione non installeremo il DB all’interno del server ma useremo un server con MySql già installato in precedenza. Iniziamo da un Server “fresh” ma con tutta la parte di aggiornamenti già eseguita, per questo potete riferirvi al mio articolo Aggiornare Ubuntu. Come prima parte andiamo ad installare tutti i requisiti al funzionamento di Nextcloud

sudo apt install apache2 libapache2-mod-php7.4
sudo apt install php7.4-gd php7.4-mysql php7.4-curl php7.4-mbstring php7.4-intl
sudo apt install php7.4-gmp php7.4-bcmath php-imagick php7.4-xml php7.4-zip
sudo apt install php-apcu
sudo apt-get install libmagickcore-6.q16-6-extra

pongo l’attenzione sul pacchetto “php-apcu” che ci servirà per attivare la gestione della “cache” fortemente consigliata per ottenere delle ottime performance. Procediamo con il download e preparazione del pacchetto TAR di Nextcloud, nel nostro caso nella versione 21.

cd /tmp
wget https://download.nextcloud.com/server/releases/nextcloud-21.0.0.tar.bz2
sudo tar -xjvf nextcloud-21.0.0.tar.bz2
sudo cp -r nextcloud /var/www

con i passaggio appena effettuati troveremo la carella nextcloud direttamente in /var/www, la nostra installazione infatti avrà luogo nella path /var/www/nextcloud A questo punto sono necessari alcuni passaggio prima di poter avviare il wizard grafico per la prima configurazione. Attiviamo i moduli di Apche necessari a Nextcloud con i comandi

sudo a2enmod ssl
sudo a2enmod rewrite
sudo a2enmod headers
sudo a2enmod env
sudo a2enmod dir
sudo a2enmod mime

procediamo con la creazione nella path /etc/apache2/sites-available/ del file di configurazione per il redirect in https, parte opzionale ma secondo me assolutamente necessaria

cd /etc/apache2/sites-available/
sudo nano nextcloud.conf

Il contenuto del file dovrà essere come segue

<VirtualHost *:80>
  ServerAdmin admin@example.com
  Redirect permanent / https://url/
</VirtualHost>

prima del prossimo passaggio sarà necessario copiare all’interno del nostro server il nostro certificato SSL con la sua chiave privata, nel mio caso userò la path /etc/apache2/ssl/ Ora potremmo procedere alla creazione del file nextcloud-ssl.conf per la gestione del sito https

<IfModule mod_ssl.c>
 <VirtualHost *:443>
   DocumentRoot "/var/www/nextcloud"

   ErrorLog ${APACHE_LOG_DIR}/error.log
   CustomLog ${APACHE_LOG_DIR}/access.log combined

   <Directory /var/www/nextcloud/>
     Options +FollowSymlinks
     AllowOverride All

     SetEnv HOME /var/www/nextcloud
     SetEnv HTTP_HOME /var/www/nextcloud
     Satisfy Any
   </Directory>

   #SSLEngine on
   SSLCertificateFile /etc/apache2/ssl/cert.crt
   SSLCertificateKeyFile /etc/apache2/ssl/cert.key
   Include /etc/apache2/ssl/options-ssl-apache.conf <-- attenzione
   
   <IfModule mod_headers.c>
     Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains; preload"
   </IfModule>
 </VirtualHost>
</IfModule>

prima di eseguire Apache dovremmo ancora creare il file options-ssl-apache.conf che definirà la parte di configurazione SSL

sudo nano /etc/apache2/ssl/options-ssl-apache.conf

questo il contenuto

SSLEngine on

# Configuration
SSLProtocol             all -SSLv2 -SSLv3
SSLCipherSuite          ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES2>
SSLHonorCipherOrder     on
SSLCompression          off

SSLOptions +StrictRequire

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" vhost_combined
LogFormat "%v %h %l %u %t \"%r\" %>s %b" vhost_common

come ultimo passaggio andiamo ad attivare il file nextcloud-ssl.conf, disattiviamo i siti di default, configuriamo correttamente le permission e avviamo Apache

sudo a2ensite default-ssl.conf
sudo a2dissite 000-default
sudo a2dissite default-ssl
sudo chown -R www-data:www-data /var/www/nextcloud/
sudo systemctl start apache2

A questo punto possiamo eseguire il wizard web al link https://url, una volta creato il file config.php da parte del wizard vi suggerisco un confronto con il mio per attivare delle funzionalità aggiuntive

 'instanceid' => 'vostra_istanza_generata_dal_wizard',
  'passwordsalt' => 'generata_dal_wizard',
  'secret' => 'generata_dal_wizardA',
  'trusted_domains' =>
  array (
    0 => 'url.local',
    1 => 'url',
  ),
  'datadirectory' => 'mount_dei_vostri_dati',
  'dbtype' => 'mysql',
  'version' => '21.0.0.18',
  'overwrite.cli.url' => 'https://url/',
  'htaccess.RewriteBase' => '/',
  'dbname' => 'nextcloud',
  'dbhost' => 'server_mysql',
  'dbport' => '',
  'dbtableprefix' => 'oc_',
  'mysql.utf8mb4' => true,
  'dbuser' => 'user_mysql',
  'dbpassword' => 'password_user_mysql',
  'installed' => true,
  'mail_from_address' => 'nc_noreplay',
  'mail_smtpmode' => 'smtp',
  'mail_sendmailmode' => 'smtp',
  'mail_domain' => 'domaini_smtp',
  'mail_smtphost' => 'indirizzo_vs_server_smtp',
  'default_phone_region' => 'IT',
  'default_locale' => 'it_IT',
  'default_language' => 'it',
  'memcache.local' => '\OC\Memcache\APCu',
  'enable_previews' => true,
  'maintenance' => false

ogni volta che modifichiamo il file config.php dobbiamo lanciare questo comando per ri-generare il file .htaccess

sudo -u www-data php /var/www/nextcloud/occ maintenance:update:htaccess
sudo systemctl restart apache2 <-- riavviare sempre Apache

la parte più importante che possiamo notare nel mio file config.php e che non viene inserita dal wizard è -> ‘memcache.local’ => ‘\OC\Memcache\APCu’ questo comando attiva il motore di cache. anche questo -> ‘overwrite.cli.url’ => ‘https://url/’ e ‘htaccess.RewriteBase’ => ‘/’ servere per eliminare “index.php” da ogni vostra url, risulta molto più leggibile e comodo da ricordare anche durante la condivisione dei link. Per ultima parte nella sezione “trusted_domains” vanno indicati tutti gli url a cui vogliamo che Nextcloud possa rispondere, il mio suggerimento è sempre indicare almeno, quello locale e quello pubblico.

Il manuale ufficiale lo trovate al link Nextcloud Admin Manual

Questo articolo presuppone una buona conoscenza di Linux per le parti base e della distribuzione Ubuntu 20.04, in alcuni passaggi vengono volutamente scontate certe conoscenze per porre maggior attenzione all’oggetto principale Nextcloud.