Drupal 7: creare e mantenere un sito internet gratis per sempre

Questo articolo spiegherà come creare e mantenere un sito internet professionale in maniera completamente gratuita per sempre, in esso verranno trattati molteplici concetti e chi vorrà approfondire con delle ricerche personali avrà i mezzi per sfruttare degli strumenti molto potenti, chi avrà voglia di imparare potrà apprendere come realizzare un sito come questo.

Per rendere più interessante la lettura di questo articolo l'obiettivo finale sarà la realizzazione e la pubblicazione di un social blog. Con social blog si intende un blog personale ben indicizzato che sfrutta tutti gli strumenti messi a disposizione dai vari social networks per avere una massima diffusione, perché scrivere su un social network se è possibile avere gratuitamente un proprio blog i cui contenuti possono essere automaticamente condivisi su qualsiasi social network?

L'idea

I moderni siti si appoggiano su dei databases molto potenti e complicati che servono le pagine richieste dinamicamente, questo perché i loro contenuti cambiano continuamente ma ad un sito di un'azienda o ad un blog personale non serve che le pagine vengano generate in maniera dinamica, possono esserci delle semplici pagine html che vengono servite staticamente ai visitatori. Al giorno d'oggi ci sono diversi CMS che permettono a chiunque di poter creare un sito internet senza avere grandi competenze ed utilizzano per lo più dei databases MySQL, inoltre ci sono molti servizi di host che offrono uno spazio web gratuito che purtroppo ha un numero di qwery limitate verso il databse MySQL e che quindi sono praticamente inutilizzabili nella loro forma base.

Partendo da queste osservazioni si potrebbe decidere di realizzare un sito internet che non utilizzi un database MySQL completamente in html e caricarlo in remoto su uno dei tanti host gratuiti, ovviamente avremo un sito completamente gratuito ma senza un database sarà molto semplice e spartano, difficile da gestire e non si avrebbe l'aiuto di alcun CMS.

E se si riuscisse ad utilizzare su uno dei tanti host gratuiti un CMS che utilizza un database diverso da MySQL che genera delle pagine html?

La soluzione

Drupal è un CMS Open Source, sicuramente il più potente CMS esistente (anche la Casa Bianca dal 2009 ha deciso di utilizzarlo per il proprio sito) e dalla versione di Drupal 7 supporta anche il database SQLite, un database molto potente (utilizzato ad esempio da Firefox) che archivia le sue tabelle in un singolo file e che quindi non richiede queries ad un database messo a disposizione dall'host.

Essendo un unico file un database SQLite è molto comodo da gestire ma non è l'ideale per un sito internet dato che le pagine vengono generate dinamicamente da esso per ogni pagina richiesta da ogni visitatore e quindi con un discreto numero di visitatori la velocità del sito ne risentirebbe eccessivamente ed addirittura il sito potrebbe andare offline. Per risolvere questo problema è possibile utilizzare Boost, un modulo per Drupal che crea una cache in versione html delle pagine del sito da servire ai visitatori, in questo modo il database verrà utilizzato solo per salvare le informazioni.

L'occorrente

Si è deciso quindi di realizzare il sito utilizzando Drupal 7 con un database SQLite in maniera da poterlo caricare su un qualsiasi host gratuito. Ovviamente il sito verrà realizzato in locale per poi essere caricato in remoto soltanto a lavoro completato, ecco tutto l'occorrente:

Installazione e configurazione dei programmi da utilizzare

Il lavoro di seguito illustrato verrà svolto su una macchina con installata una distribuzione Linux, nello specifico Debian 7, ma se qualcuno vuole utilizzare un OS Windows può farlo utilizzando gli stessi programmi precedentemente elencati scaricandoli ed installandoli come si è soliti fare su Windows e configurandoli come spiegato di seguito.

  • Riga di comando Drush per Drupal 7 (opzionale):

sudo apt-get install drush

  • Apache con supporto per php e per sqlite:

sudo apt-get install apache2 php5 libapache2-mod-php5 sqlite php5-sqlite

oppure

sudo apt-get install apache2 php7.0 libapache2-mod-php sqlite php-sqlite3

ed in entrambi i casi:

sudo a2enmod rewrite
sudo /etc/init.d/apache2 restart

occorre editare il file:

/etc/apache2/apache2.conf

e:

/etc/apache2/sites-available/default

scegliendo la posizione della cartella www e cambiando ogni AllowOverride None in AllowOverride All

  • Sqliteman: occorre scaricarlo, compilarlo ed installarlo come spiegato qualche tempo fa in questo articolo del blog
  • Filezilla:

sudo apt-get install filezilla

per evitare l'errore "General error: 11 database disk image is malformed"  quando si trasferisce il databese in remoto in Filezilla occorre impostare nel menù Trasferimento la modalità di trasferimento da automatico a binario

  •  Altervista: occorre registrarsi sul portale in modo da avere uno spazio web all'indirizzo www.username.altervista.org e si deve configurare Filezilla in questo modo per accedere tramite ftp allo spazio web altervista

Creazione del sito in locale

Come prima cosa occorre tenere a mente che Drupal è immenso, è un CMS modulare molto potente e sul suo sito ufficiale, www.drupal.org, oltre ad una attivissima community vi è anche una dettagliatissima documentazione che è bene consultare in caso di dubbi. In questo articolo molte cose basilari inerenti Drupal sono date per assodate ma nel caso in cui non lo dovessero essere è vivamente consigliata la consultazione della documentazione di Drupal.

Nello specifico prima di continuare la lettura di questo articolo è importante capire cosa sono i moduli ed i temi e come si possono installare in Drupal, per chi non lo sapesse ecco la documentazione ufficiale. Occorre inoltre sapere che non per tutti i moduli è sufficiente la sola installazione per essere funzionanti, alcuni moduli avanzati hanno bisogno di alcune configurazioni particolari che sono dettagliatamente spiegate nella documentazione online del modulo stesso od all'interno del file README del modulo scaricato, quindi è buona norma leggere sempre il file README di ogni modulo per sapere come installarlo e configurarlo.

Ora, dopo aver configurato correttamente tutti i programmi e dopo aver capito come installare i moduli di Drupal, è possibile iniziare a sviluppare il sito internet con Drupal in locale seguendo questi semplicissimi punti:

  1. Scaricare l'ultima versione di Drupal 7 e la relativa traduzione in italiano
  2. Estrarre l'archivio di Drupal in una cartella come ad esempio www.username.altervista.org ed inserire il file della lingua in www.username.altervista.org/profiles/standard/translations
  3. Editare il file .htaccess all'interno della cartella www.username.altervista.org decommentando la riga # RewriteBase / e cambiandola in RewriteBase /www.username.altervista.org
  4. Copiare la cartella www.username.altervista.org nella cartella www di Apache
  5. Avviare l'installazione in locale digitando nel browser localhost/www.username.altervista.org/
  6. Eseguire l'installazione scegliendo il database SQLite
  7. Completata l'installazione occorre installare questi moduli:
  8. E' inoltre possibile ottimizzare ulteriormente il file .htaccess:
  9. E' possibile scegliere un nuovo tema per il sito

Finalmente il sito è pronto per essere pubblicato.

Copia del sito in remoto e pubblicazione online

L'ultima cosa da fare è la copia del sito dal localhost ad altervista ed è realmente la cosa più semplice da fare:

  1. Editare nuovamente il file .htaccess all'interno della cartella www.username.altervista.org cambiando la riga RewriteBase /www.username.altervista.org in RewriteBase /
  2. Copiare con Filezilla il contenuto della cartella www.username.altervista.org su altervista

Come funziona questa configurazione

Questa particolare configurazione permette di sfruttare la potenza di un CMS come Drupal per creare i propri contenuti e permette di servirli staticamente ai visitatori grazie al modulo Boost che crea e salva una cache delle pagine in versione html ogni volta che un contenuto è visitato per la prima volta e ad i successivi accessi serve ai visitatori la versione html, in questo modo si evita di interrogare ogni volta il database e l'accesso è molto veloce. Ogni volta che viene inserito un nuovo contenuto il modulo Boost Expire svuota tutta la cache di Boost per mantenere la cache allineata al database. Il modo SQLite Vacuum si occupa di tenere il dabatabase sempre in forma effettuando il vacuum in modo che con il passare del tempo le sue dimensioni non crescano esponenzialmente, cosa che andrebbe ad impattare negativamente sulle prestazioni del sito.

Il modulo Fast 404 permette di alleggerire quello che è un processo molto oneroso in drupal e molto comune su internet, ossia l'errore 404. Configurando correttamente questo modulo il database sarà alleggerito di un importante carico di lavoro.

Il modulo LABjs permette di compattare tutti i java scripts e permette di parallelizzarne il caricamento.

Il modulo XML sitemap crea la sitemap del sito che poi invia a tutti i motori di ricerca per permettere l'indicizzazione del sito e dei suoi contenuti, basta questo e dei buoni contenuti per essere nelle prime posizioni dei motori di ricerca.

Gli altri moduli non hanno bisogno di spiegazioni.

Ulteriori ottimizzazioni

Come visto poc'anzi il modulo Boost Expire non svuota la cache di Boost quando un nuovo contenuto viene pubblicato ma quando un nuovo contenuto viene inserito nel database, quindi se si sta scrivendo un lungo articolo un po alla volta Boost Expire svuoterà la cache di Boost ogni qual volta si salverà una bozza e non solo quando l'articolo sarà pubblicato. Questa che sembra una piccolezza si traduce in un carico di lavoro inutile per il database. Il problema è facilmente risolvibile modificando il codice di Boost Expire, la bellezza dell'Open Source.

E' inoltre stato spiegato che Boost non crea automaticamente la cache html delle pagine del sito ma crea la cache delle pagine solo dopo che queste sono state visitate almeno una volta, è però possibile con un semplice trucco far creare a Boost la cache di tutto il sito senza aspettare che le pagine vengano prima visitate, basta utilizzare un semplice wget:

wget --quiet http://www.username.altervista.org/sitemap.xml --output-document - | egrep -o 'http://www.username.altervista.org[^<|"]+' | wget -q --delete-after -i -O -

Creando un social blog è possibile disattivare completamente i commenti integrati in Drupal utilizzando il solo modulo Facebook Comments Box per i commenti, in questo modo i commenti non risiederanno nel database del sito ma saranno salvati sui ben più potenti servers di Facebook. Un altro lavoro in meno per il database oltre che un ottimo modo per pubblicizzare il sito.

Utilizzando altervista è inoltre possibile utilizzare il CDN CloudFlare per aumentare la sicurezza e la velocità del sito, tenendo presente che in questo caso l'indirizzo da usare in Filezilla per collegarsi all'host diventa: ftp.[username].altervista.org, qui il Wiki altervista e qui il modulo CloudFlare per Drupal.

E' molto conveniente utilizzare Linux dato che quando si crea un nuovo database SQLite ne imposta la dimensione di pagina pari alla dimensione del settore del disco che lo contiene. Utilizzando Windows il DB viene creato con pagine da 32KB (o addirittura 64KB), che è la dimensione di default dei settori del file system ntfs di Windows. Se invece il DB lo si crea su una macchina Linux utilizzando il file system ext4, la dimensione di pagina è di 1-2KB, e quindi il DB può crescere di 1KB alla volta anche dopo averlo caricato in remoto.

Quando si sceglie un nuovo tema è consigliato scegliere un tema leggero e minimale.

Backup e manutenzione staordinaria del database

Un sito è il suo database ed in questo caso il backup e la sua manutenzione sono semplicissimi.

Per effettuare il backup basta mettere momentaneamente il sito offline e scaricare con Filezilla il database in locale.

Di tanto in tanto è consigliabile effettuare un vacuum in locale del database per ricompattarlo e ridurne la dimensione che col tempo tende a crescere, anche in questo caso è tutto molto semplice: si scarica in locale il database con Filezilla, con Sqliteman si svuotano le tabelle della cache e se ne effettua il vacuum, infine sempre con Filezilla si ricarica il database in remoto e si rimette il sito online.

E' importante mettere il sito offline prima di scaricare il database per evitare di corromperlo, è inoltre consigliabile effettuare il vacuum sotto Linux sempre per il motivo della grandezza della dimensione di pagina del database.

In caso di database corrotto, ossia di Error: database disk image is malformed è possibile provare a ripararlo:

echo .dump | sqlite3 db.s3db > db.sql
sqlite3 -init db.sql db.s3db

il dump db.sql deve terminare con la stringa:

COMMIT;

Conclusioni

In questo modo è possibile creare e gestire un qualsiasi sito in maniera completamente gratuita, anzi inserendo qualche pubblicità nel sito è anche possibile guadagnare.

Questo articolo ha mostrato in minima parte ciò che è possibile fare con Drupal e questo può essere un punto di partenza per chiunque voglia approfondire l'argomento.