Project

General

Profile

DrupalInstall » History » Version 33

Simone Piccardi, 12/22/2010 04:23 PM

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 32 Amministratore Truelite
<pre>
10 1 Amministratore Truelite
cd
11 1 Amministratore Truelite
wget http://ftp.osuosl.org/pub/drupal/files/projects/drupal-4.7.x.tar.gz
12 1 Amministratore Truelite
cd /usr/share/local/drupal
13 1 Amministratore Truelite
tar -xvzf ~/drupal-4.7.x.tar.gz
14 1 Amministratore Truelite
mv drupal-4.7.x drupal
15 1 Amministratore Truelite
</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 33 Simone Piccardi
19 32 Amministratore Truelite
<pre>
20 1 Amministratore Truelite
mysqladmin  -u root -p create sitodrupal
21 1 Amministratore Truelite
mysql -u root -p
22 1 Amministratore Truelite
...
23 1 Amministratore Truelite
mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX,
24 1 Amministratore Truelite
       ALTER, CREATE TEMPORARY TABLES, LOCK TABLES ON sitodrupal.*  TO
25 1 Amministratore Truelite
      'utentedrupal'@'localhost' IDENTIFIED BY 'passwordsegreta';
26 1 Amministratore Truelite
</pre>
27 33 Simone Piccardi
28 33 Simone Piccardi
fatto questo si sono create le tabelle con l'apposito script fornito da _Drupal_:
29 33 Simone Piccardi
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 33 Simone Piccardi
è modificato il file @sites/default/settings.php@ impostando il valore: 
36 33 Simone Piccardi
37 1 Amministratore Truelite
<pre>
38 1 Amministratore Truelite
$db_url = 'mysql://utentedrupal:passwordsegreta@localhost/sitodrupal';
39 1 Amministratore Truelite
</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 33 Simone Piccardi
51 1 Amministratore Truelite
<pre>
52 1 Amministratore Truelite
mkdir /var/www/drupal/files
53 1 Amministratore Truelite
chmod 755 /var/www/drupal/files
54 1 Amministratore Truelite
chown www-data www-data /var/www/drupal/files
55 1 Amministratore Truelite
cd /usr/share/local/drupal
56 1 Amministratore Truelite
ln -s /var/www/drupal/files files
57 1 Amministratore Truelite
</pre>
58 1 Amministratore Truelite
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 33 Simone Piccardi
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 32 Amministratore Truelite
</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 33 Simone Piccardi
68 33 Simone Piccardi
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 33 Simone Piccardi
70 32 Amministratore Truelite
<pre>
71 32 Amministratore Truelite
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 1 Amministratore Truelite
        <FilesMatch "(\.(engine|inc|install|module|sh|.*sql|theme|tpl(\.php)?|xtmpl)|code-style\.pl|Entries.*|Repository|Root)$">
82 1 Amministratore Truelite
                Order deny,allow
83 1 Amministratore Truelite
                Deny from all
84 13 Amministratore Truelite
        </FilesMatch>
85 1 Amministratore Truelite
86 1 Amministratore Truelite
        # Set some options.
87 1 Amministratore Truelite
        Options -Indexes
88 1 Amministratore Truelite
        Options +FollowSymLinks
89 1 Amministratore Truelite
        # Override PHP settings. More in sites/default/settings.php
90 1 Amministratore Truelite
        # but the following cannot be changed at runtime.
91 13 Amministratore Truelite
        # PHP 5, Apache 1 and 2
92 13 Amministratore Truelite
        <IfModule mod_php5.c>
93 13 Amministratore Truelite
          php_value magic_quotes_gpc                0
94 13 Amministratore Truelite
          php_value register_globals                0
95 1 Amministratore Truelite
          php_value session.auto_start              0
96 1 Amministratore Truelite
        </IfModule>
97 32 Amministratore Truelite
98 1 Amministratore Truelite
        # Reduce the time dynamically generated pages are cache-able.
99 1 Amministratore Truelite
        <IfModule mod_expires.c>
100 33 Simone Piccardi
          ExpiresByType text/html A1
101 1 Amministratore Truelite
        </IfModule>
102 1 Amministratore Truelite
103 32 Amministratore Truelite
        # Various rewrite rules.
104 32 Amministratore Truelite
        <IfModule mod_rewrite.c>
105 33 Simone Piccardi
          RewriteEngine on
106 33 Simone Piccardi
          # 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 1 Amministratore Truelite
          # Rewrite current-style URLs of the form 'index.php?q=x'.
111 33 Simone Piccardi
          RewriteCond %{REQUEST_FILENAME} !-f
112 33 Simone Piccardi
          RewriteCond %{REQUEST_FILENAME} !-d
113 33 Simone Piccardi
          RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
114 32 Amministratore Truelite
        </IfModule>
115 32 Amministratore Truelite
</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 33 Simone Piccardi
120 32 Amministratore Truelite
<pre>
121 32 Amministratore Truelite
a2enmod rewrite
122 25 Amministratore Truelite
</pre>
123 25 Amministratore Truelite
124 33 Simone Piccardi
Una volta cambiata la configurazione e riavviato Apache si abbia cura di rimuovere @.htaccess@. 
125 33 Simone Piccardi
126 32 Amministratore Truelite
h2. Configurazione di sicurezza
127 1 Amministratore Truelite
128 1 Amministratore Truelite
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 1 Amministratore Truelite
</pre>
136 25 Amministratore Truelite
137 33 Simone Piccardi
(posto che si siano messe tutte le precedenti configurazione comuni nel file @config-common@).
138 33 Simone Piccardi
139 33 Simone Piccardi
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 33 Simone Piccardi
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 1 Amministratore Truelite
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 1 Amministratore Truelite
ini_set('session.cookie_lifetime',  86400);
148 32 Amministratore Truelite
ini_set('session.gc_maxlifetime',   86400);
149 32 Amministratore Truelite
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 23 Amministratore Truelite
ini_set('url_rewriter.tags',        _);
153 1 Amministratore Truelite
</pre>
154 32 Amministratore Truelite
155 32 Amministratore Truelite
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 23 Amministratore Truelite
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 1 Amministratore Truelite
cp drupal_old/sites/default/settings.php drupal/sites/default/settings.php
166 1 Amministratore Truelite
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 1 Amministratore Truelite
</pre>
177 1 Amministratore Truelite
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 1 Amministratore Truelite
cp -a drupal drupal_new
184 1 Amministratore Truelite
cp -a /var/www/drupal/files /var/www/drupal/files_new
185 1 Amministratore Truelite
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 30 Amministratore Truelite
mysqldump -u utentedrupal -p sitodrupal > db_sito.sql
193 1 Amministratore Truelite
mysqadmin -u root -p create nuovosito
194 1 Amministratore Truelite
</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 33 Simone Piccardi
qualora si debba resettare la password di amministrazione (quella dell'utente con uid 1 dentro _Drupal_) si potranno invece utilizzare i seguenti comandi:
204 33 Simone Piccardi
205 31 Amministratore Truelite
<pre>
206 31 Amministratore Truelite
use nuovosito;
207 31 Amministratore Truelite
update users set pass=md5('NEWPASS') where uid = 1;
208 31 Amministratore Truelite
</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 31 Amministratore Truelite
mysql -u utente -p nuovosito < db_sito.sql
214 31 Amministratore Truelite
</pre>
215 31 Amministratore Truelite
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 33 Simone Piccardi
220 31 Amministratore Truelite
<pre>
221 31 Amministratore Truelite
cd /usr/local/share
222 32 Amministratore Truelite
mv drupal_new/sites/default sitedefault
223 32 Amministratore Truelite
mv drupal_new drupal-4.7.6
224 31 Amministratore Truelite
tar -xvzf /root/software/drupal-4.7.6.tar.gz
225 31 Amministratore Truelite
mv drupal-4.7.6 drupal_new
226 31 Amministratore Truelite
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 33 Simone Piccardi
234 33 Simone Piccardi
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 33 Simone Piccardi
236 32 Amministratore Truelite
<pre>
237 32 Amministratore Truelite
tar -xvzf /root/software/drupal-5.0.tar.gz
238 31 Amministratore Truelite
rm -fR drupal-5.0/sites/default
239 31 Amministratore Truelite
cp -a drupal_new/sites/default drupal-5.0/sites/
240 31 Amministratore Truelite
rm -fR drupal_new 
241 31 Amministratore Truelite
mv drupal-5.0 drupal_new
242 31 Amministratore Truelite
</pre>
243 32 Amministratore Truelite
244 33 Simone Piccardi
(si abbia cura di copiare, oltre a @sites/default@, ogni altra eventuale personalizzazione). 
245 33 Simone Piccardi
246 33 Simone Piccardi
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 33 Simone Piccardi
248 31 Amministratore Truelite
<pre>
249 31 Amministratore Truelite
tar -xvzf /root/software/drupal-5.1.tar.gz
250 31 Amministratore Truelite
rm -fR drupal-5.1/sites/default
251 31 Amministratore Truelite
cp -a drupal_new/sites/default drupal-5.1/sites/
252 31 Amministratore Truelite
rm -fR drupal_new 
253 31 Amministratore Truelite
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 33 Simone Piccardi
260 1 Amministratore Truelite
<pre>
261 1 Amministratore Truelite
use nuovosito;
262 32 Amministratore Truelite
DELETE FROM system WHERE name = 'ldapauth';
263 1 Amministratore Truelite
DELETE FROM system WHERE name = 'ldapgroups';
264 1 Amministratore Truelite
DELETE FROM system WHERE name = 'ldapdata';
265 1 Amministratore Truelite
</pre>
266 1 Amministratore Truelite
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.