User Tools

Site Tools


doc:appunti:linux:sa:drupal

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 (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:

<Directory /var/www/default/drupal>
    AllowOverride All
</Directory>

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 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 questo articolo), si aggiunge questa sezione in nel file del VirtualHost (contenuto nella directory /etc/apache2/sites-available/):

<Directory /var/www/www.virtualhost.org>
    RewriteEngine on
    RewriteBase /drupal
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^drupal/(.*)$ index.php?q=$1 [L,QSA]
</Directory>

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:

<?php
 
$https = ($_SERVER['HTTPS'] == 'on') ? TRUE : FALSE;
$port  = $_SERVER['SERVER_PORT'];
 
$url  = $https ? 'https://' : 'http://';
$url .= $_SERVER['SERVER_NAME'];
 
if (((! $https) and ($port != 80)) or ($https and ($port != 443))) {
    $url .= ':' . $_SERVER['SERVER_PORT'];
}
 
$url .= '/drupal/';
 
header("Location: $url");
exit;

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"');

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 HomeAdministerSite configurationLanguages. 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 HomeAdministerSite buildingTranslate 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:

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 (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 AdministerSite configurationLanguages. 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.

In alternativa si può bloccare l'accesso a livello di server web aggiungendo qualcosa del genere nel file di configurazione di Apache:

<Directory /var/www/drupal/>
    Order allow,deny
    allow from 88.57.16.26
</Directory>

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://<drupal_site>/update.php tutte le volte che si aggiorna un modulo.

Impostazioni

Impedire la registrazione di nuovi utenti

HomeAmministraGestione 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 <img> (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 <img> 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):

<img src="/drupal/?q=system/files/image.jpg" width="600" height="398" alt="image.jpg" />

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

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 <VirtualHost> 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 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 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"
doc/appunti/linux/sa/drupal.txt · Last modified: 2011/01/28 14:45 by niccolo