Come Velocizzare WordPress Su Dreamhost Con APC

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.

benchmark_eaccPassiamo ora a vedere come installare APC per dare un’accelerata ai vostri script in PHP. Anche in questo caso sarà necessario collegarsi via SSH per compilarsi prima PHP e poi APC quindi vi riporto di seguito i primi 2 punti della precedente guida per chiarezza.

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:

  1. Scaricatevi e trasferite nella home del vostro account questo script di shell (è lo stesso presente nel wiki)
  2. Modificate la riga 14
    export DOMAIN="your.domain.com"

    inserendo il nome del vostro dominio sul quale volete installare PHP ed APC

  3. 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
  4. Eseguite lo script con il comando sotto ed aspettate che termini l’esecuzione
    ./installscript
  5. 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/
  6. 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
  7. 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.

  1. Scaricatevi e trasferite nella cartella home del vostro account questo script di shell avendo cura di rinominarlo con estensione .sh
  2. 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
  3. Eseguite lo script con il comando sotto ed aspettate che termini l’esecuzione
    ./APC_install.sh
  4. 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
  5. Trovate le righe
    ; Directory in which the loadable extensions (modules) reside.
    extension_dir = "./"
  6. Sostituitele con
    ; Directory in which the loadable extensions (modules) reside.
    extension_dir = "/home/username/php5/lib/php/extensions"
  7. 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?

13 pensieri riguardo “Come Velocizzare WordPress Su Dreamhost Con APC

  1. Ciao, anch’io sono su Dreamhost, ho compilato PHP (5.2.12) e installato APC cache apparentemente senza problemi. Il sito sembra andare più veloce ma quando ho copiato apc.php nella root sembra che in realtà non stia funzionando: uptime sempre 0 e file di cache sempre e solo apc.php. Devo dire che l’ultima parte del file .htaccess dove indirizza al processo fcgi non mi è riuscito farla funzionare. Potrebbe essere quello? Altrimenti mi potresti dare qualche indicazione? Sono due settimane che provo senza successo… Grazie!

  2. Ciao, anche io sono su Dreamhost e ho voluto provare immediatamente questa guida. Ma appena lancio il file installscript mi viene restituito un errore:
    No souch file ‘libxml2-2.6.27.tar.gz’

    1. Hai fatto le opportune modifiche al file mettendo in cima il nome del tuo dominio?

      Riprova ho aggiornato il file con una versione nuova di libxml, se hai dei problemi di recupero di qualche libreria o software prova a controllare che non sia obsoleta e non ne sia uscita una nuova, quindi sostituisci il nome e la versione della vecchia con quella nuova.

      Io ti consiglio in ogni caso eAccelerator che con PHP su FastCGI funziona nettamente meglio.

      1. Sto provando con il nuovo file installscript e sta compilando.
        Ora ho una domanda da ignorante totale sull’argomento: perché devo compilare PHP 5 se è un servizio già disponibile su Dreamhost?
        Comunque alla fine ho optato per eAccelerator visto che lo consigliavi tu stesso.

        1. Le ragioni sono multiple.

          Innanzitutto perchè hai bisogno di fare delle modifiche al file di configurazione php.ini per utilizzare o APC o eAcceleratori e siccome potresti rendere non funzionante PHP mettendo mano a questo file non ti è permesso giocare con la versione di PHP di altri utenti per evitare di creare malfunzionamenti nei loro siti web.

          Volendo potresti semplicemente farti una copia del file binario già compilato di PHP che attualmente stai utilizzando nel tuo spazio web e che è condiviso da altri utenti e del file php.ini, quindi una volta copiato nel tuo spazio potresti avviarti la tua versione di PHP con il file di configurazione php.ini con le opzioni da te scelte modificando l’.htacess come sopra.

          Siccome per compilarsi APC o eAccelerator hai bisogno di phpize che è un programma che ti crei durante la compilazione di PHP, per poter utilizzare uno dei due acceleratori devi compilarti da sorgente una versione di PHP.

          😉

          1. Grazie, molto professionale come sempre 😉
            Dopo l’installazione di eAc e aver ripristinato WP Super Cache al posto di DB Cache effettivamente ho notato in poche ore dei netti miglioramenti: prima la homepage si caricava in circa 1.4 sec, ora 0.6 in media!

  3. Ok, per cui in teoria non si perde niente e tutti rimane per così dire “live”… ottimo.

    Te hai trovato dei giovamenti effettivi in termini stretti di velocità?

    1. Si i vantaggi ci sono e sono indubbi perchè ai visitatori vengono fornite pagine in HMTL quando presenti in cache da Apache senza dover scomodare PHP e MySQL quindi con un risparmio di tempo (visto che Dreamhost ha sever lenti e lontani dall’Italia) e di risorse veramente notevole.

      Credo sia un suicidio non utilizzarlo.

Rispondi