Primi passi con Docker e Prestashop 1.7

Ieri è stata la giornata del Prestashop day a Milano, un evento di cui parlerò meglio in un altro post. Quello di cui voglio parlarti oggi è come ho cominciato a smanettare con Docker.

Prestashop 1.7 è da qualche giorno in RC e ho pensato di dedicarmici un attimo per comprenderne le novità di cui ho sentito parlare e magari iniziare a produrci qualcosa.
Per scaricare questa nuova versione sono andato sulla pagina dedicata ai download delle versioni per sviluppatori e mi sono incuriosito dal prominente link con la balena che campeggia ad altezza occhio.Screenshot 2016-09-30 10.08.12.png

Ho visto e sentito grandi cose su Azure, ma per ora concentriamoci su Docker.

Cliccando il link si viene rimandati alla pagina dell’immagine da scaricare e viene proposto un comodissimo comando docker pull prestashop/prestashop  da eseguire da terminale.

Ammazza che semplicità” ho pensato, e ho capito che era giunto il momento di dare una opportunità a Docker.

Scaricato e installato il dmg, l’ho eseguito, e un balenottero si è aggiunto alle altre icone nella tray del mac. Al primo avvio un popup incita a prendere familiarità coi comandi di docker, e per comododità te li riporto tutti qui:

⇒ docker help
Usage: docker [OPTIONS] COMMAND [arg...]
docker [ --help | -v | --version ]

A self-sufficient runtime for containers.

Options:

--config=~/.docker Location of client config files
-D, --debug Enable debug mode
-H, --host=[] Daemon socket(s) to connect to
-h, --help Print usage
-l, --log-level=info Set the logging level
--tls Use TLS; implied by --tlsverify
--tlscacert=~/.docker/ca.pem Trust certs signed only by this CA
--tlscert=~/.docker/cert.pem Path to TLS certificate file
--tlskey=~/.docker/key.pem Path to TLS key file
--tlsverify Use TLS and verify the remote
-v, --version Print version information and quit

Commands:
attach Attach to a running container
build Build an image from a Dockerfile
commit Create a new image from a container's changes
cp Copy files/folders between a container and the local filesystem
create Create a new container
diff Inspect changes on a container's filesystem
events Get real time events from the server
exec Run a command in a running container
export Export a container's filesystem as a tar archive
history Show the history of an image
images List images
import Import the contents from a tarball to create a filesystem image
info Display system-wide information
inspect Return low-level information on a container, image or task
kill Kill one or more running containers
load Load an image from a tar archive or STDIN
login Log in to a Docker registry.
logout Log out from a Docker registry.
logs Fetch the logs of a container
network Manage Docker networks
node Manage Docker Swarm nodes
pause Pause all processes within one or more containers
port List port mappings or a specific mapping for the container
ps List containers
pull Pull an image or a repository from a registry
push Push an image or a repository to a registry
rename Rename a container
restart Restart a container
rm Remove one or more containers
rmi Remove one or more images
run Run a command in a new container
save Save one or more images to a tar archive (streamed to STDOUT by default)
search Search the Docker Hub for images
service Manage Docker services
start Start one or more stopped containers
stats Display a live stream of container(s) resource usage statistics
stop Stop one or more running containers
swarm Manage Docker Swarm
tag Tag an image into a repository
top Display the running processes of a container
unpause Unpause all processes within one or more containers
update Update configuration of one or more containers
version Show the Docker version information
volume Manage Docker volumes
wait Block until a container stops, then print its exit code

Per ognuno di questi comandi è poi disponibile un help dedicato, ad esempio docker help run ci fornirà indicazioni sulle opzioni disponibili per il comando docker run.

Le opzioni messe a disposizione dal team Prestsahop per configurare il container sono molte, elencate in fondo alla pagina, e per utilizzarle, vanno incluse nel comando di run in uno dei due modi seguenti, dove il primo elenca le variabili di ambiente e i loro valori runtime con l’opzione -e mentre il secondo consente di utilizzare un comodo file .env che va creatoa parte

⇒  docker run -ti --name prestashop-test -p 8080:80 -d -e "PS_COUNTRY='it'" prestashop/prestashop
⇒  docker run -ti --name prestashop-test -p 8080:80 -d --env-file ".env" prestashop/prestashop

Esempio di file .env

PS_LANGUAGE="it"
PS_COUNTRY="it"

Ma attenzione, perchè una volta fatto partire il container, e avviata l’installazione ti ritroverai con un problemuccio (che a dire il vero è segnalato come important note)
Non c’è il server MySQL!!1!
(continua)

 

 

 

Wordmove

Il bravissimo Andrea Barghigiani ti può spiegare in questo articolo che cos’è Wordmove e come si installa. In questo post invece, ti racconterò la mia ultima esperienza con questo ottimo tool e come ho risolto i problemi che ho incontrato.

Partiamo dal principio: l’ultima volta che ho usato Wordmove ne ero rimasto molto impressionato. E’ uno di quegli strumenti su cui puoi fare affidamento ad occhi chiusi, scommettendo mani, figli e quant’altro con i tuoi colleghi sul fatto che faccia quello che gli si dice senza darti problemi. Questa è la volta in cui ho perso mani, figli e quant’altro 🙂

Come puoi leggere nel post di Andrea, è piuttosto semplice installare Wordmove su Mac. Ma utilizzandolo con Vagrant, ti renderai subito conto che non devi utilizzarlo su mac, ma sulla tua macchina guest, che è quella che contiene il database. Quindi, se la tua Vagrant non si basa su una box che ha già installato Wordmove (come l’ottima Vccw) bisogna installarlo a manina e vediamo come.

Verificare la versione di Ruby

Alcune dipendenze di Wordmove richiedono Ruby >= 2.0.0 e la nostra piccola.. dolce.. Vagrant Machine (basata su Ubuntu 14.04) ha installato la versione 1.9. Bisogna allora aggiornarla, con questi comandi

$ sudo apt-get install python-software-properties
$ sudo apt-add-repository ppa:brightbox/ruby-ng
$ sudo apt-get update
$ sudo apt-get install ruby2.1 ruby-switch
$ sudo ruby-switch --set ruby2.1

Installare il gem

Questa è stata facile

sudo apt-get install rubygems-integration

Installare Wordmove

sudo gem install wordmove

Installare lftp

Anche questa è stata facile

sudo apt-get install lftp

Quando poi finalmente ti sembra tutto a posto e puoi eseguire il push, noterai che lftp si incazza e inizia a blaterare qualcosa riguardo ai certificati ssl. Per farlo smettere, bisogna dirgli che non ci interessa la verifica di quei certificati, impostando un parametro in ~/.lftprc
echo ssl:verify-certificate false > ~/.lftprc

Verifica e impostazione del locale

Se si sta lavorando su siti in italiano, è probabile che alla fine della push, quando stai per festeggiare che tutto è andato bene e più precisamente durante l’adattamento del dump – sì, Wordmove adatta il dump tra i vari host, si ottenga un errore del tipo “invalid byte sequence in US-ASCII”. Questo vuol dire che la tua guest non è configurata per lavorare con il locale in italiano. Per sistemare, puoi eseguire questi due comandi per generare il locale italiano e imporre l’utilizzo al sistema:

sudo locale-gen "it_IT.UTF-8"
echo "LC_ALL=\"it_IT.UTF-8\"" | sudo tee -a /etc/environment

E fu così che sono riuscito ad usare ancora una volta, con supremo piacere Wordmove, che rimane un tool insostituibile da affiancare a wp-cli.

Ora a letto bambini, che è tardi. Bambini?? Ah già li ho persi.. 😀