OVH Guide

Ottimizza con Docker il tuo sito WordPress ospitato su un VPS

''

  • VPS
  • Docker
  • WordPress
  • Piwik
  • Contenitore

  • 1 VPS Cloud 1 in Ubuntu 14.10 su cui installerai manualmente Docker (è disponibile anche un template Ubuntu 14.04 con Docker preinstallato per VPS Cloud e VPS Classic).

Grazie a Docker, avrai a disposizione 3 contenitori distinti sul VPS:

  • 1 contenitore per WordPress (file statici)
  • 1 contenitore per il database MySQL utilizzato da WordPress
  • 1 contenitore per Piwik, un sistema open source di analisi del traffico di un sito.

Il primo aspetto interessante di Docker è che i diversi componenti vengono installati in contenitori distinti permettendo così di aumentare la sicurezza del tuo server. In questo modo, anche in caso di problemi a WordPress, puoi comunque accedere ai file di configurazione (ma mai al VPS o all'applicazione Piwik). Se uno dei contenitori viene piratato, basta fermarlo, ripristinare un backup, applicare le correzioni e riavviare il contenitore senza alcuna conseguenza per gli altri.

Altro punto importante: la scalabilità della soluzione. Dato che il contenitore è indipendente dalla piattaforma su cui viene eseguito, può essere facilmente spostato su qualsiasi altro server Linux (a ottobre 2014 Docker Inc. ha firmato un accordo con Microsoft per far sì che la soluzione sia integrata sui SO Windows. Per maggiori informazioni clicca qui). In termini pratici, se domani il tuo sito cresce, puoi facilmente spostare il contenitore del database su un secondo VPS o su un server dedicato fisico.

Infine, nel caso di un server che ospita un gran numero di siti, passare a Docker ti dà la possibilità di avere un server più facile da gestire e mantenere: i siti sono inseriti in contenitori indipendenti, facili da spostare e migliorare, senza dover ogni volta riconfigurare l'ambiente dell'applicazione.

Prima di poter installare Docker su un VPS Cloud OVH, devi modificare il kernel del VPS dato che quello fornito di default da OVH non consente l'installazione e il corretto funzionamento di Docker. Per farlo, connettiti al VPS, scarica e installa l'ultimo kernel generico per Ubuntu:

apt-get install linux-image-generic

Scopri di più sul kernel da utilizzare in base alla tua versione di Ubuntu.

Devi poi richiedere al server di avviarsi sul nuovo kernel, modificando il file /etc/default/grub e impostando su 1 il GRUB_DEFAULT. Lancia un update-grub e riavvia il server. Per verificare la corretta installazione del kernel, avvia il comando "uname -a" che dovrebbe darti: "Linux vpsXXXXX 3.16.0-30-generic"

Per installare Docker:

Crea il file /etc/apt/sources.list.d/docker.list e scrivi:

deb http://get.docker.io/ubuntu docker main

Scarica la chiave GPG e installa il pacchetto:

apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
apt-get update
apt-get install lxc-docker

Ecco fatto! Ora hai a disposizione un VPS Cloud con Docker.

Puoi vedere tutte le immagini Docker già esistenti nel Docker Registry Hub, la piattaforma di hosting delle immagini Docker. Utilizzerai così immagini ufficiali mantenute da Docker Inc. per creare la tua infrastruttura. Per il database MySQL, utilizza l'immagine ufficiale MySQL, scaricabile con questo comando:

docker pull mysql:latest

Concluso il download, visualizza questa immagine avviando semplicemente il comando:

docker images

Per avviare un contenitore basato su questa immagine, lancia il comando:

docker run -e MYSQL_ROOT_PASSWORD=votremotdepasse --name db -v /home/mysql/:/var/lib/mysql/ -d mysql

Nota in questo comando la presenza di -v /home/mysql/:/var/lib/mysql/ che ti permette di creare un volume condiviso tra il contenitore del database e la macchina host. Questo risulta particolarmente utile quando, ad esempio, vuoi aggiornare il tuo contenitore dopo un problema di sicurezza: basta scaricare l'immagine aggiornata, cancellare il contenitore originale, avviare il contenitore corretto e, infine, collegare il contenitore ai dati presenti sulla macchina host. Digita poi il comando "docker ps" per verificare se il contenitore è avviato correttamente. Il risultato dovrà essere:

Ora che il tuo contenitore funziona! Hai a disposizione un database MySQL che ascolta sulla porta 3306, il cui identificativo di default è "root" e la cui password è quella definita al momento della creazione del contenitore. Per recuperare facilmente l'indirizzo IP associato al nostro container MySQL crea un alias:

alias dockip="docker inspect --format '{{ .NetworkSettings.IPAddress }}'"

Per verificare il funzionamento del tuo database, avvia una connessione verso il contenitore del database in locale digitando il comando:

mysql -h$(dockip db) -uroot -pvotremotdepasse

Il contenitore del database ascolta sulla porta 3306, ma solo in locale (raggiungibile dalla macchina host, il tuo VPS, e dagli IP dei tuoi contenitori), e non può essere raggiungibile dall'esterno.

Il principio è sempre lo stesso anche per il contenitore WordPress: devi innanzitutto scaricare una determinata immagine da registry.hub.docker.com, ad es. quella ufficiale di WordPress, con il comando:

docker pull wordpress:latest

Terminato il download, avvia il contenitore con:

docker run --name some-wordpress --link db:mysql -v /home/wp/:/var/www/html/ -p 80:80 -d wordpress

Nota in questo comando la presenza di "--link db:mysql" che permette di connettere con la massima semplicità il tuo contenitore WordPress a quello MySQL precedentemente avviato.

Basterà poi avviare un browser e inserire il dominio o l'IP corrispondente a tuo server nella barra degli indirizzi per accedere al sito (attenzione: è meglio configurare WordPress direttamente con il dominio finale, altrimenti non verrà configurato con l'URL corretto). Dovrai solo definire un nome utente e una password per accedere come amministratore a WordPress.

Hai ora a disposizione un'infrastruttura Web con un contenitore MySQL e un contenitore WordPress che funzionano insieme e comunicano!

Installa Piwik per quantificare e analizzare il numero di visite del tuo sito. Perché proprio Piwik e non un altro strumento? Perché, rispetto ai suoi competitor, l'utente può gestire completamente il tool, può proteggersi da eventuali leak di dati e può riutilizzare i dati raccolti. Per ulteriori informazioni su Piwik: http://piwik.org/

Per installare Piwik, collegati a https://registry.hub.docker.com//, cerca un'immagine Piwik in base a numero di download e preferenze e verifica il dockerfile per assicurarti che l'immagine scaricata abbia quello che ti serve. Seleziona, ad esempio, l'immagine "cbeer/piwik" che ha il vantaggio di essere automated build. Quindi, dato che il codice sorgente del contenitore è libero, chiunque può costruirlo o può essere costruito dall'hub a partire dalle sorgenti:

Per scaricare l'immagine, avvia il comando:

docker pull cbeer/piwik:latest

Terminato il download, avvia l'immagine nel contenitore con il comando:

docker run -d --name piwik --link db:mysql -p 49170:80 cbeer/piwik

Ora che il contenitore Piwik ascolta sulla porta 49170, accedi all'interfaccia Piwik inserendo nella barra degli indirizzi del browser "nome_del_dominio" o "ip_del_tuo_server", a cui aggiungere il suffisso ":49170".

Piwik ti chiederà le informazioni relative al database. Crea il tuo database per Piwik dal tuo contenitore MySQL, con username e password diversi rispetto al database WordPress in modo da aumentare la sicurezza della tua infrastruttura.

Connettiti al database dal tuo VPS:

code]mysql -uroot -h$(dockip db) -pvotremotdepasse[/code]

e digita:

CREATE DATABASE piwik;
GRANT ALL PRIVILEGES ON piwik.* TO "nom_du_user"@"%" IDENTIFIED BY 'mot_de_passe';
FLUSH PRIVILEGES;

Inserisci poi nell'interfaccia Web di Piwik questi dati:

  • server: mysql (nome dell'host creato dal link Docker --link db:mysql)
  • user: nome_utente_u
  • pass: password
  • nome del DB: piwik
  • prefisso: piwik_

Piwik ti chiederà poi l'URL del sito che dovrà analizzare, ad esempio "http://www.ilmiosito.it/", il tuo identificativo e la tua password Piwik. Una volta confermato, ti troverai alla pagina di login:

Dopo esserti collegato, entra in "Impostazioni" => "Impostazioni generali" => "Nome dell'host", per vedere il "Nome Host Piwik Valido", con "miosito.it" di default. In questo modo specifichi a Piwik che la connessione passerà da una porta specifica (in questo esempio la 49170). Il "Nome Host Piwik Valido" passerà da "miosito.it" a "miosito.it:49170", quindi salva. Manca un solo passaggio per autorizzare Piwik a raccogliere i dati di consultazione del tuo sito WordPress. Accedi al tuo WordPress, seleziona e aggiungi l'estensione e cerca il modulo "WP-Piwik". Una volta trovato, installalo e attivalo. Nelle impostazioni di WordPress, seleziona "WP Piwik", poi "Piwik settings" e specifica alcuni parametri:

  • Piwik URL (REST API): nell'esempio "http://www.ilmiosito.it:49170/"

Auth Token: recupera quest'informazione direttamente dal pannello di gestione di Piwik, in alto a destra clicca sul tuo login e poi su API e copia le lettere e le cifre che trovi dopo "&token_auth="

  • User agent: WP-Piwik

Salva le modifiche e vai alla pagina "Tracking", sempre nella configurazione di "WP-Piwik". Spunta la casella "Add tracking code" e salva.

Ora il tuo Piwik è in funzione e ti mostrerà le statistiche del tuo sito.

Ora che hai creato i 3 contenitori e hai installato tutti i componenti, imposta i parametri di sicurezza del VPS. Utilizza fail2ban per mettere in sicurezza la connessione sulla porta 22 (SSH) del tuo VPS. Per installare fail2ban:

apt-get install fail2ban

La porta 22 viene monitorata automaticamente, ma se hai modificato i parametri di default o se vuoi cambiare il blacklisting degli IP (bandtime, findtime), devi modificare il file /etc/fail2ban/jail.conf. Per ulteriori informazioni sull'utilizzo e sulla configurazione di fail2ban: http://www.fail2ban.org/wiki/index.php/Main_Page

Per aumentare la sicurezza, puoi anche aggiungere regole iptables per filtrare o chiudere le porte che il server non utilizza. Puoi proteggere la tua infrastruttura installando fail2ban e creando regole iptables ancora prima di installare Docker, in modo da prevenire attacchi durante l'installazione.

Grazie a Docker, hai potuto creare rapidamente un'infrastruttura Web di base (Wordpress, MySQL, Piwik) ottimizzata e sicura. Hai visto anche come utilizzare uno strumento di orchestrazione come Docker o Gaudi e come creare un reverse proxy Nginx nei contenitori che permettono di utilizzare la porta 80 e SSL. Come vedi, sono molti gli argomenti relativi a Docker, scoprili tutti con i prossimi articoli.