Installare Drupal su Fedora 18
In questo articolo spiegherò brevemente come installare il CMS Drupal in locale sul proprio sistema Fedora 18. Il primo sarà assicurarsi di avere installato tutti i pacchetti necessari. Poi si vedrà come configurare ed avviare httpd (apache) e il database mySQL (o PostgreSQL, a seconda delle esigenze). Infine alcune osservazioni sui permessi e sulle impostazioni di SELinux, peculiari di Fedora 18.
Installazione pacchetti
Ovviamente, per installare tutto, dipendenze comprese, la strada più semplice sarebbe quella di dare, come amministratore, il classico comando:
Ma questo pone diversi limiti, ossia costringe ad operare da amministratore per ogni modifica ai file e, soprattutto, di avere una sola installazione in locale, pessima cosa per effettuare i test.
Io, invece, voglio installare Drupal nella mia Home, e in particolare nella cartella destinata ad ospitare i contenuti web degli utenti, ossia la "~/public_html".
Innanzitutto controlliamo di aver installato i seguenti pacchetti:
- httpd
- mysql
- mysql-libs
- mysql-server
- php
- php-cli
- php-common
- php-gd
- php-mbstring
- php-mcrypt php-xml
- php-mysql
- php-pdo
- php-pear
- php-pecl-apc
- php-pecl-memcache
- php-pecl-memcached
- php-pecl-mongo
- php-pgsql
- php-sqlite
- postgresql
- postgresql-libs
- postgresql-server
Ovviamente, è possibile installare solo i pacchetti che riguardano il database MySQL, oppure quelli che riguardano PostgreSQL, se si intende utilizzare solamente uno di questi due database. Inoltre, sostituendo MySQL con MariaDB, non dovrebbe cambiare assolutamente nulla (ma non ho controllato!).
Adesso, procuriamoci Drupal andando a scaricare il sorgente dal sito drupal.org. Al momento, l'ultima versione stabile è la 7.22:
$ wget http://ftp.drupal.org/files/projects/drupal-7.22.tar.gz
$ tar -xvzf drupal-7.22.tar.gz
$ mv drupal-7.22 mysitename
Qui, sto dando per scontato che ~/public_html esista, abbia i permessi rwxr-xr-x, o almeno rwx--x--x, e i permessi SELinux (ls -Z) httpd_user_content_t.
$ chmod 755 ~/public_html
$ chcon -R -t httpd_user_content_t ~/public_html
C'è però un altro problema: alcuni file dovrebbero essere scrivibili da apache (o comunque l'utente con cui gira il processo httpd). Si potrebbe pensare di dare i permessi di scrittura nella directory a tutti, ma è una pessima idea per ovvi motivi di sicurezza.
La migliore soluzione che ho trovato finora è la seguente:
$ cp default.settings.php settings.php
$ chmod 664 settings.php
$ chmod 775 files
$ su
# chown :apache settings.php
# chown -R :apache files
# chcon -t public_content_rw_t files settings.php
In questo modo si rendono il file di configurazione e la directory scrivibili dall'utente apache (più precisamente dal gruppo), mantenendoli comunque di proprietà dell'utente. Si può procedere analogamente per altre eventuali directory in cui si desidera caricare dei file mediante il CMS stesso (anche se personalmente preferisco inserirceli manualmente, da linea di comando).
Configurazione di Apache
Assicurarsi che nel file di configurazione "/etc/httpd/conf/httpd.conf", siano presenti le linee:
Include conf.modules.d/*.conf
...
User apache
Group apache
...
e che ci sia un file /etc/httpd/conf.modules.d/??-php.conf che contenga la riga:
Mentre nel file "/etc/httpd/conf.d/userdir.conf", tolti i commenti ed altre eventuali opzioni, ci sia qualcosa che assomigli il più possibile a questo:
UserDir public_html
</IfModule>
<Directory "/home/*/public_html">
AllowOverride All
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
Order allow,deny
Allow from all
</Directory>
Infine, avviare (ed abilitare di default) il servizio Web:
# systemctl enable httpd.service
MySQL
Avvio il servizio, creo il database iniziale e aggiungo i permessi necessari per creare e modificare tabelle ad un utente 'user', il cui accesso ` consentito mediante la password 'password' (ovviamente da impostare secondo le proprie preferenze).# systemctl enable mysqld.service
# su - mysql
$ mysql_install_db --user=mysql
$ mysqladmin -u root password [your_password_here]
$ mysql -u root -p ...
> CREATE DATABASE mysitename;
> GRANT ALL ON mysitename.* TO user IDENTIFIED BY 'password';
> GRANT ALL ON mysitename.* TO 'user'@'localhost' \
IDENTIFIED BY 'password';
PostgreSQL
Come ho già anticipato, questa sezione è in alternativa a MySQL, a meno che non decidiate, per effettuare dei test, di procedere con entrambi.
Nel file "/var/lib/pgsql/data/postgresql.conf", devono essere presenti le seguenti linee:
Mentre nel file "/var/lib/pgsql/data/pg_hba.conf", ci dovrà essere qualcosa del tipo:
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
# IPv6 local connections:
host all all ::1/128 trust
Per maggiori informazioni, consultare la documentazione.
Non resta, quindi, che abilitare ed avviare il servizio ed inizializzare il database:
# systemctl enable postgresql.service
# postgresql-setup initdb
Da notare che se PostgreSQL non è stato installato dai repository di Fedora, ma dai repository di postgresql, il servizio potrebbe chiamarsi postgresql-9.2.service, o analogamente a seconda della versione, mentre i file di configurazione, potrebbero essere in un'altra posizione, tipicamente: "/var/lib/pgsql/9.2/data/postgresql.conf" e "/var/lib/pgsql/9.2/data/pg_hba.conf".
SELinux
Assicurarsi che i seguenti valori siano impostati a "on":...
httpd_enable_homedirs --> on
...
In caso contrario:
Drupal
Ancora una piccola modifica da fare al file .htaccess nella directory principale del CMS Drupal: modificare la riga "RewriteBase /" (di solito è commentata) in:
Dove ~user è un alias per /home/user/public_html (user sta per il vostro vero username) e sitename è la directory in cui è stato scompattato Drupal.
Infine, non rimane che andare col browser all'indirizzo http://localhost/~user/sitename ed accedere così al pannello di configurazione di Drupal. Seguite le istruzioni, indicando il database scelto e le corrette credenziali di accesso e tutto dovrebbe funzionare...
Aggiornamento: installare Drupal su Fedora 20
La gran parte del discorso rimane valida. Ci sono alcune modifiche importanti da fare. Nel file /etc/httpd/conf.d/userdir.conf, aggiungere, tra le righe di cui sopra, anche la riga:
Per SElinux, le variabili da modificare sono:
# setsebool -P httpd_mod_auth_pam=on
# setsebool -P httpd_anon_write=on
Per MySQL, dopo aver avviato i servizi, lanciare da root:
e configurare opportunamente il database!