Progetto

Generale

Profilo

DrupalInstall » Cronologia » Versione 33

Simone Piccardi, 22-12-2010 16:23

1 33 Simone Piccardi
h1. Installare e configurare _Drupal_ a livello di intero server
2 1 Amministratore Truelite
3 33 Simone Piccardi
Benché sia disponibile anche nei pacchetti per _Debian_ ed _Ubuntu_, la versione distribuita dal progetto stesso (a partire da http://www.drupal.org) è normalmente molto più aggiornata (al momento della scrittura di queste note su Sid la versione disponibile era la 4.5.8 contro la 4.7.4 ufficiale). Per questo, nonostante manutenzione ed aggiornamento diventino più difficili, tratteremo l'installazione a partire dai sorgenti.
4 1 Amministratore Truelite
5 33 Simone Piccardi
Il problema generale della configurazione di _Drupal_ è che il programma è pensato per essere installato nella home di un utente via FTP e non come parte delle applicazioni web presenti su un server. Questo comporta che la procedura illustrata nella distribuzione ufficiale presenta una serie di problemi sia di efficienza che di sicurezza.
6 1 Amministratore Truelite
7 33 Simone Piccardi
Nel nostro caso vedremo come fare una installazione a livello di applicazione web installata su un server e non nella home di un utente. Il primo passo è quello di scaricare i sorgenti di _Drupal_ e scompattarli nella directory di destinazione; abbiamo scelto di mantenere tutto sotto la directory @/usr/share/local/drupal@. I comandi da eseguire sono i seguenti: 
8 32 Amministratore Truelite
9
<pre>
10 1 Amministratore Truelite
cd
11
wget http://ftp.osuosl.org/pub/drupal/files/projects/drupal-4.7.x.tar.gz
12
cd /usr/share/local/drupal
13
tar -xvzf ~/drupal-4.7.x.tar.gz
14
mv drupal-4.7.x drupal
15
</pre>
16 32 Amministratore Truelite
17 33 Simone Piccardi
Occorre poi creare il database, nel caso specifico si è installato MySQL, (per l'impostazione iniziale del quale si veda [[MySQLInitConf]]) e creato un database dedicato chiamato *sitodrupal*; poi si sono dati i privilegi di gestione per detto database ad un apposito utente con:
18
19 32 Amministratore Truelite
<pre>
20 1 Amministratore Truelite
mysqladmin  -u root -p create sitodrupal
21
mysql -u root -p
22
...
23
mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX,
24
       ALTER, CREATE TEMPORARY TABLES, LOCK TABLES ON sitodrupal.*  TO
25
      'utentedrupal'@'localhost' IDENTIFIED BY 'passwordsegreta';
26
</pre>
27 33 Simone Piccardi
28
fatto questo si sono create le tabelle con l'apposito script fornito da _Drupal_:
29
30 1 Amministratore Truelite
<pre>
31 32 Amministratore Truelite
cd /usr/share/local/drupal
32 1 Amministratore Truelite
mysql -u utentedrupal -p sitodrupal < database/database.4.1.mysql
33 2 Amministratore Truelite
</pre>
34 33 Simone Piccardi
35
è modificato il file @sites/default/settings.php@ impostando il valore: 
36
37 1 Amministratore Truelite
<pre>
38
$db_url = 'mysql://utentedrupal:passwordsegreta@localhost/sitodrupal';
39
</pre>
40 32 Amministratore Truelite
41 1 Amministratore Truelite
Per la sicurezza dell'installazione è anzitutto opportuno impostare dei permessi adeguati sui file, questo significa assegnare a _root_ tutti i file in modo che non siano modificabili da Apache, lo si fa con qualcosa del tipo:
42 33 Simone Piccardi
43 32 Amministratore Truelite
<pre>
44 1 Amministratore Truelite
chown -R root.root /usr/share/local/drupal
45 32 Amministratore Truelite
</pre>
46 1 Amministratore Truelite
47 33 Simone Piccardi
Questo però non consente a _Drupal_ di eseguire l'upload di file (ad esempio immagini) sul server. _Drupal_ infatti mantiene i suddetti file in una sotto-directory @files@ di quella in cui si è installato il programma; se questa non esiste, viene dal programma creata al primo upload.
48 1 Amministratore Truelite
49 33 Simone Piccardi
Il problema è che avendo installato il tutto sotto @/usr@ e senza permesso di scrittura per Apache questo meccanismo non funzionerà. Per mantenre un minimo di coerenza con il FHS, sarà necessario crare un'altra directory sotto @/var@ e dargli adeguati permessi (in modo che Apache possa scriverci), per poi usare un link simbolico; lo si è fatto con i comandi: 
50
51 1 Amministratore Truelite
<pre>
52
mkdir /var/www/drupal/files
53
chmod 755 /var/www/drupal/files
54
chown www-data www-data /var/www/drupal/files
55
cd /usr/share/local/drupal
56
ln -s /var/www/drupal/files files
57
</pre>
58
59 33 Simone Piccardi
Occorre infine configurare Apache perché sia in grado di visualizzare il sito; anzitutto occorre installare ed abilitare @mod_php5@, per questo si è fatto: 
60
61 1 Amministratore Truelite
<pre>
62 21 Amministratore Truelite
apt-get install php5-mysql php5-gd libapache2-mod-php5 
63 32 Amministratore Truelite
a2enmod php5
64
</pre>
65 23 Amministratore Truelite
66 33 Simone Piccardi
inoltre occorrerà anche attivare SSL per consentire l'uso sicuro dell'interfaccia di amministrazione e creare un opportuno virtual host per le connessioni sulla porta 443 (tralasciamo questo passaggio, non essendo legato all'installazione di _Drupal_).
67
68
Infine, dato che nel nostro caso si è deciso di rendere visibile il sito sotto una URL del tipo di @http://www.miosito.it/drupal@, si è modificato il file di configurazione del sito (nel caso si tratta di @/etc/apache2/sites-available/default@) inserendovi la direttiva: 
69
70 32 Amministratore Truelite
<pre>
71
Alias /drupal /usr/local/share/drupal/
72 1 Amministratore Truelite
</pre>
73 32 Amministratore Truelite
74 33 Simone Piccardi
Un altro aspetto riguardante la configurazione di Apache è quello della riscrittura delle URL in modo da renderle più gradevoli (e facili da ricordare). Questo viene abilitato in _Drupal_ dal menu _administer -> setting_, nella sezione delle impostazioni generali. Perché funzioni però è necessario abilitare delle _rewrite rules_, che l'installazione di default mantiene nel file @.htaccess@, posto nella directory principale (@/usr/local/share/drupal/)@. 
75 32 Amministratore Truelite
76 1 Amministratore Truelite
Dato che l'uso di questo file comporta un maggior carico di lavoro per il server (che lo rilegge ad ogni accesso) si è preferito inserire la suddetta configurazione dentro la configurazione di Apache, inserendo nel solito file di configurazione la seguente sezione:
77 33 Simone Piccardi
78 1 Amministratore Truelite
<pre>
79 13 Amministratore Truelite
<Directory "/usr/local/share/drupal">
80 1 Amministratore Truelite
        # Protect files and directories from prying eyes.
81
        <FilesMatch "(\.(engine|inc|install|module|sh|.*sql|theme|tpl(\.php)?|xtmpl)|code-style\.pl|Entries.*|Repository|Root)$">
82
                Order deny,allow
83
                Deny from all
84 13 Amministratore Truelite
        </FilesMatch>
85 1 Amministratore Truelite
86
        # Set some options.
87
        Options -Indexes
88
        Options +FollowSymLinks
89
        # Override PHP settings. More in sites/default/settings.php
90
        # but the following cannot be changed at runtime.
91 13 Amministratore Truelite
        # PHP 5, Apache 1 and 2
92
        <IfModule mod_php5.c>
93
          php_value magic_quotes_gpc                0
94
          php_value register_globals                0
95 1 Amministratore Truelite
          php_value session.auto_start              0
96
        </IfModule>
97 32 Amministratore Truelite
98 1 Amministratore Truelite
        # Reduce the time dynamically generated pages are cache-able.
99
        <IfModule mod_expires.c>
100 33 Simone Piccardi
          ExpiresByType text/html A1
101 1 Amministratore Truelite
        </IfModule>
102
103 32 Amministratore Truelite
        # Various rewrite rules.
104
        <IfModule mod_rewrite.c>
105 33 Simone Piccardi
          RewriteEngine on
106
          # Modify the RewriteBase if you are using Drupal in a subdirectory and                               
107 1 Amministratore Truelite
          # the rewrite rules are not working properly.
108 33 Simone Piccardi
          RewriteBase /drupal
109 1 Amministratore Truelite
110
          # Rewrite current-style URLs of the form 'index.php?q=x'.
111 33 Simone Piccardi
          RewriteCond %{REQUEST_FILENAME} !-f
112
          RewriteCond %{REQUEST_FILENAME} !-d
113
          RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
114 32 Amministratore Truelite
        </IfModule>
115
</Directory>
116 23 Amministratore Truelite
</pre>
117 32 Amministratore Truelite
118 33 Simone Piccardi
Si tenga presente che avendo spostato tutto sotto una URL @/drupal@, è necessaria anche la direttiva @RewriteBase /drupal@ (qualora si sia fatta una scelta diversa si modifichino di conseguenza questa direttiva e la precedente @Alias@). Inoltre perché le regole di riscrittura funzionino occorre anche abilitare il rispettivo modulo di Apache con: 
119
120 32 Amministratore Truelite
<pre>
121
a2enmod rewrite
122 25 Amministratore Truelite
</pre>
123
124 33 Simone Piccardi
Una volta cambiata la configurazione e riavviato Apache si abbia cura di rimuovere @.htaccess@. 
125
126 32 Amministratore Truelite
h2. Configurazione di sicurezza
127 1 Amministratore Truelite
128
Una volta eseguita la configurazione di base è opportuno proteggere adeguatamente gli accessi; per questo motivo si abbia cura di redirigere sotto SSL la pagina assegnata al login degli utenti. Questo si potrà fare con qualcosa del tipo:
129 33 Simone Piccardi
130 32 Amministratore Truelite
<pre>
131 25 Amministratore Truelite
<VirtualHost *:80>
132 1 Amministratore Truelite
        Include "/etc/apache2/sites-available/config-common"
133 25 Amministratore Truelite
        Redirect /drupal/login https://www.miosito.it/drupal/login
134 1 Amministratore Truelite
</VirtualHost>
135
</pre>
136 25 Amministratore Truelite
137 33 Simone Piccardi
(posto che si siano messe tutte le precedenti configurazione comuni nel file @config-common@).
138
139
Un secondo aspetto della sicurezza è quello di diminuire la durata delle sessioni (il default è 2000000 di secondi), questo lo si fa andando a modificare le impostazioni nel file @sites/default/settings.php@, ed in particolare: 
140
141 1 Amministratore Truelite
<pre>
142 25 Amministratore Truelite
ini_set('arg_separator.output',     '&amp;');
143 1 Amministratore Truelite
ini_set('magic_quotes_runtime',     0);
144
ini_set('magic_quotes_sybase',      0);
145 25 Amministratore Truelite
ini_set('session.cache_expire',     86400);
146 1 Amministratore Truelite
ini_set('session.cache_limiter',    'none');
147
ini_set('session.cookie_lifetime',  86400);
148 32 Amministratore Truelite
ini_set('session.gc_maxlifetime',   86400);
149
ini_set('session.save_handler',     'user');
150 26 Amministratore Truelite
ini_set('session.use_only_cookies', 1);
151 23 Amministratore Truelite
ini_set('session.use_trans_sid',    0);
152
ini_set('url_rewriter.tags',        _);
153 1 Amministratore Truelite
</pre>
154 32 Amministratore Truelite
155
156 33 Simone Piccardi
h2. Come aggiornare _Drupal_
157 32 Amministratore Truelite
158 33 Simone Piccardi
Una volta eseguita l'installazione iniziale, fintanto che ci si mantiene nella stessa serie di sviluppo, sarà sufficiente scaricare la nuova versione del programma e riscompattare i file; si dovrà ripetere la correzione dei permessi e la creazione del link simbolico alla directory @files@. Si abbia sempre cura di spostare la precedente installazione in modo da mantenerne le configurazioni: 
159 23 Amministratore Truelite
160 1 Amministratore Truelite
<pre>
161 23 Amministratore Truelite
cd /usr/share/local/
162
mv drupal drupal_old
163 31 Amministratore Truelite
tar -xvzf ~/drupal-4.7.new.tar.gz
164 1 Amministratore Truelite
mv drupal-4.7.new drupal
165
cp drupal_old/sites/default/settings.php drupal/sites/default/settings.php
166
cd drupal
167 27 Amministratore Truelite
ln -s /var/www/drupal/files files
168 28 Amministratore Truelite
rm .htaccess
169 1 Amministratore Truelite
</pre>
170 28 Amministratore Truelite
171 1 Amministratore Truelite
Inoltre se si sono installati dei moduli aggiuntivi si abbia cura di verificare se esistono aggiornamenti anche per questi, e di reinstallarli nella nuova versione:
172 33 Simone Piccardi
173 1 Amministratore Truelite
<pre>
174 31 Amministratore Truelite
cd /usr/share/local/
175 1 Amministratore Truelite
cp -a drupal_old/modules/moduloaggiuntivo drupal/modules/
176
</pre>
177
178 33 Simone Piccardi
La cosa si complica notevolmente qualora invece si debba passare ad una diversa _major release_, in particolare il passaggio dalla versione 4.7 alla 5.1 è reso molto complicato dalle variazioni effettuate alla struttura del database, che richiedono un passaggio per gradi, con la necessità di eseguire prima l'upgrade alla versione 5.0 e da questa alla 5.1.
179 1 Amministratore Truelite
180 29 Amministratore Truelite
La procedura suggerita in questo caso è installare la nuova versione su un sito di test, utilizzando un backup della versione corrente. Il primo passo allora è duplicare i file della precedente installazione con:
181 33 Simone Piccardi
182 1 Amministratore Truelite
<pre>
183
cp -a drupal drupal_new
184
cp -a /var/www/drupal/files /var/www/drupal/files_new
185
rm drupal_new/files
186 32 Amministratore Truelite
ln -s /var/www/drupal/files_new drupal_new/files
187 31 Amministratore Truelite
</pre>
188 32 Amministratore Truelite
189 31 Amministratore Truelite
Poi occorre replicare i dati del database, per questo prima si deve fare un backup dello stesso, ed usare quest'ultimo per creare un nuovo database per il sito di prova, questo si fa con:
190 33 Simone Piccardi
191 30 Amministratore Truelite
<pre>
192
mysqldump -u utentedrupal -p sitodrupal > db_sito.sql
193 1 Amministratore Truelite
mysqadmin -u root -p create nuovosito
194
</pre>
195 33 Simone Piccardi
196 1 Amministratore Truelite
dopo di che si devono assegnare i permessi anche sul sito replicato, in maniera analoga a quanto fatto in sede di installazione, con
197 33 Simone Piccardi
198 31 Amministratore Truelite
<pre>
199 32 Amministratore Truelite
use nuovosito; 
200 31 Amministratore Truelite
GRANT ALL PRIVILEGES ON nuovosito.* TO utente@localhost IDENTIFIED BY 'password';
201 32 Amministratore Truelite
</pre>
202 33 Simone Piccardi
203
qualora si debba resettare la password di amministrazione (quella dell'utente con uid 1 dentro _Drupal_) si potranno invece utilizzare i seguenti comandi:
204
205 31 Amministratore Truelite
<pre>
206
use nuovosito;
207
update users set pass=md5('NEWPASS') where uid = 1;
208
</pre>
209 33 Simone Piccardi
210 31 Amministratore Truelite
ed infine si potranno reinserire i dati con:
211 33 Simone Piccardi
212 31 Amministratore Truelite
<pre>
213
mysql -u utente -p nuovosito < db_sito.sql
214
</pre>
215
216 33 Simone Piccardi
Fintanto che si è installato un solo sito dovrebbe essere sufficiente modificare i parametri in @sites/default/settings.php@ per riflettere la nuova URL del sito e la diversa stringa di connessione al database, per riottenere tutto, qualora si siano inseriti siti con la tecnica di tante directory separate sotto sites le cose possono complicarsi un bel po', perché queste vanno rinominate per riflettere la posizione del nuovo sito e se ci sono dei temi dentro, dato che alcuni pathname sono nel database, si possono avere comunque disfunzioni, per cui alla fine oltre a rinominare può essere il caso di lasciare dei link simbolici con il vecchio nome. 
217 31 Amministratore Truelite
218 33 Simone Piccardi
Per eseguire l'upgrade occorre mettere collegarsi come amministratore, impostare un tema di default e disabilitare tutti i moduli, dopo di che, se non si sono apportate modifiche significative, e se il passaggio è minore (cioè ad una versione successiva nella stessa serie di sviluppo) è sufficiente scompattare i sorgenti della nuova versione sul sito corrente, e poi ripristinare le configurazioni, in sostanza qualcosa del tipo:
219
220 31 Amministratore Truelite
<pre>
221
cd /usr/local/share
222 32 Amministratore Truelite
mv drupal_new/sites/default sitedefault
223
mv drupal_new drupal-4.7.6
224 31 Amministratore Truelite
tar -xvzf /root/software/drupal-4.7.6.tar.gz
225
mv drupal-4.7.6 drupal_new
226
rm -fR drupal_new/sites/default
227 32 Amministratore Truelite
mv sitedefault drupal_new/sites/default
228 31 Amministratore Truelite
</pre>
229 32 Amministratore Truelite
230 33 Simone Piccardi
(eventualmente si ripristinino i permessi come illustrato in precedenza) tutto questo andrà fatto restando collegati come amministratore, in modo da poter eseguire senza problemi lo script @update.php@ (accessibile dall'interfaccia di configurazione dei moduli o all'indirizzo standard @http://www.miosito.it/drupal/update.php@. In caso questo non fosse accessibile occorrerà seguire le istruzioni riportate nella pagina di errore (in sostanza modificare lo script per permetterne l'esecuzione da chiunque). 
231 31 Amministratore Truelite
232 33 Simone Piccardi
Una volta eseguito l'aggiornamento, se non ci sono stati errori (o se questi non sono significativi) si possono riabilitare i moduli, avendo cura di aggiornare anche questi, qualora vi fossero nuove versioni, e di rieseguire ogni volta che si riabilita un modulo.
233
234
Se il passaggio è dal 4.7 al 5.1, vista l'entità dei cambiamenti, il procedimento si complica, conviene di nuovo fare una copia del sito originale (che si suppone sia aggiornato all'ultima versione del 4.7) come illustrato in precedenza, e poi però una volta che su detta copia si siano disabilitati i moduli e impostato un tema di default, si deve passare direttamente ai sorgenti della nuova versione di drupal con qualcosa del tipo:
235
236 32 Amministratore Truelite
<pre>
237
tar -xvzf /root/software/drupal-5.0.tar.gz
238 31 Amministratore Truelite
rm -fR drupal-5.0/sites/default
239
cp -a drupal_new/sites/default drupal-5.0/sites/
240
rm -fR drupal_new 
241
mv drupal-5.0 drupal_new
242
</pre>
243 32 Amministratore Truelite
244 33 Simone Piccardi
(si abbia cura di copiare, oltre a @sites/default@, ogni altra eventuale personalizzazione). 
245
246
A questo punto si potrà eseguire l'aggiornamento alla versione 5.0 usando lo script @update.php@, se non si hanno errori si dovrà ripetere lo stesso procedimento per passare al 5.1, con: 
247
248 31 Amministratore Truelite
<pre>
249
tar -xvzf /root/software/drupal-5.1.tar.gz
250
rm -fR drupal-5.1/sites/default
251
cp -a drupal_new/sites/default drupal-5.1/sites/
252
rm -fR drupal_new 
253
mv drupal-5.1 drupal_new
254 32 Amministratore Truelite
</pre>
255 31 Amministratore Truelite
256 33 Simone Piccardi
Una volta arrivati al 5.1 si potranno reinstallare gli eventuali moduli aggiuntivi (da scaricare sul sito di Drupal, prendendo la versione per il 5.1. Si tenga presente che alcuni di essi sono stati modificati pesantemente, la regola generale è che tutte le volte che si inserisce un nuovo modulo e lo si abilita deve essere eseguito lo script @update.php@. In certi casi però questo non è sufficiente, e si deve aver cura di controllare le istruzioni riportate nel @README@ allegato al modulo.
257 31 Amministratore Truelite
258 33 Simone Piccardi
Un esempio di modulo incompatibile è @ldap_integration@, che richiede un procedimento molto più complesso. Il modulo infatti è stato riscritto da zero in maniera indipendente, per questo motivo oltre a disabilitare e disinstallare il precedente modulo prima della migrazione, occorre anche intervenire sul database prima di riabilitarlo, eliminando ogni riferimento ad esso presente (a causa della precedente installazione), è cioè richiesto che, una volta collegatisi al database, si eseguano i seguenti comandi: 
259
260 1 Amministratore Truelite
<pre>
261
use nuovosito;
262 32 Amministratore Truelite
DELETE FROM system WHERE name = 'ldapauth';
263 1 Amministratore Truelite
DELETE FROM system WHERE name = 'ldapgroups';
264
DELETE FROM system WHERE name = 'ldapdata';
265
</pre>
266
267 33 Simone Piccardi
A questo punto si potrà installare il nuovo modulo, eseguire lo script @update.php@, e riconfigurare il modulo dall'interfaccia di gestione interna di Drupal.