====== Drupal 6 ======
===== Installazione =====
Creare un utente e un database in PostgreSQL:
CREATE USER "drupal_test" PASSWORD '*********';
CREATE DATABASE drupal_test OWNER drupal_test ENCODING 'UTF8'
LC_COLLATE = 'it_IT.UTF-8' LC_CTYPE = 'it_IT.UTF-8' TEMPLATE template0;
Scompattare l'archivio di Drupal:
cd /var/www
tar zxvf /usr/local/download/drupal/drupal-6.20.tar.gz
mv drupal-6.20 drupal
chown -R root:root drupal
cp drupal/sites/default/default.settings.php drupal/sites/default/settings.php
chown www-data:www-data drupal/sites/default/settings.php
Si può scompattare l'archivio direttamente nella DocumentRoot invece di usare una sottodirectory (chiamata ''drupal'' nell'esempio sopra).
Si crea un file di configurazione a partire dall'esempio fornito e lo si rende modificabile dal server web, si rende scrivibile anche la directory in cui Drupal salva varie impostazioni:
cd /var/www/drupal
cp sites/default/default.settings.php sites/default/settings.php
chown www-data sites/default/settings.php
chown www-data sites/default/
A questo punto si punta il browser su **%%http://www.sito.it/drupal/%%** e si segue la procedura si setup.
La procedura di setup dovrebbe creare automaticamente anche la directory per l'upload dei file, in caso contrario si povvede a mano:
mkdir sites/default/files
chown www-data:www-data sites/default/files
**ATTENZIONE**: al termine dell'installazione conviene cambiare owner al file **settings.php** e toglierlo ad apache, anche se comunque la procedura di setup lo imposta in sola lettura.
===== Impostazioni Apache, PHP, ecc. =====
Controllare le impostazioni del PHP in php.ini:
memory_limit = 24M
Verificare di aver installato i pacchetti:
* **php5-gd**
* **php5-pgsql** (supporto di PHP a PostgreSQL)
Il modo più semplice per abilitare i [[#clean_urls_url_rewrite|Clean URLs (vedi avanti)]] è quello di **abilitare il modulo //rewrite//** di Apache e abilitare il funzionamento del file **''.htaccess''** fornito con Drupal stesso, nel VirtualHost di Apache è sufficiente una direttiva del tipo:
AllowOverride All
Altrimenti (sarebbe anzi consigliato) le direttive rewrite dovrebbero essere copiate dal file ''.htaccess'' nella configurazione del VirtualHost.
===== Configurazione =====
Dalla pagina principale di Drupal si crea un nuovo account con privilegi di amministratore: si sceglie un nome e un indirizzo email, ad esempio **admin** e **%%drupal@sito.it%%**. Siccome è il primo utente creato, riceve automaticamente i privilegi di amministratore. Si può subito **impostare una password** o accettare quella generata casualmente.
===== Installazione moduli =====
Vedere le [[http://drupal.org/getting-started/install-contrib/modules|istruzioni ufficiali]].
In generale i moduli aggiuntivi si installano da riga di comando scompattando l'archvio nella directory **''drupal/sites/all/modules/''** (verificare proprietario e permessi), quindi si abilitano dall'interfaccia web //Administer//, //Site building//, //Modules//. In generale leggere le istruzioni di installazione/upgrade dal file **''INSTALL.txt''** o simili.
===== Varie =====
Si imposta un **cronjob**:
# /etc/cron.d/drupal
# Tell Drupal to perform its periodic tasks:
49 * * * * root /usr/bin/wget -O - -q http://www.sito.it/drupal/cron
Si crea la directory //files// per **consentire l'upload** di logo, avatar e altri file associati al sito. Deve essere scrivibile da Apache (Drupal **versione 6**):
mkdir drupal/sites/default/files
chown www-data:www-data drupal/sites/default/files
Per **versioni 4** e **5** di Drupal il percorso è diverso:
mkdir drupal/files
chown www-data:www-data drupal/files
===== Clean URLs (URL rewrite) =====
Bisogna che sia attivo il modulo Apache2 **mod_rewrite**.
Drupal è stato installato come VirtualHost nella sottodirectory **''drupal/''**. Per attivare i //clean URLs// (vedere anche [[http://drupal.org/node/15365|questo articolo]]), si aggiunge questa sezione in nel file del VirtualHost (contenuto nella directory ''/etc/apache2/sites-available/''):
RewriteEngine on
RewriteBase /drupal
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^drupal/(.*)$ index.php?q=$1 [L,QSA]
Per **motivi ignoti** il file **''drupal/.htaccess''** non viene considerato nonostante che contenga le stesse direttive.
Per ridirigere la pagina principale del sito alla pagina principale di Drupal si crea questo **''index.php''**:
===== Creare del contenuto =====
Esistono dei contenitori predefiniti per aggiungere del testo in Drupal. I più utili sono **page**, **story** e **blog**.
Una **page** contiene del testo statico, destinato a rimanere a lungo nel sito. Non viene annunciata nella prima pagina e non prevede la possibilità di aggiungere commenti.
Una **story** assomiglia molto ad una semplice //page//, con la differenza che una //story// recente viene annunciata nella prima pagina e prevede la possibilità di aggiungere commenti.
Per avere il **blog** disogna attivare il modulo relativo, si tratta comunque di un modulo ufficiale (//core modules//) di Drupal. Gli articoli blog recenti vengono mostrati nella home page, è possibile aggiungere commenti ed è possibile accedere all'elenco di tutti gli articoli dello stesso autore. Esiste anche il blocco //Interventi recenti del blog// per evidenziare i titoli in un riquadro laterale del sito.
I **link primari** vengono visualizzati in alto, tipo barra di menu. Si configurano da Administer › Site building › Menus › Links primari.
===== Moduli e temi aggiuntivi =====
Si possono installare nella directory **''drupal/sites/all/modules/''** e **''drupal/sites/all/themes/''** rispettivamente (non nelle directory ''modules'' e ''themes'' principale!). Ne esistono molti, controllare sempre la compatibilità con la versione di Drupal in uso. Vedere la pagina [[http://drupal.org/project/Modules]] e [[http://drupal.org/handbook/config/contribmodules]].
Per abilitare un tema cliccare //Administer//, //Themes// e abilitarlo (Drupal rileva automaticamente la sua presenza).
Quando si aggiorna un modulo bisogna sempre eseguire lo script **''update.php''**.
Nel caso che qualcosa vada storto in un tema, l'intero sito potrebbe diventare inusabile. Può essere utile forzare manualmente l'utilizzo di uno dei temi predefiniti per riprendere il controllo del sito. In **''sites/default/settings.php''** si imposta temporaneamente:
$conf = array(
'theme_default' => 'minnelli',
'maintenance_theme' => 'minnelli',
);
Per vedere se il sito è off-line dal contenuto del database:
SELECT * FROM variable WHERE name = 'site_offline';
I valori della variabile possono essere:
^ ''%%s:1:"0";%%'' | Online |
^ ''%%s:1:"1";%%'' | Off-line |
Se la variabile non è mai stata definita è possibile crearla con:
INSERT INTO variable (name, value) VALUES ('site_offline', 's:1:"1"');
===== Link diretti alle pagine di amministrazione =====
Quando si installano temi personalizzati o si modifica il layout del sito, può capitare che i link di amministrazione (login, logout, amministra, ecc.) non siano visibili. Ecco i link diretti a tali pagine:
^ **''%%http://host/drupal/?q=user%%''** | Login o pagina utente |
^ **''%%http://host/drupal/?q=logout%%''** | Logout |
^ **''%%http://host/drupal/?q=admin%%''** | Pagina di amministrazione |
===== Installazione traduzione italiano =====
L'installazione della **traduzione italiana in Drupal 6.6** è da fuori di testa, forse perché la traduzione non è ancora completa e non è disponibile come pacchetto preconfezionato.
Si scarica l'ultima versione del **file con le traduzioni** direttamente dal server:\\
[[http://l10n.drupalitalia.org/translate/languages/it/export]]\\
Le opzioni per il download sono:
* Progetto: Drupal
* Release: Tutti
* Tipo di esportazione: Traduzione
* Farmat used: All in one file
Usare la release //Tutti// non è ottimale, perché caricheremo nel database stringhe di traduzione non pertinenti alla versione di Drupal in uso. Tuttavia è l'unico modo per ottenere una tradizione praticamente completa. Scaricare tutto in un solo file semplifica il successivo caricamento in Drupal. Viene salvato un file di nome **''drupal-all-it.po''**.
Dalla interfaccia di amministrazione di Drupal si deve **aggiungere la lingua italiana**: dopo aver fatto login come amministratore, cliccare su //Home// › //Administer// › //Site configuration// › //Languages//. Scegliere la lingua italiana ed eventualmente impostarla come predefinita.
Adesso si deve effettivamente **caricare il file con la traduzione** delle stringhe. Sempre come amministratore andare alla pagina //Home// › //Administer// › //Site building// › //Translate interface//, queste le opzioni di upload:
* Language file: drupal-all-it.po
* Import into: Italian
* Text group: Built-in interface
* Mode: Strings in the uploaded file replace existing ones, new ones are added
Le stringhe tradotte in italiano contenute nel file **''.po''** vengono caricate nel database. Eventuali messaggi di errore dovrebbero essere dovuti al fatto che si tenta di caricare stringhe di Drupal versione differente da quella in uso.
===== Sito multilingua =====
Si vuole che la lingua venga scelta semplicemente anteponendo un prefisso nella path della pagina, tipo **''%%www.drupal.org/it/%%''**.
Istruzioni:
* **[[http://drupal-translation.com/content/setup-multilingual-site|Setup for a Multilingual Site]]**
* **[[http://drupal.org/node/133977|Building multilingual sites with the Internationalization module]]**
Installare i moduli:
* Internationalization (**''i18n''**)
* Language icons (**''languageicons''**)
* Translation Management (**''translation_management''**)
Abilitare, se non tutti almeno:
* Multilanguage
* **Content type translation**
* **Menu translation**
* Translation Management
* **Content**
Aggiungere una o più lingue dal menu //Administer//, //Site configuration//, //Languages//, //Add language//.
Fare in modo che Page e Story accettino le traduzioni: da //Administer//, //Content management//, //Translation Management//, //Status Check// verificare che le //Page// e le //Story// siano configurate in modo tale che il workflow preveda come Multilingual support //Enabled, with translation//.
==== Negoziazione della lingua ====
Si imposta da //Administer//, //Site configuration//, //Languages//, //Configure//. Se si cambia l'impostazione quando già esistono delle pagine, si potrebbe corrompere la corretta rappresentazione delle stesse.
Prendiamo in considerazione due modalità:
**None (impostazione predefinita)**
In questo modo ogni nodo potrà essere tradotto (compare il link //Translate// oltre a //View// e //Edit//). Se esiste una traduzione, nella pagina dell'articolo compare il link con la bandierina. Ogni traduzione sta in un nodo autonomo del tipo: **''node/1''**, **''node/3''**.
**Path prefix with language fallback**
Verificare in //Site configuration//, //Language// che per ogni lingua sia impostato un //Path prefix//. La traduzione avviene nello stesso modo, il link ad ogni traduzione avrà un prefisso che identifica la lingua, del tipo **''it/node/5''**.
==== Bug su pagina predefinita ====
Pare che rimanga un problema ([[http://drupal.org/node/357248|357248]]): la selezione della **pagina predefinita** nel caso di un sito multilingua non rispetta le indicazioni sulla lingua del browser. Drupal, se non è stato fatto login, pare ignorare la lingua impostata nel browser.
La cosa che conta è il //weight// impostato in //Administer// => //Site configuration// => //Languages//. La lingua con il peso minore vince, a parità di peso vince quella predefinita.
La lingua del browser influenza invece la lingua delle pagine dopo che c'è stato il login.
Non pare che ci siano differenze se lo stesso sito è raggiungibile con nomi diversi (per esempio .it e .com), né pare che influisca il browser o il sistema operativo.
Neanche il cookie creato da Drupal pare che influenzi la pagina visualizzata, se non si è fatto login.
===== Aggiornamento =====
=== Scaricare il nuovo archivio ===
cd /usr/local/download/drupal
wget http://ftp.drupal.org/files/projects/drupal-5.5.tar.gz
=== Bloccare il sito web ===
Per impedire ai visitatori di accedere al sito durante l'aggiornamento si consiglia di mettere il sito in **maintenance mode** da //Amministra//, //Configurazione del sito//.
Se si effettua un logout in modalità maintenance oppure non si riesce ad accedere ad alcune pagine perché il link non è presente nell'interfaccia web, fare riferimento a **[[#link_diretti_alle_pagine_di_amministrazione|link diretti alle pagine di amministrazione]]**.
In alternativa si può bloccare l'accesso a livello di server web aggiungendo qualcosa del genere nel file di configurazione di Apache:
Order allow,deny
allow from 88.57.16.26
=== Fare il dump del database ===
su - postgres
pg_dump drupal_site > /tmp/drupal_site_$(date +%Y-%m-%d).dump
=== Spostare la vecchia directory e mettere quella nuova, sistemare permessi ===
cd $DocumentRoot
mv drupal drupal.old
tar zxvf /usr/local/download/drupal/drupal-5.5.tar.gz
mv drupal-5.5 drupal
chown -R root:root drupal
=== Recuperare file uploadati, moduli e temi personalizzati ===
cp -pr drupal.old/sites/all/ drupal/sites/
cp -pr drupal.old/sites/default/files/ drupal/sites/default/
cp -pr drupal.old/sites/default/settings.php drupal/sites/default/
Verificare se ci sono altri siti oltre al //default//.
=== Eseguire lo script di update ===
Collegarsi al sito come amministratore e chiamare la pagina **%%http://www.example.com/drupal/update.php%%**, seguire le istruzioni. Al termine ricordarsi di riaprire il sito al pubblico.
=== Aggiornare i moduli ===
Si scarica il nuovo archivio e lo si scompatta al posto del vecchio nella directory **''sites/all/modules/''**. Ricordarsi si eseguire lo script **''%%http:///update.php%%''** tutte le volte che si aggiorna un modulo.
===== Impostazioni =====
**Impedire la registrazione di nuovi utenti**
//Home// › //Amministra// › //Gestione utente//\\
È possibile abilitare l'opzione //Solo gli amministratori del sito possono creare nuovi utenti//.
* Aggiungere utenti in blocco
* Cambiare password in blocco
* Permettere la scrittura solo ad utenti autenticati
===== Includere immagini nelle pagine =====
Con l'installazione predefinita di Drupal (almeno la versione 6.9) non è possibile inserire immediatamente delle immagini nelle pagine.
Bisogna anzitutto abilitare l'utilizzo da parte degli utenti del tag HTML **''%%%%''** (ovviamente l'inserimento di HTML comporta alcuni problemi di sicurezza).
Dal menu //Administer// >> //Site configuration// >> //Input formats// si abilita come predefinito il formato **Full HTML**, oppure si aggiunge il tag **''%%%%''** al formato Filtered HTML. Quando un utente crea del contenuto potrà applicare il filtro disponibile.
Quindi si deve poter fare l'**upload** delle immagini, generalmente queste vanno nella directory **''system/files/''** che deve pertanto essere scrivibile da Apache. Per consentire l'upload via web si abilita **il modulo Upload** e lo si configura in //Administer// >> //Site configuration// >> //File uploads// (estensioni consentite, dimensioni). Altra pagina di configurazione importante: //Site configuration// >> //File system// >> //Metodo di download//, è possibile scegliere **Pubblico** (il browser accede direttamente alla directory, meno sicuro) oppure **Privato** (il file viene servito al browser da Drupal, gestendo ACL, ecc.).
A questo punto in una qualunque pagina sarà possibile aggiungere link del tipo (esempio di accesso //privato//):
Per facilitare l'upload delle immagini si può installare il **modulo IMCE** (Image/file uploader and browser), lo si configura da //Administer// >> //Site configuration// >> //IMCE//, mettere in //Common settings//, //textareas//: "edit-body". In questo modo compare un link sotto la textarea che facilita il browsing e l'inserimento delle immagini. Il modulo IMCE si integra non solo con la textarea standard, ma anche con l'editor **FCKeditor** e **TinyMCE**.
Potrebbe interessare anche il **modulo Image** che consenti di trasformare le immagini in nodi Drupal, approfittando della tassonomia, ecc.
===== Editor di testo evoluto: FCKeditor =====
**[[http://www.fckeditor.net/|FCKeditor]]** consente di digitare testo formattato in una pagina web, non richiede alcuna installazione sul client/browser. Per integrarlo in Drupal bisogna scaricare e installare due archivi: il **modulo FCKeditor di Drupal** e l'**editor FCKeditor** vero e proprio:
^ Archivio ^ Download ^ Installare in ^
^ FCKeditor Drupal module | http://drupal.org/project/fckeditor | **''sites/all/modules/fckeditor/''** |
^ FCKeditor | http://www.fckeditor.net/download | **''sites/all/modules/fckeditor/fckeditor/''** |
Come abilitare il **browsing delle directory sul server** durante l'upload delle immagini? Bisogna abilitare il //connector// in FCKeditor, altrimenti si incappa nell'errore:
This connector is disabled. Please check the
"editor/filemanager/connectors/php/config.php" file
Quindi si edita il file ''sites/all/modules/fckeditor/fckeditor/editor/filemanager/connectors/php/config.php'', impostando almeno questi due parametri:
$Config['Enabled'] = true ;
$Config['UserFilesPath'] = '/sites/default/files/' ;
Altre implicazioni di sicurezza?
===== Mail From =====
Le mail prodotte da Drupal sono in effetti costruite dalla funzione ''mail()'' di PHP, in generale avranno come mittente l'utente che esegue Apache e il dominio di posta indicato in ''/etc/mailname''. Questo facilmente si traduce in un mittente non valido del tipo **www-data@localhost**.
L'indirizzo specificato nelle impostazioni di Drupal viene usato solo per l'header **''Sender:''**, non per il **''From''** dell'envelope. Per forzare il mittente della funziona ''mail()'' è possibile configurare ''php.ini'' oppure aggiungere la seguente direttiva nel di Apache:
php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f webmaster@domain.org"
===== Modulo multilingua e sito off-line =====
Pare che ci sia qualche problema con il modulo multilingua e il pannello che controlla lo status del sito (Drupal 6.19, modulo i18n 6.x-1.7).
Capita che il pannello di controllo non dica il vero (indica il sito off-line quando è online e viceversa), pur rimanendo funzionante. Il [[http://drupal.org/node/905428|bug]] nasce dal fatto che la variabile **''site_offline''** viene tenuta in cache con valori differenti per ogni lingua:
Conviene verificare lo status reale del sito dal database:
SELECT * FROM drupal_variable WHERE name = 'site_offline';
Un valore di **''%%s:1:"0";%%''** (zero finale) indica sito **online**.
Quindi controllare lo stato delle variabili in cache:
SELECT * FROM drupal_i18n_variable WHERE name = 'site_offline';
Eliminare eventuali valori errati.
Anche la cache pare che abbia influenza su come viene visto lo status del sito. Vedere anche questo [[http://drupal.org/node/264476|post]] a riguardo.
===== Upload file =====
La dimensione massima per l'upload di un file viene controllata da impostazioni Drupal (//Administer// >> //Site configuration// >> //File uploads//) e dalle impostazioni del PHP. Invece di modificare il **''php.ini''** è possibile aggiungere le seguenti direttive nel VirtualHost:
php_admin_value upload_max_filesize "50M"
php_admin_value post_max_size "50M"