Progetto

Generale

Profilo

NextcloudConfig » Cronologia » Versione 5

Simone Piccardi, 16-10-2018 13:14

1 1 Simone Piccardi
h1. Installare Nextcloud 14 su Debian Stretch
2
3 2 Chiara Barbucci
Nextcloud è una applicazione web che consente di creare su un proprio server un cloud personale su cui mantenere contatti, calendari, file, senza doversi appoggiare a servizi di terzi. É una soluzione ideale che consente di mantenere privati i propri dati e non perderne il controllo, fornendo al contempo un'ampia gamma di servizi via web, compresa una funzionale piattaforma di videoconferenza.
4 1 Simone Piccardi
5
Si prenderanno in esame tutti i passi necessari per installare l'ultima versione di Nextcloud (la 14) su una Debian Stretch.
6
7
h2. Operazioni preliminari
8
9
Prima di installare Nextcloud devono essere installati i servizi da cui esso dipende. Benché sia possibile usarlo in fase di test con @sqlite@ viene comunque consigliato di utilizzare in produzione un database server esterno.  Nel nostro caso utilizzeremo MySQL (o meglio MariaDB) per la cui installazione dovremo eseguire:
10
11
<pre>
12
apt-get install mysql-server || apt-get install mariadb-server
13
</pre>
14
15
(i due comandi sono equivalenti, da Debian Stretch MariaDB sostituisce in maniera trasparente MySQL).
16
17
L'installazione di default di MySQL/MariaDB usa però il supporto standard UTF8 di MySQL, che è un UTF8 finto a 3 byte che crea problemi non appena si userà uno qualunque dei caratteri UTF8, assolutamente legali, che non rientrano nella versione ridotta (ad esempio le emoticon).
18
19 3 Simone Piccardi
Per questo motivo, per poter usare davvero UTF8, occorre riconfigurare opportunamente il server. Questo può essere fatto aggiungendo sotto @/etc/mysql/mariadb.conf.d@ un ulteriore file di configurazione (ad esempio @60-nextcloud-mysqld.cnf@) contenente:
20 1 Simone Piccardi
21
<pre>
22
[mysqld]
23
character-set-server = utf8mb4
24
collation-server = utf8mb4_general_ci
25
transaction_isolation = READ-COMMITTED
26
binlog_format = ROW
27
innodb_large_prefix = on
28
innodb_file_format = barracuda
29
innodb_file_per_table = 1
30
</pre>
31
32 4 Simone Piccardi
Si riavvii poi il servizio (con @service mysql restart@) prima di creare qualunque database. Una volta creato il database di Nextcloud (argomento trattato più avanti), si controlli dalla console di MySQL con: 
33 1 Simone Piccardi
34
<pre>
35
MariaDB [(none)]> SELECT NAME, SPACE, FILE_FORMAT FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE NAME like "nextcloud%";
36
</pre>
37
38 5 Simone Piccardi
che tutte le tabelle abbiano @Barracuda@ come valore della colonna @FILE_FORMAT@. Qualora questo non accadesse (ma se si esegue la configurazione indicata prima di creare il database questo non avverrà) si può consultare https://docs.nextcloud.com/server/14/admin_manual/configuration_database/mysql_4byte_support.html per maggiori dettagli su come risolvere la questione.
39 1 Simone Piccardi
40
41
Nextcloud è supportato da diversi web server, nel nostro caso utilizzeremo come server Apache2 con @mod_php@, pertanto occorrerà installare anche:
42
43
<pre>
44
apt-get install apache2 libapache2-mod-php
45
</pre>
46
47
Si tenga presente che il default di Debian per Apache è l'MPM event, ma PHP necessita del worker, ma questo viene installato e configurato solo        se si installa Apache insieme a PHP, se l'installazione di Apache è già stata fatta il modulo di PHP potrebbe non venire configurato, in tal caso occorrerà forzare l'uso del worker effettuando la riconfigurazione di Apache con:
48
49
<pre>
50
a2dismod mpm_event
51
a2enmod mpm_prefork
52
a2enmod php7.0
53
</pre>
54
55
Inoltre per poter utilizzare le varie funzionalità di Nextcloud serviranno inoltre gli ulteriori pacchetti PHP:
56
57
<pre>
58
apt-get install php-gd php-json php-mysql php-curl php-intl php-mcrypt \
59
  php-imagick php-xml php-zip php-bz2 php-gmp php-mbstring
60
</pre>
61
62
se oltre alle funzionalità di base servono è necessario collegarsi a IMAP e LDAP (come backend di autenticazione) occorreranno anche:
63
64
<pre>
65
apt-get install php-imap php-ldap
66
</pre>
67
68
h2. Installazione di Nextcloud
69
70
Per l'installazione occorre scaricare i sorgenti che si possono ottenere direttamente sul sito del progetto a partire dall'indirizzo
71
https://nextcloud.com/install (utilizzare il pulsante per il download per ottenere la pagina con i link). Si scarichi l'archivio della versione più recente e la relativa checksum dai collegamenti indicati nella pagina, alla stesura di queste note si è eseguito:
72
73
<pre>
74
wget https://download.nextcloud.com/server/releases/nextcloud-14.0.2.tar.bz2
75
wget https://download.nextcloud.com/server/releases/nextcloud-14.0.2.tar.bz2.sha256
76
</pre>
77
78
e si ricordi di verificare l'autenticità della checksum con la chiave GPG del progetto, dopo di che si potrà verificare la correttezza del download eseguendo nella directory dove si sono scaricati i file:
79
80
<pre>
81
root@nextcloud:~# sha256sum -c nextcloud-14.0.2.tar.bz2.sha256 
82
nextcloud-14.0.2.tar.bz2: OK
83
</pre>
84
85
a questo punto si potranno scompattare i sorgenti ed installarli nella directory di destinazione con:
86
87
<pre>
88
tar -xvjf nextcloud-14.0.2.tar.bz2
89
mv nextcloud /var/www/
90
</pre>
91
92
Si consiglia inoltre, per semplificarsi la vita durante gli aggiornamenti, di spostare la directory dei dati al di fuori di quella di installazione, per questo la si crei con:
93
94
<pre>
95
mkdir -p /srv/nextcloud/data 
96
chown www-data:www-data /srv/nextcloud/data
97
chmod 750 /srv/nextcloud/data
98
</pre>
99
100 3 Simone Piccardi
Per impostare i permessi si può anche usare lo script @nextcloudperm.sh@ allegato a questa pagina. Lo script è stato creato per gestire gli aggiornamenti, e consente di portare i permessi del codice ad uno stato in cui Apache può scrivere sui file, in modo da poter effettuare direttamente dall'interfaccia web gli aggiornamenti o le eventuali installazioni delle apps, per poi tornare ad una situazione, più sicura, in cui il server web non può più modificare il codice dell'applicativo.
101 1 Simone Piccardi
102
In generale, a parte le directory in cui è necessario il permesso di scrittura, file e directory devono appartenere a @root@ ed al gruppo @www-data@ e non essere accessibili dagli altri (con permessi rispettivamente 640 e 750).
103
104 3 Simone Piccardi
Lo script prevede come primo argomento uno fra i valori di @start@ o @stop@ che rispettivamente attivano la scrivibilità generale o la rimuovono riportandola ai soli file necessari. Pertanto per impostare i permessi ai valori corretti per la produzione basterà eseguire:
105 1 Simone Piccardi
106
<pre>
107
./nextcloudperm.sh stop
108
./nextcloudperm.sh start
109
</pre>
110
111
Lo script assume come directory per il codice @/var/www/nextcloud@ e @/srv/nextcloud/data@ per i dati, se si esegue l'installazione altrove lo si modifichi opportunamente.
112
113
114
h2. Configurazione di Apache per Nextcloud
115
116
Una volta installato il software occorrerà creare un virtual host dedicato (ad esempio in @/etc/apache2/sites-available/nextcloud.conf@) con qualcosa del tipo:
117
118
<pre>
119
<VirtualHost *:80>
120
        ServerName nextcloud.truelite.it
121
        DocumentRoot /var/www/nextcloud
122
        AddDefaultCharset utf-8
123
	Redirect permanent / https://nextcloud.truelite.it/
124
</VirtualHost>
125
<VirtualHost *:443>
126
        ServerName nextcloud.truelite.it
127
        DocumentRoot /var/www/nextcloud
128
        AddDefaultCharset utf-8
129
        <Directory /var/www/nextcloud/>
130
             AllowOverride All
131
        </Directory>
132
	# use your preferred SSL setup with your certificates
133
        SSLEngine on
134
        SSLProtocol all -SSLv2 -SSLv3
135
        SSLHonorCipherOrder on
136
	...
137
        SSLCertificateFile /etc/letsencrypt/live/truelite.it/fullchain.pem
138
        SSLCertificateKeyFile /etc/letsencrypt/live/truelite.it/privkey.pem
139
        SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
140
	
141
	LogLevel warn	
142
	ErrorLog ${APACHE_LOG_DIR}/nextcloud-error.log	
143
	# Possible values include: debug, info, notice, warn, error, crit,
144
	# alert, emerg.
145
	CustomLog ${APACHE_LOG_DIR}/nextcloud-access.log combined
146
</VirtualHost>
147
</pre>
148
149
ed abilitarlo con:
150
151
<pre>
152
a2ensite nextcloud
153
</pre>
154
155
Dovranno inoltre essere abilitati vari moduli di apache che vengono utilizzati da Nextcloud:
156
157
<pre>
158
a2enmod rewrite
159
a2enmod ssl
160
a2enmod headers
161
a2enmod env
162
a2enmod dir
163
a2enmod mime
164
</pre>
165
166
conclusa la configurazione si riavvi il servizio con:
167
168
<pre>
169
service apache2 restart
170
</pre>
171
172
h2. Preparazione del database con MySQL/MariaDB
173
174
Si dovrà poi predisporre il database per l'applicazione, per cui occorre creare un database dedicato con:
175
176
<pre>
177
mysqladmin create nextcloud
178
</pre>
179
180
ed un utente per il relativo accesso:
181
182
<pre>
183
echo "grant all privileges on nextcloud.* to 'nextcloud'@'localhost' identified by 'passwordcomplicata';" | mysql
184
</pre>
185
186
187
h2. Configurazione iniziale
188
189 3 Simone Piccardi
Benché sia possibile effettuare la configurazione iniziale del servizio (con creazione della struttura delle tabelle sul database) direttamente dall'interfaccia web, che richiederà tutti i dati necessari ed avviserà degli eventuali problemi riscontrati. In particolare occorrerà inserire un utente di amministrazione e relativa password, il pathname della directory dei dati (nel caso @/srv/nextcloud/data@ e non quella proposta sotto @/var/www/nextcloud/@) e le credenziali di accesso al database (utente, password e nome del database).
190 1 Simone Piccardi
191
Se si sono eseguiti direttamente i passi precedenti sarà possibile effettuare la configurazione iniziale direttamente dalla riga di comando utilizzando il programma di gestione @occ@. Dato che questo viene installato senza permesso di esecuzione il primo passo sarà:
192
193
<pre>
194
cd /var/www/nextcloud
195
chmod ug+x occ
196
</pre>
197
198
dopo di che si potrà effettuare la configurazione eseguendo il comando:
199
200
<pre>
201
sudo -u www-data ./occ maintenance:install --database "mysql" \
202
  --database-name "nextcloud" --database-user "nextcloud" \
203
  --database-pass "passwordcomplicata" \
204
  --admin-user "admin"  --admin-pass "passwordlungaedifficile" \
205
  --data-dir "/srv/nextcloud/data/"
206
</pre>
207
208
dove l'uso di @sudo@ è necessario (pertanto se non disponibile lo si installi con @apt-get install sudo@) per far eseguire il comando per conto dell'utente @www-data@ (altrimenti il programma si rifiuterà di proseguire suggerendo di aggiungerlo). 
209
210
211
Per consentire l'accesso occorrerà comunque abilitare il nome a dominio con cui si contatta il server con un comando analogo a: 
212
213
<pre>
214
sudo -u www-data ./occ  config:system:set trusted_domains 1 \
215
   --value=nextcloud.truelite.it
216
</pre>
217
218
che inserisce il nome a dominio fra quelli abilitati, se se ne usano altri occorrerà eseguire di nuovo il comando passando un numero progressivo diverso (il comando crea automaticamente nel file di configurazione di Nextcloud (@/var/www/nextcloud/config/config.php@) le voci in un array di cui il numero indicato è l'indice, il valore 0 è inserito all'installazione e fa riferimento al localhost e non deve essere cambiato), dopo il comando si otterrà la presenza all'interno del file di una voce del tipo:
219
220
<pre>
221
  'trusted_domains' => 
222
  array (
223
    0 => 'localhost',
224
    1 => 'nextcloud.truelite.it',
225
  ),
226
</pre>
227
228
h2. Configurazioni specifiche
229
230
Per abilitare l'autenticazione via IMAP occorre aggiungere al file di configurazione (@/var/www/nextcloud/config/config.php@):
231
232
<pre>
233
  'user_backends' => array (
234
    0 => array (
235
      'class' => 'OC_User_IMAP',
236
      'arguments' => array (
237
        0 => '{localhost:143/imap/novalidate-cert}', //questo
238
	1 => '{localhost:993/imap/ssl/novalidate-cert}', //oppure questo
239
      ),
240
    ),
241
  ),
242
</pre>