Desenvolvendo para WordPress com Docker, Git e WP-CLI

Preview:

Citation preview

Desenvolvendo para WordPress

com Docker, Git e WP-CLI

Como construir um ambiente de desenvolvimento inteligente para um workflow mais prático e ágil

Rudá AlmeidaIntegrante da equipe de Tecnologia da Informação da UFRJ

Entusiasta do WordPress e integrante da comunidade carioca

Já palestrei e ajudei a organizar Meetups e WordCamps no Rio de Janeiro

WP-CLIUm verdadeiro canivete

suíço para o WordPress

O que éGerencia o WordPress via linha de comando

Simplifica tarefas tediosas e repetitivas

Dispensa o uso do navegador

Automação e programabilidade

Vamos ver alguns exemplos?

Instalando o WordPress “do zero”$ wp core download

$ wp core config --dbname=wordpress --dbuser=root --dbpass=wordpress

$ wp db create

$ wp core install --url=localhost --title=WordCamp --admin_user=admin --admin_password=admin --admin_email=admin@example.com --skip-email

Gerenciando usuários$ wp user list

$ wp user update <usuario> --user_pass=<senha>

$ wp user create <username> <email> --role=administrator --user_pass=<senha>

$ wp user delete <user>

$ wp plugin list

$ wp plugin install advanced-custom-fields --activate

Instalando plugins

Atualizando o core e os plugins$ wp core update

$ wp plugin update --all

$ wp theme update --all

Para saber mais sobre WP-CLI

“Dominando o WP-CLI”, Gustavo Bordoni - WordPress Meetup RJ de junho de 2016

“WP-CLI: o WordPress na linha de comando”, Rodrigo Primo” - InterConWP 2014

“Gerenciando o WordPress com o WP-CLI”, Rodrigo Primo” - WordCamp BH 2014

Gitgit commit -m "#WCRJ16"

git push

O que éSistema de controle de versionamento

Guarda histórico das alterações nos arquivos

Permite “voltar no tempo” a pontos específicos

Permite colaboração entre um time

Descentralizado

Git é uma skill essencial para todo desenvolvedor WordPress

Git é uma skill essencial para todo desenvolvedor PHP

Git é uma skill essencial para todo desenvolvedor back-end

Git é uma skill essencial para todo desenvolvedor front-end

Git é uma skill essencial para todo desenvolvedor

Exemplo (extremamente!) básico de Git$ git init$ git add .$ git commit -m "initial commit"

(...algumas alterações aqui…)

$ git add .$ git commit -m "descrição do que mudou"$ git log

Github

Git Cheat Sheet

Git não é backup!

Git não é backup!

Git não é backup!

DockerÉ igual uma máquina virtual,

só que é completamente diferente.

O que éPlataforma de virtualização baseada

em contêineres

Extremamente rápido e leve em tamanho e uso de recursos

Modular e extensível

Replicabilidade e comportamento previsível

Versatilidade: a configuração do ambiente de desenvolvimento não fica mais presa à configuração da máquina local

Garantia de que desenvolvimento e produção possuem ambientes idênticos

Atualizações de pacotes na máquina local não causam interferência no ambiente de desenvolvimento.

Simplifica subir ambientes complexos em poucos comandos.

Estrutura básica da plataforma Docker

Build? Pull? Run?Imagem? Contêiner? Dockerfile?

Keep calm e lembre do boloImagem => Bolo

Dockerfile => Receita do bolo

Contêiner => Fatia do bolo

Registry / Docker Hub => Padaria

Docker build => Fazer um bolo

Docker pull => Comprar pronto

Docker run => Cortar uma fatia

Imagem: Freepik

Docker Hub

Instanciando um WordPress em contêineres$ docker pull mysql:5.7.14$ docker pull wordpress:4.5.1

$ docker run --name wp-db -e MYSQL_ROOT_PASSWORD=wordpress -e MYSQL_DATABASE=wordpress -p 3306:3306 -d mysql:5.7.14

$ docker run --name wp --link wp-db:mysql -p 80:80 -d wordpress:4.5.1

Usando um tema na sua máquina local$ docker pull mysql:5.7.14$ docker pull wordpress:4.5.1

$ docker run --name wp-db -e MYSQL_ROOT_PASSWORD=wordpress -e MYSQL_DATABASE=wordpress -p 3306:3306 -d mysql:5.7.14

$ docker run --name wp --link wp-db:mysql --volume /home/user/tema:/var/www/html/wp-content/themes/meutema -p 80:80 -d wordpress:4.5.1

Importando um projeto já existente$ docker pull mysql:5.7.14$ docker pull wordpress:4.5.1

$ docker run --name wp-db --volume=/home/ruda/Projetos/wordcamp/database/import:/docker-entrypoint-initdb.d -e MYSQL_ROOT_PASSWORD=wordpress -e MYSQL_DATABASE=wordpress -p 3306:3306 -d mysql:5.7.14

$ docker run --name wp --link wp-db:mysql --volume=/home/ruda/Projetos/wordcamp/wp-content:/var/www/html/wp-content -p 80:80 -d wordpress:4.5.1

...mas e o WP-CLI?

A peça que faltava$ git clone git@github.com:DockerDemos/appstack-wpcli.git

$ docker build -t wpcli appstack-wpcli

$ docker run --rm --link wp-db:mysql --volumes-from wp -w /var/www/html -it wpcli wp --allow-root <comando do wp-cli>

Vamos simplificar mais um pouco!

Um atalho para o WP-CLI dockerizado#!/bin/bash

docker run --rm --link "${1}"-db:mysql --volumes-from "${1}" -w="/var/www/html" -it wpcli wp --path=/var/www/html --allow-root "${@:2}"

DICAS

A imagem oficial do WordPress vem com opcache ativado. Alterações em arquivos PHP demoram até 60 segundos para ser reconhecidas. Para desativar o opcache, edite o arquivo /usr/local/etc/php/conf.d/opcache-recommended.ini

Contêineres perdem seus dados ao serem encerrados. Para garantir a permanência dos dados, use contêineres de volume, ou volumes da máquina hospedeira com --volume

Ao usar volumes, preste atenção às permissões das pastas e arquivos do host. Se o host usar SELinux, use ":z" no final dos caminhos.

Para rodar um contêiner em background, use -dPara visualizar os logs de um contêiner em background, use: docker logs -f <container>

Para ter acesso ao terminal dentro de um contêiner:docker exec -it <container> bash

Deixe a porta do contêiner MySQL visível para o host, dessa forma o MySQL WorkBench ou o adminer podem manipular os dados diretamente

Contêineres não são apagados ao ter sua execução interrompida (a menos que executados com a opção --rm), e devem ser apagados manualmente.

Se já existir um contêiner com o mesmo nome, o Docker se recusa a criar um novo contêiner.

Se um contêiner estiver em execução, deve ser parado manualmente para poder ser excluído.

Se ocorrer um erro na criação do conteiner, ele deve ser excluido manualmente assim mesmo

Docker Compose

...ou: decorar comandos pra quê?

O que éControla e gerencia instâncias de contêineres com base em arquivos

de configuração.

Cuida das tarefas de iniciar, reiniciar, manter executando, parar a execução, remover, e criar novamente cada contêiner

Detecta alterações nos arquivos de configuração e recria apenas o que for necessário

docker-compose up -dDocker-compose down

docker-compose.ymlversion: '2'services: database:

image: mysql:5.7.14ports:

- "3306:3306"volumes:

- "./database/import:/docker-entrypoint-initdb.d:Z"

restart: alwaysenvironment:

MYSQL_ROOT_PASSWORD: wordpress MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: wordpress wordpress:

depends_on: - database

image: wordpress:4.5.1links:

- database:mysqlports:

- "80:80"

volumes: - "./tema:/var/www/html/wp-content/themes/meutema:z" - "./arquivos:/var/www/html/wp-content:z"

restart: alwaysenvironment:

WORDPRESS_DB_HOST: database:3306 WORDPRESS_DB_PASSWORD: wordpress

Melhorando o atalho do WP-CLI#!/bin/bash

docker run --rm --net="${1}"_default --link "${1}"_database_1:mysql --volumes-from "${1}"_wordpress_1 -w="/var/www/html" -it wpcli wp --path=/var/www/html --allow-root "${@:2}"

PERGUNTAS ?

Recommended