Progetto

Generale

Profilo

DrupalInstall » Cronologia » Versione 32

Versione 31 (Amministratore Truelite, 17-07-2007 12:38) → Versione 32/33 (Amministratore Truelite, 17-07-2007 12:38)

[[TracNav(TOC)]] 

 h2. 
 == Installare e configurare Drupal a livello di intero server 


 == 

 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. 

 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. 

 <pre> 
 <pre> 
 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: 
 {{{ 
 cd 
 wget http://ftp.osuosl.org/pub/drupal/files/projects/drupal-4.7.x.tar.gz 
 cd /usr/share/local/drupal 
 tar -xvzf ~/drupal-4.7.x.tar.gz 
 mv drupal-4.7.x drupal 
 </pre> 

 }}} 

 Occorre poi creare il database, nel caso specifico si è installato [[MySQL]], MySQL, (per l'impostazione iniziale del quale si veda [[MySQLInitConf]]) [wiki:MySQLInitConf]) e creato un database dedicato chiamato *sitodrupal*; '''sitodrupal'''; poi si sono dati i privilegi di gestione per detto database ad un apposito utente con: 
 <pre> 
 {{{ 
 mysqladmin    -u root -p create sitodrupal 
 mysql -u root -p 
 ... 
 mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, 
        ALTER, CREATE TEMPORARY TABLES, LOCK TABLES ON sitodrupal.*    TO 
       'utentedrupal'@'localhost' IDENTIFIED BY 'passwordsegreta'; 
 </pre> 
 }}} 
 fatto questo si sono create le tabelle con l'apposito script fornito da Drupal: 
 <pre> 
 {{{ 
 cd /usr/share/local/drupal 
 mysql -u utentedrupal -p sitodrupal < database/database.4.1.mysql 
 </pre> 
 <pre> 
 <pre> 
 }}} 
 è modificato il file {{{sites/default/settings.php}}} impostando il valore: 
 {{{ 
 $db_url = 'mysql://utentedrupal:passwordsegreta@localhost/sitodrupal'; 
 </pre> 


 }}} 


 Per la sicurezza dell'installazione è anzitutto opportuno impostare dei permessi adeguati sui file, questo significa assegnare a _root_ ''root'' tutti i file in modo che non siano modificabili da Apache, lo si fa con qualcosa del tipo: 
 <pre> 
 {{{ 
 chown -R root.root /usr/share/local/drupal 
 </pre> 

 <pre> 

 <pre> 
 <pre> 
 }}} 

 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.  

 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: 
 {{{ 
 mkdir /var/www/drupal/files 
 chmod 755 /var/www/drupal/files 
 chown www-data www-data /var/www/drupal/files 
 cd /usr/share/local/drupal 
 ln -s /var/www/drupal/files files 
 </pre> 

 <pre> 
 <pre> 
 }}} 

 Occorre infine configurare Apache perché sia in grado di visualizzare il sito; anzitutto occorre installare ed abilitare {{{mod_php5}}}, per questo si è fatto: 
 {{{ 
 apt-get install php5-mysql php5-gd libapache2-mod-php5  
 a2enmod php5 
 </pre> 
 }}} 
 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). 

 <pre> 
 <pre> 
 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: 
 {{{ 
 Alias /drupal /usr/local/share/drupal/ 
 </pre> 

 <pre> 

 }}} 

 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/}}}). 

 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: 
 <pre> 
 {{{ 
 <Directory "/usr/local/share/drupal"> 
         # Protect files and directories from prying eyes. 
         <FilesMatch "(\.(engine|inc|install|module|sh|.*sql|theme|tpl(\.php)?|xtmpl)|code-style\.pl|Entries.*|Repository|Root)$"> 
                 Order deny,allow 
                 Deny from all 
         </FilesMatch> 

         # Set some options. 
         Options -Indexes 
         Options +FollowSymLinks 
         # Override PHP settings. More in sites/default/settings.php 
         # but the following cannot be changed at runtime. 
         # PHP 5, Apache 1 and 2 
         <IfModule mod_php5.c> 
           php_value magic_quotes_gpc                  0 
           php_value register_globals                  0 
           php_value session.auto_start                0 
         </IfModule> 

         # Reduce the time dynamically generated pages are cache-able. 
         <IfModule mod_expires.c> 
           [[ExpiresByType]] ExpiresByType text/html A1 
         </IfModule> 

         # Various rewrite rules. 
         <IfModule mod_rewrite.c> 
           [[RewriteEngine]] RewriteEngine on 
           # Modify the [[RewriteBase]] RewriteBase if you are using Drupal in a subdirectory and                                
           # the rewrite rules are not working properly. 
           [[RewriteBase]] RewriteBase /drupal 

           # Rewrite current-style URLs of the form 'index.php?q=x'. 
           [[RewriteCond]] RewriteCond %{REQUEST_FILENAME} !-f 
           [[RewriteCond]] RewriteCond %{REQUEST_FILENAME} !-d 
           [[RewriteRule]] RewriteRule ^(.*)$ index.php?q=$1 [L,QSA] 
         </IfModule> 
 </Directory> 
 </pre> 

 <pre> 
 <pre> 
 }}} 

 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: 
 {{{ 
 a2enmod rewrite 
 </pre> 
 <pre> 
 

 h2. }}} 
 Una volta cambiata la configurazione e riavviato Apache si abbia cura di rimuovere {{{.htaccess}}}. 
 
 == Configurazione di sicurezza 


 == 

 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: 
 <pre> 
 {{{ 
 <VirtualHost *:80> 
         Include "/etc/apache2/sites-available/config-common" 
         Redirect /drupal/login https://www.miosito.it/drupal/login 
 </VirtualHost> 
 </pre> 
 <pre> 

 <pre> 
 <pre> 
 }}} 
 (posto che si siano messe tutte le precedenti configurazione comuni nel file {{{config-common}}}). 

 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: 
 {{{ 
 ini_set('arg_separator.output',       '&amp;'); 
 ini_set('magic_quotes_runtime',       0); 
 ini_set('magic_quotes_sybase',        0); 
 ini_set('session.cache_expire',       86400); 
 ini_set('session.cache_limiter',      'none'); 
 ini_set('session.cookie_lifetime',    86400); 
 ini_set('session.gc_maxlifetime',     86400); 
 ini_set('session.save_handler',       'user'); 
 ini_set('session.use_only_cookies', 1); 
 ini_set('session.use_trans_sid',      0); 
 ini_set('url_rewriter.tags',          _); ''); 
 </pre> 



 h2. }}} 


 == Come aggiornare Drupal 


 <pre> 
 <pre> 
 == 

 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: 
 {{{ 
 cd /usr/share/local/ 
 mv drupal drupal_old 
 tar -xvzf ~/drupal-4.7.new.tar.gz 
 mv drupal-4.7.new drupal 
 cp drupal_old/sites/default/settings.php drupal/sites/default/settings.php 
 cd drupal 
 ln -s /var/www/drupal/files files 
 rm .htaccess 
 </pre> 

 }}} 

 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: 
 <pre> 
 {{{ 
 cd /usr/share/local/ 
 cp -a drupal_old/modules/moduloaggiuntivo drupal/modules/ 
 </pre> 

 }}} 

 La cosa si complica notevolmente qualora invece si debba passare ad una 
 diversa _major release_, ''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. 

 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: 
 <pre> 
 {{{ 
 cp -a drupal drupal_new 
 cp -a /var/www/drupal/files /var/www/drupal/files_new 
 rm drupal_new/files 
 ln -s /var/www/drupal/files_new drupal_new/files 
 </pre> 

 }}} 

 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: 
 <pre> 
 {{{ 
 mysqldump -u utentedrupal -p sitodrupal > db_sito.sql 
 mysqadmin -u root -p create nuovosito 
 </pre> 
 }}} 
 dopo di che si devono assegnare i permessi anche sul sito replicato, in maniera analoga a quanto fatto in sede di installazione, con 
 <pre> 
 {{{ 
 use nuovosito;  
 GRANT ALL PRIVILEGES ON nuovosito.* TO utente@localhost IDENTIFIED BY 'password'; 
 </pre> 
 }}} 
 qualora si debba resettare la password di amministrazione (quella dell'utente con uid 1 dentro Drupal) si potranno invece utilizzare i seguenti comandi: 
 <pre> 
 {{{ 
 use nuovosito; 
 update users set pass=md5('NEWPASS') where uid = 1; 
 </pre> 
 }}} 
 ed infine si potranno reinserire i dati con: 
 <pre> 
 {{{ 
 mysql -u utente -p nuovosito < db_sito.sql 
 </pre> 

 }}} 

 Fintanto che si è installato un solo sito dovrebbe essere sufficiente 
 <pre> 
 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 
 <pre> 
 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. 

 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: 
 <pre> 
 {{{ 
 cd /usr/local/share 
 mv drupal_new/sites/default sitedefault 
 mv drupal_new drupal-4.7.6 
 tar -xvzf /root/software/drupal-4.7.6.tar.gz 
 mv drupal-4.7.6 drupal_new 
 rm -fR drupal_new/sites/default 
 mv sitedefault drupal_new/sites/default 
 </pre> 
 }}} 
 (eventualmente si ripristinino i permessi come illustrato in precedenza) tutto 
 questo andrà fatto restando collegati come amministratore, in modo da poter 
 <pre> 
 eseguire senza problemi lo script {{{update.php}}} (accessibile 
 dall'interfaccia di configurazione dei moduli o all'indirizzo standard 
 <pre> 
 {{{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).  

 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. 

 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: 
 <pre> 
 {{{ 
 tar -xvzf /root/software/drupal-5.0.tar.gz 
 rm -fR drupal-5.0/sites/default 
 cp -a drupal_new/sites/default drupal-5.0/sites/ 
 rm -fR drupal_new  
 mv drupal-5.0 drupal_new 
 </pre> 
 <pre> 
 }}} 
 (si abbia cura di copiare, oltre a {{{sites/default}}}, ogni altra eventuale 
 personalizzazione). 

 A questo punto si potrà eseguire l'aggiornamento alla versione 5.0 usando lo 
 <pre> 
 script {{{update.php}}}, se non si hanno errori si dovrà ripetere lo stesso 
 procedimento per passare al 5.1, con: 
 <pre> 
 {{{ 
 tar -xvzf /root/software/drupal-5.1.tar.gz 
 rm -fR drupal-5.1/sites/default 
 cp -a drupal_new/sites/default drupal-5.1/sites/ 
 rm -fR drupal_new  
 mv drupal-5.1 drupal_new 
 </pre> 
 <pre> 
 <pre> 

 }}} 
 (di nuovo si abbia cura di copiare, oltre a {{{sites/default}}}, ogni altra 
 eventuale personalizzazione) e rieseguire {{{update.php}}}. 

 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 
 <pre> 
 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. 

 <pre> 
 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: 
 <pre> 
 {{{ 
 use nuovosito; 
 DELETE FROM system WHERE name = 'ldapauth'; 
 DELETE FROM system WHERE name = 'ldapgroups'; 
 DELETE FROM system WHERE name = 'ldapdata'; 
 </pre> 

 }}} 

 A questo punto si potrà installare il nuovo modulo, eseguire lo script 
 <pre> 
 {{{update.php}}}, e riconfigurare il modulo dall'interfaccia di gestione 
 interna di Drupal.