Project

General

Profile

DrupalInstall » History » Version 29

Amministratore Truelite, 06/18/2007 08:25 PM

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 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
}}}
16 1 Amministratore Truelite
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 1 Amministratore Truelite
mysqladmin  -u root -p create sitodrupal
20 1 Amministratore Truelite
mysql -u root -p
21 1 Amministratore Truelite
...
22 1 Amministratore Truelite
mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX,
23 1 Amministratore Truelite
       ALTER, CREATE TEMPORARY TABLES, LOCK TABLES ON sitodrupal.*  TO
24 1 Amministratore Truelite
      'utentedrupal'@'localhost' IDENTIFIED BY 'passwordsegreta';
25 1 Amministratore Truelite
}}}
26 19 Amministratore Truelite
fatto questo si sono create le tabelle con l'apposito script fornito da Drupal:
27 2 Amministratore Truelite
{{{
28 2 Amministratore Truelite
cd /usr/share/local/drupal
29 2 Amministratore Truelite
mysql -u utentedrupal -p sitodrupal < database/database.4.1.mysql
30 2 Amministratore Truelite
}}}
31 2 Amministratore Truelite
è modificato il file {{{sites/default/settings.php}}} impostando il valore:
32 1 Amministratore Truelite
{{{
33 1 Amministratore Truelite
$db_url = 'mysql://utentedrupal:passwordsegreta@localhost/sitodrupal';
34 6 Amministratore Truelite
}}}
35 1 Amministratore Truelite
36 25 Amministratore Truelite
37 25 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:
38 6 Amministratore Truelite
{{{
39 1 Amministratore Truelite
chown -R root.root /usr/share/local/drupal
40 1 Amministratore Truelite
}}}
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 23 Amministratore Truelite
44 23 Amministratore Truelite
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 1 Amministratore Truelite
chmod 755 /var/www/drupal/files
48 1 Amministratore Truelite
chown www-data www-data /var/www/drupal/files
49 1 Amministratore Truelite
cd /usr/share/local/drupal
50 13 Amministratore Truelite
ln -s /var/www/drupal/files files
51 1 Amministratore Truelite
}}}
52 1 Amministratore Truelite
53 1 Amministratore Truelite
Occorre infine configurare Apache perché sia in grado di visualizzare il sito; anzitutto occorre installare ed abilitare {{{mod_php5}}}, per questo si è fatto:
54 1 Amministratore Truelite
{{{
55 21 Amministratore Truelite
apt-get install php5-mysql php5-gd libapache2-mod-php5 
56 18 Amministratore Truelite
a2enmod php5
57 18 Amministratore Truelite
}}}
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 1 Amministratore Truelite
}}}
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 13 Amministratore Truelite
<Directory "/usr/local/share/drupal">
70 13 Amministratore Truelite
        # Protect files and directories from prying eyes.
71 13 Amministratore Truelite
        <FilesMatch "(\.(engine|inc|install|module|sh|.*sql|theme|tpl(\.php)?|xtmpl)|code-style\.pl|Entries.*|Repository|Root)$">
72 13 Amministratore Truelite
                Order deny,allow
73 13 Amministratore Truelite
                Deny from all
74 13 Amministratore Truelite
        </FilesMatch>
75 13 Amministratore Truelite
76 13 Amministratore Truelite
        # Set some options.
77 13 Amministratore Truelite
        Options -Indexes
78 1 Amministratore Truelite
        Options +FollowSymLinks
79 13 Amministratore Truelite
        # Override PHP settings. More in sites/default/settings.php
80 13 Amministratore Truelite
        # but the following cannot be changed at runtime.
81 13 Amministratore Truelite
        # PHP 5, Apache 1 and 2
82 13 Amministratore Truelite
        <IfModule mod_php5.c>
83 13 Amministratore Truelite
          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 13 Amministratore Truelite
        </IfModule>
87 13 Amministratore Truelite
88 13 Amministratore Truelite
        # Reduce the time dynamically generated pages are cache-able.
89 13 Amministratore Truelite
        <IfModule mod_expires.c>
90 13 Amministratore Truelite
          ExpiresByType text/html A1
91 13 Amministratore Truelite
        </IfModule>
92 13 Amministratore Truelite
93 13 Amministratore Truelite
        # Various rewrite rules.
94 13 Amministratore Truelite
        <IfModule mod_rewrite.c>
95 13 Amministratore Truelite
          RewriteEngine on
96 13 Amministratore Truelite
          # Modify the RewriteBase if you are using Drupal in a subdirectory and                               
97 13 Amministratore Truelite
          # the rewrite rules are not working properly.
98 1 Amministratore Truelite
          RewriteBase /drupal
99 1 Amministratore Truelite
100 1 Amministratore Truelite
          # Rewrite current-style URLs of the form 'index.php?q=x'.
101 1 Amministratore Truelite
          RewriteCond %{REQUEST_FILENAME} !-f
102 1 Amministratore Truelite
          RewriteCond %{REQUEST_FILENAME} !-d
103 1 Amministratore Truelite
          RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
104 13 Amministratore Truelite
        </IfModule>
105 13 Amministratore Truelite
</Directory>
106 1 Amministratore Truelite
}}}
107 23 Amministratore Truelite
108 23 Amministratore Truelite
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 1 Amministratore Truelite
a2enmod rewrite
111 1 Amministratore Truelite
}}}
112 1 Amministratore Truelite
Una volta cambiata la configurazione e riavviato Apache si abbia cura di rimuovere {{{.htaccess}}}.
113 1 Amministratore Truelite
 
114 25 Amministratore Truelite
== Configurazione di sicurezza ==
115 25 Amministratore Truelite
116 25 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:
117 25 Amministratore Truelite
{{{
118 25 Amministratore Truelite
<VirtualHost *:80>
119 25 Amministratore Truelite
        Include "/etc/apache2/sites-available/config-common"
120 25 Amministratore Truelite
        Redirect /drupal/login https://www.miosito.it/drupal/login
121 25 Amministratore Truelite
</VirtualHost>
122 25 Amministratore Truelite
}}}
123 25 Amministratore Truelite
(posto che si siano messe tutte le precedenti configurazione comuni nel file {{{config-common}}}).
124 25 Amministratore Truelite
125 25 Amministratore Truelite
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 25 Amministratore Truelite
{{{
127 25 Amministratore Truelite
ini_set('arg_separator.output',     '&amp;');
128 25 Amministratore Truelite
ini_set('magic_quotes_runtime',     0);
129 25 Amministratore Truelite
ini_set('magic_quotes_sybase',      0);
130 25 Amministratore Truelite
ini_set('session.cache_expire',     86400);
131 25 Amministratore Truelite
ini_set('session.cache_limiter',    'none');
132 25 Amministratore Truelite
ini_set('session.cookie_lifetime',  86400);
133 25 Amministratore Truelite
ini_set('session.gc_maxlifetime',   86400);
134 25 Amministratore Truelite
ini_set('session.save_handler',     'user');
135 25 Amministratore Truelite
ini_set('session.use_only_cookies', 1);
136 25 Amministratore Truelite
ini_set('session.use_trans_sid',    0);
137 25 Amministratore Truelite
ini_set('url_rewriter.tags',        '');
138 25 Amministratore Truelite
}}}
139 25 Amministratore Truelite
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 23 Amministratore Truelite
cd /usr/share/local/
146 23 Amministratore Truelite
mv drupal drupal_old
147 23 Amministratore Truelite
tar -xvzf ~/drupal-4.7.new.tar.gz
148 23 Amministratore Truelite
mv drupal-4.7.new drupal
149 23 Amministratore Truelite
cp drupal_old/sites/default/settings.php drupal/sites/default/settings.php
150 23 Amministratore Truelite
cd drupal
151 23 Amministratore Truelite
ln -s /var/www/drupal/files files
152 23 Amministratore Truelite
rm .htaccess
153 23 Amministratore Truelite
}}}
154 23 Amministratore Truelite
155 23 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:
156 23 Amministratore Truelite
{{{
157 23 Amministratore Truelite
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 26 Amministratore Truelite
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.
162 1 Amministratore Truelite
163 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:
164 27 Amministratore Truelite
{{{
165 27 Amministratore Truelite
cp -a drupal drupal_new
166 27 Amministratore Truelite
cp -a /var/www/drupal/files /var/www/drupal/files_new
167 27 Amministratore Truelite
rm drupal_new/files
168 28 Amministratore Truelite
ln -s /var/www/drupal/files_new drupal_new/files
169 28 Amministratore Truelite
}}}
170 28 Amministratore Truelite
171 28 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:
172 28 Amministratore Truelite
{{{
173 28 Amministratore Truelite
mysqldump -u utentedrupal -p sitodrupal > db_sito.sql
174 28 Amministratore Truelite
mysqadmin -u root -p create nuovosito
175 28 Amministratore Truelite
}}}
176 28 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
177 28 Amministratore Truelite
{{{
178 28 Amministratore Truelite
use nuovosito; 
179 28 Amministratore Truelite
GRANT ALL PRIVILEGES ON novosito.* TO utente@localhost IDENTIFIED BY 'password';
180 28 Amministratore Truelite
}}}
181 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:
182 28 Amministratore Truelite
{{{
183 28 Amministratore Truelite
use nuovosito;
184 28 Amministratore Truelite
update users set pass=md5('NEWPASS') where uid = 1;
185 1 Amministratore Truelite
}}}
186 29 Amministratore Truelite
ed infine si potranno reinserire i dati con:
187 29 Amministratore Truelite
{{{
188 29 Amministratore Truelite
mysql -u utente -p nuoosito < db_sito.sql
189 29 Amministratore Truelite
}}}
190 29 Amministratore Truelite
191 29 Amministratore Truelite
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 disfunzini, per cui alla fine oltre a rinominare può essere il caso di lasciare.