All’indomani dell’iWordCamp 2008, dopo aver seguito diversi talk interessanti e aver chiaccherato con diversi geek vi avevo parlato di come velocizzare WordPress su Dreamhost utilizzando eAccelerator che è un’estensione gratuita ed open source per PHP che si occupa di effettuare un lavoro di accelerazione, ottimizzazione e di cache sui vostri script scritti in questo linguaggio. C’è un’altra estensione che effettua un lavoro analogo facilmente installabile anch’essa su Dreamhost che si chiama APC.
APC è l’acronimo di Alternative PHP Cache e può essere considerato l’acceleratore ufficiale di PHP tanto che verrà con ogni probabilità incluso di default nella versione 6 di PHP. I più attenti di voi avranno sicuramente notato che nel precedente articolo c’era un grafico riassuntivo prestazionale e eAccelerator era proprio messo a confronto con APC e i risultati erano quasi indistinguibili.
Vi riporto qui sotto per comodità il risultato del benchmark.
Collegatevi SSH
Per prima cosa dovrete connettervi via SSH al server web dove è ospitato il vostro blog in WordPress. Se siete utenti Mac potete utilizzare tranquillamente il Terminale (Applicazioni->Utility->Terminale), se siete utenti Linux dopo aver installato OpenSSH potrete allo stesso modo utilizzare la shell, se utilizzate Windows dovrete procurarvi un client SSH tra quelli disponibili in circolazione. Se vi connettete da linea di comando in ogni caso dovrete digitare:
ssh username@yourdomain.com
quindi invio (ovviamente al posto di username dovrete mettere il nome utente abilitato all’accesso ssh e al posto di yourdomain.com il nome del vostro dominio) ed inserire la password di accesso. E’ tutto comunque dettagliatamente descritto nel wiki di Dreamhost anche se è un’operazione semplicissima.
Compilate PHP
La seconda cosa da effettuare è compilarvi PHP. Aspetta, aspetta non scappare: la cosa è molto più semplice di quanto può sembrare e ci puoi riuscire anche tu che non hai mai compilato mai un programma in vita tua. Come al solito c’è una pagina dedicata a tutto ciò nel wiki, l procedura si può riassumere nei seguenti passaggi:
- Scaricatevi e trasferite nella home del vostro account questo script di shell (è lo stesso presente nel wiki)
- Modificate la riga 14
export DOMAIN="your.domain.com"
inserendo il nome del vostro dominio sul quale volete installare PHP ed APC
- Date i permessi di esecuzione allo script con il comando, ovviamente sostituendo ad installscript il nome del vostro script se lo avete chiamato diversamente
chmod +x installscript
- Eseguite lo script con il comando sotto ed aspettate che termini l’esecuzione
./installscript
- Al termine vi verrà segnalato che è stato impossibile cancellare le directory source e dist, non vi preoccupate è normale. Cancellatele con il comando sotto ed aspettate che vengano eliminate
rm -rf dist/ source/
- Copiate il file php.ini nella cartella yourdomain.com/cgi-bin con il comando
cp php5/etc/php5/yourdomain.com/php.ini yourdomain.com/cgi-bin/php.ini
- Createvi un file chiamato php5-wrapper.fcgi con le informazioni che trovate sotto. Per comodità qui potete scaricarne uno già preimpostato: ovviamente sostituite username e yourdomain.com con i vostri dati
#!/bin/sh export PHPRC=/home/username/yourdomain.com/cgi-bin/ export PHP_FCGI_CHILDREN=3 exec /home/username/yourdomain.com/cgi-bin/php.cgi
Installiamo APC
Ora che abbiamo PHP compilato ed installato nel nostro account possiamo installarci APC in modo molto simile a quanto abbiamo fatto con PHP. Ecco i passaggi salienti, la procedura completa come al solito è presente nel wiki di Dreamhost.
- Scaricatevi e trasferite nella cartella home del vostro account questo script di shell avendo cura di rinominarlo con estensione .sh
- Date i permessi di esecuzione allo script con il comando sotto ovviamente se avete chiamato lo script in modo diverso da APC_install.sh sostituite il nome del vostro script nel comando sotto
chmod +x APC_install.sh
- Eseguite lo script con il comando sotto ed aspettate che termini l’esecuzione
./APC_install.sh
- Andate a modificare il file php.ini che se avete seguito le indicazioni sopra dovrebbe trovarsi nella directory
/home/username/yourdomain.com/cgi-bin/php.ini
- Trovate le righe
; Directory in which the loadable extensions (modules) reside. extension_dir = "./"
- Sostituitele con
; Directory in which the loadable extensions (modules) reside. extension_dir = "/home/username/php5/lib/php/extensions"
- Al termine del file andate invece ad inserire le seguenti righe
[apc] extension="apc.so" apc.enabled=1 apc.shm_segments=1 apc.shm_size=16 apc.ttl=7200 apc.user_ttl=7200 apc.num_files_hint=1024 apc.mmap_file_mask=/home/username/tmp/apc.XXXXXX apc.enable_cli=1
Bene anche APC è installato, ora non ci resta che avviare il tutto.
Avviamo la nostra versione di PHP con APC
Ora che avete installato la vostra versione di PHP con APC come estensione non vi resterà che avviare il tutto. Per una questione di ottimizzazione delle prestazioni avvieremo PHP come processo fcgi (fast-cgi) e non semplicemente come processo cgi: dovete però aver attivato nel vostro pannello di controllo di Dreamhost l’apposita opzione che vi permette di avere PHP come processo fcgi per il dominio in questione (quello su cui abbiamo lavorato finora).
Fatto questo dovrete andare a modificare il file .htaccess che trovate nella posizione
yourdomain.com/.htaccess
aggiungendo le seguenti righe
Options +ExecCGI AddHandler fastcgi-script fcg fcgi fpl AddHandler php5-fastcgi .php Action php5-fastcgi /php5-wrapper.fcgi
Fatto ciò tutto dovrebbe funzionare. Se riscontrate dei problemi fate riferimento come al solito al wiki di Dreamhost. Una cosa molto comune che potrebbe causarvi dei malfunzionamenti è il fatto che non avete terminato tutti i processi fcgi prima di avviare la vostra versione di PHP com processo fcgi. Vi ricordo che per terminare un processo da shell si usa il comando kill -9 PID dove PID è l’ID del processo che volete uccidere che vi restituisce il comando ps aux.
Per esempio se avete come risposta al comando ps aux
[dinar]$ ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND user 682 0.0 0.1 17180 6148 ? Ss 15:27 0:00 /dh/cgi-system/php5.cgi user 21117 0.1 0.3 23872 11924 ? S 15:27 0:00 /dh/cgi-system/php5.cgi user 7576 0.0 0.3 23872 11920 ? S 15:27 0:00 /dh/cgi-system/php5.cgi user 23783 0.5 0.0 2632 1500 pts/7 S 15:30 0:00 -bash user 20840 0.0 0.0 2488 860 pts/7 R+ 15:30 0:00 ps aux
Per terminare il primo processo, quello con PID 682 dovete dare il comando
kill -9 682
Personalmente tra i due acceleratori, non essendoci una sostanziale differenza a livello prestazionale, preferisco eAccelerator in quanto ha un consumo a livello di memoria leggermente inferiore e quindi su un hosting condiviso come Dreamhost la cosa è da tenere seriamente in considerazione per una convivenza senza attriti con gli altri clienti presenti sul vostro stesso server.
Anche in questo caso credo di avervi tediato a sufficienza, forse anche troppo, ora sono curioso di avere dei vostri riscontri: utilizzate uno dei due acceleratori? Quale? Se siete anche vuoi su Dreamhost o in generale su hosting condiviso notate la differenza?