Google ha, da qualche settimana, aggiunto alla sua Cloud Platform il supporto al linguaggio PHP. Ciò significa che è possibile sfruttare i servizi Cloud di Mountain View (in particolare App Engine) per eseguire applicazioni in PHP e installare i più noti e diffusi CMS, tra i quali WordPress.
In questo articolo vedremo proprio come installare WordPress sulla Google Cloud Platform (che chiameremo da ora in poi GCP) sfruttando l’account gratuito che Google mette a disposizione sulla piattaforma App Engine e Cloud SQL. La base di questo articolo è rappresentato dalla documentazione ufficiale disponibile sul sito Google Developers e il sistema locale utilizzato per lo sviluppo è Windows.
Prima di iniziare, vanno comunque specificati due cose:
- Il supporto PHP è stato attivato in via sperimentale ed è ad accesso limitato. Per poter ricevere il permesso di distribuire applicazioni in PHP sulla piattaforma si dovrà, oltre che registrarsi a Google App Engine, compilare il questionario accessibile alla pagina https://gaeforphp.appspot.com/ e attendere che il proprio account venga abilitato.
- Per poter creare un’istanza di WordPress sulla GCP sono necessari due componenti: App Engine, la vera e propria piattaforma per l’esecuzione delle applicazioni, e Cloud SQL, la versione di MySQL nel Cloud. App Engine è gratuito fino a 1 GB di banda in uscita, 1 GB di spazio e 28 ore di esecuzione (tutti limiti giornalieri). Cloud SQL non prevede invece un piano gratuito, ma il suo utilizzo parte da un prezzo discretamente basso: 0,10 dollari ad ora e 0,24 dollari per 1 GB di storage al mese.
Registrazione e creazione dell’applicazione
Fatte queste premesse, la prima cosa da fare è quella di registrarsi alla GCP disponibile all’indirizzo http://cloud.google.com/. Alla prima iscrizione vi sarà chiesto di indicare un nome e un identificativo per la prima applicazione (Project nel linguaggio della GCP). Nel caso foste già iscritti, è possibile registrare una nuova app facendo clic, sulla homepage del servizio, sul pulsante rosso Create Project. In entrambi i casi, verrà presentata l’interfaccia mostrata nella seguente figura:
Inserite nel campo Project Name il nome dell’applicazione (WordPress è ok) e nel campo Project ID un identificativo dell’applicazione, univoco nell’intera GCP, composto da 6 a 30 tra lettere, numeri o trattini. Da notare che l’identificativo, che non potrà essere cambiato, verrà usato non solo in diversi altri punti della configurazione ma anche nel dominio al quale l’applicazione sarà accessibile online: nel nostro caso abbiamo creato un’applicazione con ID fc-wordpress e dunque navigheremo il nostro WordPress all’indirizzo fc-wordpress.appspot.com.
I software necessari
Per sviluppare applicazioni PHP per la GCP sono necessari i seguenti software:
- La versione 2.7 di Python per Windows. Dalla pagina di download scegliete di installare l’ultima versione della branca 2.7 (nel nostro caso era la 2.7.5). Scegliete di installare la versione indicata come Windows x86 MSI Installer.
- La versione 5.4 di PHP per Windows. Dalla pagina di download di PHP scegliete la versione VC9 x86 Thread Safe. PHP è distribuito in formato ZIP: per renderlo utilizzabile basta estrarre il contenuto in una cartella.
- L’ultima versione disponibile dell’App Engine SDK for PHP. Nel nostro caso abbiamo installato la 1.8.3. Anche l’SDK è distribuito in formato ZIP: per renderlo utilizzabile basta estrarre il contenuto in una cartella.
- La versione 5 di MySQL per Windows. Dalla pagina di download, scegliete la versione General Available. Installare in locale MySQL non è necessario per distribuire l’applicazione, ma è utile per testare in locale WordPress prima di inviarlo ai server di Google. Durante l’installazione lasciate le impostazioni predefinite ad eccezione di Setup Type dove dovrete scegliere Server only.
- Nella finestra di indicazione della password lasciate in bianco il campo Current root password. Segnatevi comunque la password, sarà utilizzata nella configurazione del database.
Il nostro consiglio, anche per seguire meglio le istruzioni di questo articolo, è quello di installare i software necessari in modo coerente: create una cartella in una partizione del sistema e, all’interno di essa, installate o estraete tutti i software necessari, ottenendo una configurazione simile a quella mostrata nella seguente figura. Nel nostro caso, abbiamo creato una cartella chiamata gae-wp nella partizione D: e al suo interno abbiamo estratto o installato i vari software.
Configurazione dei software
Ognuno dei software indicati ha bisogno di qualche piccola configurazione che vedremo di seguito.
Configurazione di PHP
All’interno della cartella in cui avete estratto PHP rinominate il file php.ini-development in php.ini e aggiungete il seguente blocco di codice in fondo al file:
extension=php_curl.dll
extension=php_gd2.dll
extension=php_imap.dll
extension=php_mbstring.dll
extension=php_mysql.dll
extension=php_mysqli.dll
extension=php_openssl.dll
extension=php_pdo_mysql.dll
eextension=php_xmlrpc.dll
extension_dir = "D:\gae-wp\php-5.4.19-Win32-VC9-x86ext"
google_app_engine.enable_functions = "php_sapi_name, gc_enabled"
L’unico parametro da adattare alla propria configurazione è il percorso delle estensioni di php alla voce extension_dir s sostituendo a D:\gae-wp\php-5.4.19-Win32-VC9-x86\ext il percorso completo della cartella ext di PHP.
Configurazione di MySQL
MySQL ha semplicemente bisogno della creazione di un database destinato ad ospitare i dati di WordPress in locale. Avviate il programma MySQL 5.6 Command Line Client (dove 5.6 varia in base alla versione che avete installato) digitando il nome nella casella del menu Start di Windows, inserite la password indicata in fase di installazione e incollate i seguenti comandi per la creazione del database. Potete naturalmente personalizzare i campi sostituendo a gae_wp il nome del database che volete creare, a gae_wp_user il nome utente e a gae_wp_password l la password per l’utente.
CREATE DATABASE IF NOT EXISTS gae_wp; CREATE USER 'gae_wp_user'@'localhost' IDENTIFIED BY 'gae_wp_password'; GRANT ALL PRIVILEGES ON gae_wp.* TO 'gae_wp_user'@'localhost';
Configurazione di WordPress
Passiamo ora alla configurazione di WordPress per la GCP. Per prima cosa create una cartella chiamata wp-devel (o un nome a vostro piacimento) in una partizione del computer. Il nostro consiglio è quello di crearla all’interno della stessa cartella principale in cui avete estratto o installato i software necessari, così:
Scaricate poi l’ultima versione disponibile di WordPress da it.wordpress.org, noi abbiamo usato la versione 3.6, ed estraete i file in una cartella chiamata wordpress all’interno della cartella wp-devel. Sempre all’interno di wp-devel è necessario creare due file. Il primo va nominato app.yaml e dovrà contenere il seguente codice:
application: YOUR_PROJECT_ID
version: wp01
runtime: php
api_version: 1
handlers:
- url: /(.*.(htm$|html$|css$|js$))
static_files: wordpress/1
upload: wordpress/(.*.(htm$|html$|css$|js$))
application_readable: true
- url: /wp-content/(.*.(ico$|jpg$|png$|gif$))
static_files: wordpress/wp-content/1
upload: wordpress/wp-content/(.*.(ico$|jpg$|png$|gif$))
application_readable: true
- url: /(.*.(ico$|jpg$|png$|gif$))
static_files: wordpress/1
upload: wordpress/(.*.(ico$|jpg$|png$|gif$))
- url: /wp-admin/(.+)
script: wordpress/wp-admin/1
secure: always
- url: /wp-admin/
script: wordpress/wp-admin/index.php
secure: always
- url: /wp-login.php
script: wordpress/wp-login.php
secure: always
- url: /wp-cron.php
script: wordpress/wp-cron.php
login: admin
- url: /xmlrpc.php
script: wordpress/xmlrpc.php
- url: /(.+)?/?
script: wordpress/index.php
In rosso abbiamo indicato l’unico parametro da modificare: al posto di YOUR_PROJECT_ID dovete riportare l’identificativo dell’applicazione che avete creato nella Console della GCP (alla voce Project ID). Se non lo ricordate, basta collegarsi alla console della GCP e individuare l’ID accanto al nome dell’applicazione:
Il secondo file da creare andrà chiamato cron.yaml e dovrà contenere il seguente codice:
cron: - description: wordpress cron tasks url: /wp-cron.php schedule: every 2 hours
Infine, ma non meno importante, copiate il file php.ini modificato poco fa nella stessa cartella wp-devel..
In definitiva, la cartella wp-devel dovrà contenere ora la cartella wordpress, i file cron.yaml e app.yaml e il file php.ini copiato dalla cartella di PHP.
Installazione di WordPress in locale
A questo punto è tutto pronto per testare WordPress sul proprio computer. Avviate il prompt dei comandi di Windows (basta scrivere cmd nella casella di ricerca del menu Start di Windows) ed eseguite i seguenti comandi:
D:\gae-wp\python27\python D:\gae-wp\google_appengine\dev_appserver.py --php_executable_path=D:\gae-wp\php-5.4.19-Win32-VC9-x86php-cgi.exe D:\gae-wp\wp-devel
Naturalmente i percorsi indicati vanno adattati alla configurazione che è stata scelta e modificati in base alla cartella in cui sono stati estratti Python, PHP e in cui è stato estratto WordPress.
Se tutto dovesse andare a buon fine, basterà collegarsi alla pagina http://localhost:8080/ per visualizzare la classica procedura di configurazione di WordPress:
La procedura, per chi non la conoscesse, è estremamente semplice. L’unico punto cui prestare attenzione è la configurazione del database. Nel nostro caso, utilizzando i dati che abbiamo scelto nella creazione del DB, avremo la seguente configurazione:
Al termine dell’installazione, avremo la nostra copia di WordPress in locale eseguita su Google App Engine:
Deploy di WordPress su Google App Engine
Per installare WordPress online sulla GCP dovremmo compiere sostanzialmente due passi: creare un database nel servizio Cloud SQL ed eseguire il deploy dell’applicazione.
Configurazione del database Cloud SQL
Come abbiamo specificato nell’introduzione, Cloud SQL è un servizio che non prevede un piano gratuito. Nella configurazione di base che suggeriamo, il servizio costerà 10 centesimi di dollaro all’ora per ogni database attivo più 0,24 dollari mensili per 1 GB di spazio. “Attivo” significa che verrà fatturato solo il tempo in cui il database viene usato da WordPress: ad ogni accesso il database rimane attivo per i successivi 15 minuti e poi torna nello stato di riposo (in cui non genera costi). Fate attenzione: WordPress è configurato per eseguire periodicamente delle attività che richiedono accesso al DB. L’intervallo di tempo nel nostro caso è specificato nel file cron.yaml ed è impostato a 2 ore (every 2 hours). Per allungare l’intervallo basta sostituire a “2” il numero di ore che si desidera.
Attivazione della Fatturazione
Poiché è un servizio a pagamento, Cloud SQL ha bisogno che il servizio di fatturazione sia attivo. Collegatevi alla console della GCP, fate clic sull’applicazione creata all’inizio di questo articolo e, dal menu visualizzabile dall’icona a forma di ingranaggio in alto a destra, scegliete la voce Billing, poi fate clic sul pulsante Enable Billing e seguite il processo di registrazione della carta di credito.
Creazione dell’istanza
Attivata la fatturazione, è possibile creare ora un’istanza di un database Cloud SQL. Tornate all’homepage della console della GCP, scorrete l’elenco dei servizi e fate clic su Cloud SQL e poi sul pulsante rosso New Instance. I campi che vanno compilati sono sostanzialmente due:
- Alla voce Instance ID va indicato un identificativo del database (ad esempio: wordpress).
- Alla voce Applications va indicato l’identificativo dell’applicazione che avete creato nella Console della GCP (alla voce Project ID ). Nel nostro caso l’applicazione è fc-wordpress.
Per quanto riguarda gli altri campi va notato che la Region del database (impostata a United States) deve corrispondere alla regione impostata per l’applicazione (nella versione gratuita di App Engine l’applicazione può essere solo ospitata negli Stati Uniti); il Tier può essere modificato in caso si avesse bisogno di più RAM (aumentando comunque la spesa) e il Billing Plan può essere modificato da Per Use, in cui si paga in base alle ora di utilizzo, a Package, in cui si paga in base ai giorni di utilizzo. Dettagli sui piani a pagamento sono disponibili su una pagina di supporto.
Per creare l’istanza, fate clic sul pulsante blu Confirm.
Creazione del database
A questo punto non resta altro da fare che creare il database all’interno dell’istanza. Al momento in cui scriviamo la console della GCP non ha uno strumento adatto allo scopo. Per farlo ci si deve collegare, con l’account usato sinora, alla API Console di Google, fare clic su Google Cloud SQL sul menu di sinistra per trovare l’istanza appena creata:
Per creare il database si deve usare il pannello a riga di comando messo a disposizione dal servizio. Fate clic sul nome dell’istanza (nel nostro caso fc-wordpress:wordpress), poi su SQL Prompt in alto ed incollate nel campo testuale le seguenti righe, una ad una. Ad ogni comando, fate clic su Execute per eseguirlo.
CREATE DATABASE IF NOT EXISTS gae_wp; CREATE USER 'gae_wp_user'@'localhost' IDENTIFIED BY 'gae_wp_password'; GRANT ALL PRIVILEGES ON gae_wp.* TO 'gae_wp_user'@'localhost';
Le righe sono le stesse che abbiamo usato al momento di configurare il nostro database MySQL locale e, come allora, possono essere modificate sostituendo a gae_wp il nome del database che volete creare, a gae_wp_user il nome utente e a gae_wp_password la password per l’utente. L’importante è che i dati indicati siano gli stessi che sono stati utilizzati nella copia locale poiché, al momento del deploy, le configurazioni di WordPress impostate localmente saranno replicate online.
Per verificare che il database sia stato effettivamente creato, usate il comando SHOW DATABASES;
accertandovi che il database gae_wp, o come lo avete chiamato, sia presente nella tabella mostrata come risultato.
Deploy di WordPress
A questo punto possiamo eseguire il vero e proprio deploy dell’applicazione. Aprite il file wp-config.php all’interno della cartella di wordpress e sostituite all’istruzione define('DB_HOST', 'localhost');
l’istruzione
if (isset($_SERVER['SERVER_SOFTWARE']) && strpos($_SERVER['SERVER_SOFTWARE'], 'Google App Engine') !== false) {
define('DB_HOST', ':/cloudsql/fc-wordpress:wordpress');
} else {
define('DB_HOST', 'localhost');
}
In rosso abbiamo indicato la voce da sostituire: al suo posto va indicato il nome della propria istanza del database che si può ricavare dalla console Cloud SQL della GCP:
oppure dalla Api console:
Questa modifica permetterà a WordPress di usare il database locale nel caso fosse eseguito localmente sul computer e di usare invece quello online quando il servizio sarà distribuito su Google App Engine.
È tutto. Per eseguire il deploy di WordPress eseguite, modificando eventualmente i percorsi indicati, la seguente istruzione da prompt dei comandi di Windows:
D:\gae-wp\python27\python D:\gae-wp\google_appengine\appcfg.py update D:\gae-wp\wp-devel
Al momento del deploy verrà richiesta, prima, la email del proprio account e, poi, la password: indicatele confermando con un invio.
Per visualizzare il sito si dovrà puntare il browser alla pagina http://fc-wordpress.appspot.com sostituendo a fc-wordpress l’identificativo della propria applicazione. Se tutto è stato eseguito correttamente, vedrete la pagina di configurazione del vostro blog Wordress su Google App Engine.
Il plugin per caricare immagini e file
Per rendere il sito costruito con WordPress su Google App Engine perfettamente funzionante manca un ultimo passo. Per caricare immagini nel Cloud di Google o gestire l’invio di messaggi di posta elettronica o attivare altre funzionalità del CMS è necessario creare un bucket nel servizio Google Cloud Storage, ossia uno spazio su cui caricare file, e installare il plugin Google App Engine for WordPress .
Per creare il bucket (dal costo per GB di 0,085 dollari al mese) si dovrà accedere alla console della GCP, fare clic sulla voce Cloud Storage e poi sul pulsante New Bucket assegnando al bucket un nome. Ora è necessario assegnargli i permessi di lettura/scrittura: fate clic su Home per tornare alla pagina iniziale del servizio Cloud Storage, spuntate il checkbox accanto al bucket appena creato e premete il pulsante Bucket Permissions indicando nella casella l’indirizzo email dell’applicazione (chiamato Service Account Name) usata per la distribuzione di WordPress e dando all’utente permessi di lettura e scrittura (voce Owner).
Il Service Account Name è formato dall’identificativo dell’applicazione seguito da @appspot.gserviceaccount.com: nel nostro caso sarà dunque fc-wordpress@appspot.gserviceaccount.com. Il Service Account Name è inoltre ricavabile dalla sezione Application Settings dell’applicazione nella console di App Engine.
Passiamo ad installare il plugin in locale. Lanciate la versione locale del proprio sito eseguendo dal prompt di Windows, dopo aver modificato eventualmente i percorsi, l’istruzione:
D:\gae-wp\python27\python D:\gae-wp\google_appengine\dev_appserver.py --php_executable_path=D:\gae-wp\php-5.4.19-Win32-VC9-x86\php-cgi.exe D:\gae-wp\wp-devel
Puntate il browser all’indirizzo http://localhost:8080/wp-admin/plugin-install.php, eseguite il login, cercate dalla casella di ricerca il plugin Google App Engine for WordPress e, una volta trovato, fate clic sulla voce Installa Adesso. Il plugin non va attivato.
Riversate dunque online le modifiche locali aggiornando la copia online di WordPress su App Engine (sempre dal prompt di Windows e sempre facendo attenzione a modificare eventualmente i percorsi) con il comando:
D:\gae-wp\python27\python D:\gae-wp\google_appengine\appcfg.py update D:\gae-wp\wp-devel
La versione online, all’indirizzo https://fc-wordpress.appspot.com/wp-admin/plugins.php (sostituite a fc-wordpress l’identificativo della vostra applicazione), dovrebbe mostrare il plugin di WordPress appena aggiunto: fate clic su Attiva per attivarlo.
L’ultimo passaggio consiste nell’impostazione del plugin: seguite, dall’amministrazione di WordPress, il percorso Impostazioni / App Engine e nella casella Bucket Name indicate il nome del bucket scelto al momento della sua creazione. Ora siete in grado anche di caricare file su WordPress, come immagini o documenti.
La configurazione è così terminata: per non incorrere in fatturazioni non volute potete monitorare i consumi dalla Cloud Console. Per interrompere il consumo, dovrete cancellare il database dal servizio Cloud SQL e il bucket dal servizio Cloud Storage.