Progetto

Generale

Profilo

DrupalInstall » Cronologia » Versione 31

Amministratore Truelite, 17-07-2007 12:38

1 1 Amministratore Truelite
[[TracNav(TOC)]]
2 13 Amministratore Truelite
== Installare e configurare Drupal a livello di intero server ==
3 1 Amministratore Truelite
4 22 Amministratore Truelite
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.
5 1 Amministratore Truelite
6 22 Amministratore Truelite
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.
7 19 Amministratore Truelite
8 22 Amministratore Truelite
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:
9 1 Amministratore Truelite
{{{
10
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
}}}
16
17 23 Amministratore Truelite
Occorre poi creare il database, nel caso specifico si è installato MySQL, (per l'impostazione iniziale del quale si veda [wiki: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 1 Amministratore Truelite
{{{
19
mysqladmin  -u root -p create sitodrupal
20
mysql -u root -p
21
...
22
mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX,
23
       ALTER, CREATE TEMPORARY TABLES, LOCK TABLES ON sitodrupal.*  TO
24
      'utentedrupal'@'localhost' IDENTIFIED BY 'passwordsegreta';
25
}}}
26 19 Amministratore Truelite
fatto questo si sono create le tabelle con l'apposito script fornito da Drupal:
27 2 Amministratore Truelite
{{{
28
cd /usr/share/local/drupal
29
mysql -u utentedrupal -p sitodrupal < database/database.4.1.mysql
30
}}}
31
è modificato il file {{{sites/default/settings.php}}} impostando il valore:
32 1 Amministratore Truelite
{{{
33
$db_url = 'mysql://utentedrupal:passwordsegreta@localhost/sitodrupal';
34 6 Amministratore Truelite
}}}
35 1 Amministratore Truelite
36 25 Amministratore Truelite
37
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:
38 6 Amministratore Truelite
{{{
39 1 Amministratore Truelite
chown -R root.root /usr/share/local/drupal
40
}}}
41 6 Amministratore Truelite
42 23 Amministratore Truelite
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. 
43
44
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:
45 6 Amministratore Truelite
{{{
46 1 Amministratore Truelite
mkdir /var/www/drupal/files
47
chmod 755 /var/www/drupal/files
48
chown www-data www-data /var/www/drupal/files
49
cd /usr/share/local/drupal
50 13 Amministratore Truelite
ln -s /var/www/drupal/files files
51 1 Amministratore Truelite
}}}
52
53
Occorre infine configurare Apache perché sia in grado di visualizzare il sito; anzitutto occorre installare ed abilitare {{{mod_php5}}}, per questo si è fatto:
54
{{{
55 21 Amministratore Truelite
apt-get install php5-mysql php5-gd libapache2-mod-php5 
56 18 Amministratore Truelite
a2enmod php5
57
}}}
58 23 Amministratore Truelite
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).
59 1 Amministratore Truelite
60 23 Amministratore Truelite
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:
61 16 Amministratore Truelite
{{{
62 1 Amministratore Truelite
Alias /drupal /usr/local/share/drupal/
63
}}}
64 19 Amministratore Truelite
65 23 Amministratore Truelite
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 rule, che l'installazione di default mantiene nel file {{{.htaccess}}}, posto nella directory principale ({{{/usr/local/share/drupal/}}}).
66 18 Amministratore Truelite
67 23 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:
68 13 Amministratore Truelite
{{{
69
<Directory "/usr/local/share/drupal">
70
        # Protect files and directories from prying eyes.
71
        <FilesMatch "(\.(engine|inc|install|module|sh|.*sql|theme|tpl(\.php)?|xtmpl)|code-style\.pl|Entries.*|Repository|Root)$">
72
                Order deny,allow
73
                Deny from all
74
        </FilesMatch>
75
76
        # Set some options.
77
        Options -Indexes
78 1 Amministratore Truelite
        Options +FollowSymLinks
79 13 Amministratore Truelite
        # Override PHP settings. More in sites/default/settings.php
80
        # but the following cannot be changed at runtime.
81
        # PHP 5, Apache 1 and 2
82
        <IfModule mod_php5.c>
83
          php_value magic_quotes_gpc                0
84 21 Amministratore Truelite
          php_value register_globals                0
85 13 Amministratore Truelite
          php_value session.auto_start              0
86
        </IfModule>
87
88
        # Reduce the time dynamically generated pages are cache-able.
89
        <IfModule mod_expires.c>
90
          ExpiresByType text/html A1
91
        </IfModule>
92
93
        # Various rewrite rules.
94
        <IfModule mod_rewrite.c>
95
          RewriteEngine on
96
          # Modify the RewriteBase if you are using Drupal in a subdirectory and                               
97
          # the rewrite rules are not working properly.
98 1 Amministratore Truelite
          RewriteBase /drupal
99
100
          # Rewrite current-style URLs of the form 'index.php?q=x'.
101
          RewriteCond %{REQUEST_FILENAME} !-f
102
          RewriteCond %{REQUEST_FILENAME} !-d
103
          RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
104 13 Amministratore Truelite
        </IfModule>
105
</Directory>
106 1 Amministratore Truelite
}}}
107 23 Amministratore Truelite
108
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:
109 1 Amministratore Truelite
{{{
110
a2enmod rewrite
111
}}}
112
Una volta cambiata la configurazione e riavviato Apache si abbia cura di rimuovere {{{.htaccess}}}.
113
 
114 25 Amministratore Truelite
== Configurazione di sicurezza ==
115
116
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:
117
{{{
118
<VirtualHost *:80>
119
        Include "/etc/apache2/sites-available/config-common"
120
        Redirect /drupal/login https://www.miosito.it/drupal/login
121
</VirtualHost>
122
}}}
123
(posto che si siano messe tutte le precedenti configurazione comuni nel file {{{config-common}}}).
124
125
Un secondo aspetto della sicurezza è quello di dimunuire 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:
126
{{{
127
ini_set('arg_separator.output',     '&amp;');
128
ini_set('magic_quotes_runtime',     0);
129
ini_set('magic_quotes_sybase',      0);
130
ini_set('session.cache_expire',     86400);
131
ini_set('session.cache_limiter',    'none');
132
ini_set('session.cookie_lifetime',  86400);
133
ini_set('session.gc_maxlifetime',   86400);
134
ini_set('session.save_handler',     'user');
135
ini_set('session.use_only_cookies', 1);
136
ini_set('session.use_trans_sid',    0);
137
ini_set('url_rewriter.tags',        '');
138
}}}
139
140 1 Amministratore Truelite
141 27 Amministratore Truelite
== Come aggiornare Drupal ==
142 1 Amministratore Truelite
143 26 Amministratore Truelite
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 a {{{files}}}. Si abbia sempre cura di spostare la precedente installazione in modo da mantenerne le configurazioni:
144 23 Amministratore Truelite
{{{
145
cd /usr/share/local/
146
mv drupal drupal_old
147
tar -xvzf ~/drupal-4.7.new.tar.gz
148
mv drupal-4.7.new drupal
149
cp drupal_old/sites/default/settings.php drupal/sites/default/settings.php
150
cd drupal
151
ln -s /var/www/drupal/files files
152
rm .htaccess
153
}}}
154
155
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:
156
{{{
157
cd /usr/share/local/
158 24 Amministratore Truelite
cp -a drupal_old/modules/moduloaggiuntivo drupal/modules/
159 1 Amministratore Truelite
}}}
160 26 Amministratore Truelite
161 31 Amministratore Truelite
La cosa si complica notevolmente qualora invece si debba passare ad una
162
diversa ''major release'', in particolare il passaggio dalla versione 4.7 alla
163
5.1 è reso molto complicato dalle variazioni effettuate alla struttura del
164
database, che richiedono un passaggio per gradi, con la necessità di eseguire
165
prima l'upgrade alla versione 5.0 e da questa alla 5.1.
166 1 Amministratore Truelite
167 27 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:
168
{{{
169
cp -a drupal drupal_new
170
cp -a /var/www/drupal/files /var/www/drupal/files_new
171
rm drupal_new/files
172 28 Amministratore Truelite
ln -s /var/www/drupal/files_new drupal_new/files
173
}}}
174
175
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:
176
{{{
177
mysqldump -u utentedrupal -p sitodrupal > db_sito.sql
178
mysqadmin -u root -p create nuovosito
179
}}}
180
dopo di che si devono assegnare i permessi anche sul sito replicato, in maniera analoga a quanto fatto in sede di installazione, con
181 1 Amministratore Truelite
{{{
182 28 Amministratore Truelite
use nuovosito; 
183 31 Amministratore Truelite
GRANT ALL PRIVILEGES ON nuovosito.* TO utente@localhost IDENTIFIED BY 'password';
184 28 Amministratore Truelite
}}}
185 29 Amministratore Truelite
qualora si debba resettare la password di amministrazione (quella dell'utente con uid 1 dentro Drupal) si potranno invece utilizzare i seguenti comandi:
186 28 Amministratore Truelite
{{{
187
use nuovosito;
188 29 Amministratore Truelite
update users set pass=md5('NEWPASS') where uid = 1;
189 1 Amministratore Truelite
}}}
190 29 Amministratore Truelite
ed infine si potranno reinserire i dati con:
191 1 Amministratore Truelite
{{{
192 31 Amministratore Truelite
mysql -u utente -p nuovosito < db_sito.sql
193 1 Amministratore Truelite
}}}
194
195 31 Amministratore Truelite
Fintanto che si è installato un solo sito dovrebbe essere sufficiente
196
modificare i parametri in {{{sites/default/settings.php}}} per riflettere la
197
nuova URL del sito e la diversa stringa di connessione al database, per
198
riottenere tutto, qualora si siano inseriti siti con la tecnica di tante
199
directory separate sotto {{{sites}}} le cose possono complicarsi un bel po',
200
perché queste vanno rinominate per riflettere la posizione del nuovo sito e se
201
ci sono dei temi dentro, dato che alcuni pathname sono nel database, si
202
possono avere comunque disfunzioni, per cui alla fine oltre a rinominare può
203
essere il caso di lasciare dei link simbolici con il vecchio nome.
204 30 Amministratore Truelite
205
Per eseguire l'upgrade occorre mettere collegarsi come amministratore,
206
impostare un tema di default e disabilitare tutti i moduli, dopo di che, se
207 1 Amministratore Truelite
non si sono apportate modifiche significative, e se il passaggio è minore
208
(cioè ad una versione successiva nella stessa serie di sviluppo) è sufficiente
209
scompattare i sorgenti della nuova versione sul sito corrente, e poi
210 30 Amministratore Truelite
ripristinare le configurazioni, in sostanza qualcosa del tipo:
211
{{{
212
cd /usr/local/share
213 31 Amministratore Truelite
mv drupal_new/sites/default sitedefault
214
mv drupal_new drupal-4.7.6
215 1 Amministratore Truelite
tar -xvzf /root/software/drupal-4.7.6.tar.gz
216 31 Amministratore Truelite
mv drupal-4.7.6 drupal_new
217
rm -fR drupal_new/sites/default
218
mv sitedefault drupal_new/sites/default
219 1 Amministratore Truelite
}}}
220
(eventualmente si ripristinino i permessi come illustrato in precedenza) tutto
221
questo andrà fatto restando collegati come amministratore, in modo da poter
222
eseguire senza problemi lo script {{{update.php}}} (accessibile
223
dall'interfaccia di configurazione dei moduli o all'indirizzo standard
224 31 Amministratore Truelite
{{{http://www.miosito.it/drupal/update.php}}}. In caso questo non fosse
225
accessibile occorrerà seguire le istruzioni riportate nella pagina di errore
226
(in sostanza modificare lo script per permetterne l'esecuzione da chiunque). 
227
228
Una volta eseguito l'aggiornamento, se non ci sono stati errori (o se questi
229
non sono significativi) si possono riabilitare i moduli, avendo cura di
230
aggiornare anche questi, qualora vi fossero nuove versioni, e di rieseguire
231
ogni volta che si riabilita un modulo.
232
233
Se il passaggio è dal 4.7 al 5.1, vista l'entità dei cambiamenti, il
234
procedimento si complica, conviene di nuovo fare una copia del sito originale
235
(che si suppone sia aggiornato all'ultima versione del 4.7) come illustrato in
236
precedenza, e poi però una volta che su detta copia si siano disabilitati i
237
moduli e impostato un tema di default, si deve passare direttamente ai
238
sorgenti della nuova versione di drupal con qualcosa del tipo:
239
{{{
240
tar -xvzf /root/software/drupal-5.0.tar.gz
241
rm -fR drupal-5.0/sites/default
242
cp -a drupal_new/sites/default drupal-5.0/sites/
243
rm -fR drupal_new 
244
mv drupal-5.0 drupal_new
245
}}}
246
(si abbia cura di copiare, oltre a {{{sites/default}}}, ogni altra eventuale
247
personalizzazione).
248
249
A questo punto si potrà eseguire l'aggiornamento alla versione 5.0 usando lo
250
script {{{update.php}}}, se non si hanno errori si dovrà ripetere lo stesso
251
procedimento per passare al 5.1, con:
252
{{{
253
tar -xvzf /root/software/drupal-5.1.tar.gz
254
rm -fR drupal-5.1/sites/default
255
cp -a drupal_new/sites/default drupal-5.1/sites/
256
rm -fR drupal_new 
257
mv drupal-5.1 drupal_new
258
}}}
259
(di nuovo si abbia cura di copiare, oltre a {{{sites/default}}}, ogni altra
260
eventuale personalizzazione) e rieseguire {{{update.php}}}.
261
262
Una volta arrivati al 5.1 si potranno reinstallare gli eventuali moduli
263
aggiuntivi (da scaricare sul sito di Drupal, prendendo la versione per il
264
5.1. Si tenga presente che alcuni di essi sono stati modificati pesantemente,
265
la regola generale è che tutte le volte che si inserisce un nuovo modulo e lo
266
si abilita deve essere eseguito lo script {{{update.php}}}. In certi casi però
267
questo non è sufficiente, e si deve aver cura di controllare le istruzioni
268
riportate nel README allegato al modulo.
269
270
Un esempio di modulo incompatibile è {{{ldap_integration}}}, che richiede un
271
procedimento molto più complesso. Il modulo infatti è stato riscritto da zero
272
in maniera indipendente, per questo motivo oltre a disabilitare e
273
disinstallare il precedente modulo prima della migrazione, occorre anche
274
intervenire sul database prima di riabilitarlo, eliminando ogni riferimento ad
275
esso presente (a causa della precedente installazione), è cioè richiesto che,
276
una volta collegatisi al database, si eseguano i seguenti comandi:
277
{{{
278
use nuovosito;
279
DELETE FROM system WHERE name = 'ldapauth';
280
DELETE FROM system WHERE name = 'ldapgroups';
281
DELETE FROM system WHERE name = 'ldapdata';
282
}}}
283
284
A questo punto si potrà installare il nuovo modulo, eseguire lo script
285
{{{update.php}}}, e riconfigurare il modulo dall'interfaccia di gestione
286
interna di Drupal.