A tutta velocita’ con PHP-FPM

PHP-FPM Very Fast

Come sa bene chiunque si occupi di creare e gestire un servizio Web moderno, il primo aspetto che viene ricercato e di cui si chiede la massima affidabilita’, e’ la velocita’ di risposta, cosi da garantire la presenza online delle imprese supportando il lavoro quotidiano delle Web Agency.

Nonostante oggi giorno ci siano nuovi linguaggi di sviluppo e di scripting il PHP rimane comunque ancora uno dei piu’ utilizzati e, grazie alle nuove funzionalita’ del PHP-FPM, questo linguaggio tornera’ sicuramente ad avere un ruolo di rilievo.

Ma, facciamo un piccolissimo passo indietro per rivedere come sono state gestite fino a ieri tutte le richieste php fatte dagli utenti ai vostri siti.

La maggior parte degli amministratori di siti sa che il PHP può essere incorporato nell’ HTML e che funziona con i principali web server. Tuttavia, l’aspetto meno conosciuto è la modalità con cui può essere eseguito il PHP sul web server, e questo può avvenire in diversi modi.

Aggiungiamo nell’equazione anche l’acronimo LAMP che, per chi non lo conoscesse, indica una piattaforma software per lo sviluppo di applicazioni web e sta per :

  • Linux (il sistema operativo)
  • Apache (il server web)
  • MySQL o MariaDB (il database management system)
  • PHP (il linguaggio di programmazione)

Come stavamo dicendo, fino a ieri  la modalità con cui si eseguivano le richieste e i processi di php sulla piattaforma LAMP era il PHP FastCGI.

Si tratta di un protocollo generico utilizzato per l’interfacciamento con un server web. Nello specifico è una variante della precedente Common Gateway Interface (CGI) che ha come obiettivo quello di ridurre il sovraccarico associato all’ interfacciamento tra web server e programmi CGI, consentendo ad un server di gestire più richieste contemporaneamente.

Ma con FastCGI è possibile configurare più versioni di PHP, cosa particolarmente utile quando si hanno vecchi siti web creati, ad esempio, in PHP 5.1 che non sono compatibili con l’ultima versione, inoltre, con FastCGI è possibile supportare diversi utenti ognuno con le proprie istanze di PHP. Questa funzione è particolarmente importante per migliorare la sicurezza in un ambiente condiviso, in cui è possibile avere utenti diversi che gestiscono ciascuno i propri siti web.

Andiamo ancora avanti, quindi grazie al protocollo PHP FastCGI il webserver genera un’ unico processo in fase di inizializzazione che, al termine della fase di start-up, si mette in attesa. Ogni volta che arriva una nuova richiesta in ingresso, il webserver apre una connessione con il processo fast-cgi (in attesa) che a sua volta genera l’output sulla connessione con il client, trasferitagli dal server. Il vantaggio principale di questo protocollo è la creazione dei processi solo in fase di inizializzazione, ottimizzando così il numero dei processi php.

Bene, quindi cerchiamo di capire adesso che cosa cambia con l’introduzione di PHP-FPM ?

PHP-FPM è una modalità più recente (nato nel 2004 come patch di PHP) di utilizzare PHP con un server web, ed è un’alternativa al precedente PHP FastCGI con l’implementazione di alcune funzionalità aggiuntive molto utili, in particolare ai siti che gestiscono quotidianamente sempre più traffico (dai siti vetrina agli e-commerce). Per queste tipologie di siti web è sempre piu’ necessario avere a disposizione strumenti sempre più performanti, proprio come il PHP-FPM.

Fino ad oggi una delle grosse mancanze di FastCGI è stata l’impossibilità di avere un numero di CHILD (processi) PHP che cambi in modo dinamico a seconda delle richieste effettive.

Nel suo insieme, il funzionamento è molto simile al FastCGI e si basa dunque sull’ esecuzione ottimizzata dei processi php che vengono creati solo in fase di inizializzazione e rimangono in attesa di una nuova richiesta. La grossa differenza sta nel fatto che è lo stesso PHP-FPM ad eseguire il processo e non più il web server.

Il “Process Manager” è uno script che gestisce direttamente i processi PHP, nella pratica attende e riceve istruzioni dal server web ed esegue gli script PHP richiesti, permettendo cosi ad un sito web di gestire carichi intensi. Il PHP-FPM mantiene dei “pool” per rispondere alle richieste PHP e i processi che si generano sono direttamente “figli” (CHILD) del Process Manager e possono quindi essere gestiti separatamente dal web server.

Questa modalità garantisce una maggiore robustezza del servizio, poiché tutte le operazioni come i cambi di configurazione o il restart dei processi, impattano i singoli pool FPM e non più l’intero web server.

Ecco alcune delle interessanti caratteristiche tecniche:

  • Demonizzazione dei processi PHP (file PID, file log, setsid(), setuid(), setgid(), chroot();
  • Possibilità di riavviare i processi PHP senza causare alcuna interruzione delle richieste in fase di processamento, si potra’ quindi cambiare qualsiasi parametro nel file di configurazione o addirittura aggiornare PHP senza avere nemmeno 1 secondo di downtime;
  • Possibilità di non processare le richieste provenienti da un determinato IP;
  • Possibilità di avviare i CHILD sotto differenti UID/GID/CHROOT e con differenti impostazioni di PHP (php.ini) il tutto senza bisogno di safe mode;
  • Possibilità di loggare tramite stdout e stderr;
  • In caso di corruzione della memoria RAM condivisa utilizzata da un OPCode Cache, PHP-FPM può effettuare un riavvio di emergenza di tutti i CHILD PHP;
  • Forza l’arresto dell’esecuzione di uno script nel caso in cui set_time_limit() avesse dei problemi.

Secondo un recente articolo pubblicato su CloudWays, effettuare uno switch da mod_php a PHP-FPM permetterebbe, tra i tanti vantaggi attesi, di ridurre del 300% i tempi di caricamento delle Web Application a traffico elevato.

Un sito Web chiavi in mano

bitnami_web_appsBitNami Stack :  a ognuno il suo

Oggi giorno molti, moltissimi, hanno sentito nominare parole come WordPress, Joomla, CMS ecc…, ma pochi associano questi nomi ai software necessari per il loro funzionamento.
Tra le diverse figure professionali coinvolte possiamo senza dubbio evidenziare :

  • il semplice utilizzatore, ignaro di come funzioni Internet ma che vuole crearsi un Blog
  • il web designer, che magari non conosce linguaggi di programmazione, ma e’ un dio nell’art design
  • lo sviluppatore che ama creare nuovi software ma non e’ molto competente come sistemista

Seppure la piattaforma “standard de facto” LAMP (Linux+Apache+Mysql+PHP) sia ancora quella piu’ diffusa, molte altre nuove soluzioni sono nate, con l’intento di colmare le carenze pre esistenti sui vecchi sistemi e di migliorare l’esperienza lavorativa dell’utente finale.

BitNami Stack e’ una soluzione pronta all’uso; il concetto alla base del progetto e’ che ognuno, competente o non, ha il diritto di poter utilizzare qualunque applicazione web senza dover essere necessariamente un genio dell’informatica. Ad oggi sono gia circa un centinaio le applicazioni web chiavi in mano fornite sul portale, e la lista dei coming soon e’ altrettanto lunga.

L’installazione classica e’ un’operazione molto semplice, bastera’ andare sul sito da questo link , scegliere l’applicazione web di nostro interesse, selezionare il tipo di pacchetto e scaricarlo in locale; successivamente dare i permessi di esecuzione al pacchetto e lanciarlo, le poche domande che verranno fatte serviranno semplicemente a configurare l’utenza di utilizzo dell’applicazione, la porta di connessione al DB e, se si desidera, un account mail (tramite SMTP protocol) per l’invio delle mail di notifica della App.

chmod +x bitnami-owncloud-7.0.1-0-linux-installer.run
sudo ./bitnami-owncloud-7.0.1-0-linux-installer.run

Esistono anche altre due modalita’ : Live & Cloud

Live : per tutti coloro che non intendono utilizzare direttamente le applicazioni sul proprio pc/server esiste la possibilita’ di scaricare le immagini per VMWare e, volendo, utilizzando VMWare vCenter Converter Tool, sara’ possibile utilizzarle anche con VirtualBox o Kvm.

Cloud : per chi preferisce le soluzioni Cloud, BitNami offre un servizio Cloud dedicato per l’installazione del software; in alternativa si trovano a disposizione gli script per Amazon, bastera’ scaricare il template e caricarlo successivamente su Amazon.

Con una tale facilita’ di utilizzo non mi rimane che dirvi : “testate gente, testate” !!!!

Per maggior info consiglio anche di leggere “BitNami: CMS impacchettati per tutti

BitNami: CMS impacchettati per tutti

bitnamiBitnami 

Bitnami è una libreria di applicazioni server popolari e ambienti di sviluppo che possono essere installati con un solo click, sia in un computer portatile, in una macchina virtuale o ospitato nel cloud. Nel pacchetto che sceglierete d’installare, che sia un WebServer od un ambiente CMS,  trovere gia’ compilate e configurate tutte le librerie necessarie a rendere da subito utilizzabile il vostro nuovo ambiente di lavoro / test.

Bitnami LAMP Stack (ossia come allestire un Server Web con un clic)

Introduzione

In questo articolo vedremo come installare in pochi e semplici passaggi un server web (Apache), che si occupa di ricevere ed elaborare le richieste di caricamento delle pagine, e un database (MySQL o PostgreSQL), su cui verranno memorizzate le informazioni associate all’applicazione web; sono disponibili svariati pacchetti che offrono la possibilità di allestire facilmente e con pochi clic un ambiente completo, preconfigurato e perfettamente funzionante.

Le combinazioni di piattaforme più comuni vengono denominate ” xAMP “, ove la prima lettera x indica il sistema operativo utilizzato (L = Linux, M = MacOS e W = Windows i più comuni), la seconda si riferisce al server web (A = Apache), la terza al database (M = MySQL, P = PostgreSQL) e la quarta ai linguaggi usati per scrivere le pagine web (P = Perl/PHP/Python); tra i numerosi pacchetti disponibili, si segnalano per completezza e facilità d’installazione ed utilizzo XAMPP e BitNami xAMP Stack, entrambi disponibili per Linux, MacOS e Windows e con la possibilità di installarne copie multiple ed indipendenti sulla stessa macchina.

La scelta è ricaduta su BitNami LAMP Stack per tre motivi principali:

  • l’installazione non richiede privilegi amministrativi in ambiente Linux;
  • è espandibile mediante moduli (consente ad esempio di installare con un clic Drupal, WordPress, Ruby-Rails…);
  • supporta non solo MySQL ma anche PostgreSQL e ne rende possibile l’installazione contemporanea.

Installazione

Per prima cosa dovremo accedere alle pagine di download del pacchetto per Linux (qui) o Windows (qui): la scelta del database è ricaduta su MySQL semplicemente  in virtù della sua maggiore diffusione, ma raccomando caldamente di provare PostgreSQL (quando affronteremo l’accesso ai database da PHP cercherò di fornire indicazioni e istruzioni per entrambi); in ogni caso le istruzioni di installazione riportate di seguito rimangono sostanzialmente valide anche per il pacchetto denominato LAPP e basato su PostgreSQL.

Raggiungete la tabella riportata nella sezione Native della pagina indicata sopra e individuate la riga corrispondente alla versione desiderata (al momento LAMPStack 5.4.30-0): fate clic sul link in corrispondenza della colonna che riporta la versione del vostro sistema operativo (a 32 o 64 bit).

Terminato il download del file, dovrete controllare dove è stato scaricato ed eseguirlo; in ambiente Linux la procedura richiede invece qualche comando da terminale:

chmod +x Scaricati/bitnami-lampstack-5.4.30-0-linux-x64-installer.bin
./Scaricati/bitnami-lampstack-5.4.30-0-linux-x64-installer.bin

Nel mio caso (Ubuntu 14.04) il file è nella cartella Scaricati e si chiama bitnami-lampstack-5.4.30-0-linux-x64-installer.bin.

Si avvierà una procedura d’installazione guidata che richiede la cartella di destinazione , la password da utilizzare per l’utente amministratore (root su MySQL, postgres su PostgreSQL) del database e la porta logica riservata al server web; per il primo e ultimo parametro potete lasciare il valore predefinito.

Al termine della procedura verrà aperta la pagina principale del server web sul vostro browser predefinito e, nella barra degli indirizzi, potrete vedere una stringa del tipo http://127.0.0.1:8080/
127.0.0.1 rappresenta l’indirizzo del computer locale e 8080 indica la porta indicata in precedenza e su cui è in ascolto il server web. Se esplorate la cartella in cui avete scelto di installare il pacchetto, troverete svariati file e cartelle: le pagine web andranno salvate all’interno della cartella (esempio) /var/www/htdocs/   o in una qualsiasi sottocartella; ad esempio, supponiamo di aver creato una cartella ” prova “ e al suo interno il file pagina.php, per aprire quest’ultimo nel browser dovrò digitare nella barra degli indirizzi:

 

http://127.0.0.1:8080/prova/pagina.php

Trovate un esauriente elenco di tutte le applicazione “stack” che potrete installare grazie ai pacchetti forniti da Bitnami al seguente indirizzo : https://bitnami.com/stacks