SlideShare uma empresa Scribd logo
1 de 51
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á Almeida
Integrante 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-CLI
Um 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
Git
git 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!
Para saber mais sobre Git
Uma das 76 mil questões com
a tag “Git” no Stack Overflow
O livro “Pro Git”, de Scott
Chacon e Ben Straub
O curso interativo “Try Git”,
parceria entre Code School e
Github (gratuito)
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 bolo
Imagem => 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 -d
Para 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 -d
Docker-compose down
docker-compose.yml
version: '2'
services:
database:
image: mysql:5.7.14
ports:
- "3306:3306"
volumes:
- "./database/import:/docker-entrypoint-
initdb.d:Z"
restart: always
environment:
MYSQL_ROOT_PASSWORD: wordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- database
image: wordpress:4.5.1
links:
- database:mysql
ports:
- "80:80"
volumes:
- "./tema:/var/www/html/wp-
content/themes/meutema:z"
- "./arquivos:/var/www/html/wp-content:z"
restart: always
environment:
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}"
Para saber mais sobre Docker
PERGUNTAS ?

Mais conteúdo relacionado

Mais procurados

Como instalar o WordPress no seu computador
Como instalar o WordPress no seu computadorComo instalar o WordPress no seu computador
Como instalar o WordPress no seu computadorRudá Almeida
 
9 erros que desenvolvedores Node.js cometem
9 erros que desenvolvedores Node.js cometem9 erros que desenvolvedores Node.js cometem
9 erros que desenvolvedores Node.js cometemFernando Henriques
 
WordCamp SP 2014 - SEO para Desenvolvedores WordPress
WordCamp SP 2014 - SEO para Desenvolvedores WordPressWordCamp SP 2014 - SEO para Desenvolvedores WordPress
WordCamp SP 2014 - SEO para Desenvolvedores WordPressRuan Barbosa
 
Guga Alves apresenta Gutenberg fase 2 e 3
Guga Alves apresenta Gutenberg fase 2 e 3Guga Alves apresenta Gutenberg fase 2 e 3
Guga Alves apresenta Gutenberg fase 2 e 3WordCamp Floripa
 
Instalando Drupal, Começando do Começo
Instalando Drupal, Começando do ComeçoInstalando Drupal, Começando do Começo
Instalando Drupal, Começando do Começosauloamui
 
AMP Roadshow SP 2019 - Web Apps Modernas
AMP Roadshow SP 2019 - Web Apps ModernasAMP Roadshow SP 2019 - Web Apps Modernas
AMP Roadshow SP 2019 - Web Apps ModernasDan Vitoriano
 
Vitor Hugo Bastos Cardoso apresenta voando alto com WordPress: um guia prátic...
Vitor Hugo Bastos Cardoso apresenta voando alto com WordPress: um guia prátic...Vitor Hugo Bastos Cardoso apresenta voando alto com WordPress: um guia prátic...
Vitor Hugo Bastos Cardoso apresenta voando alto com WordPress: um guia prátic...WordCamp Floripa
 
Jetpack, um Canivete Suíço no seu WordPress (WordCamp São Paulo 2014)​
Jetpack, um Canivete Suíço no seu WordPress (WordCamp São Paulo 2014)​Jetpack, um Canivete Suíço no seu WordPress (WordCamp São Paulo 2014)​
Jetpack, um Canivete Suíço no seu WordPress (WordCamp São Paulo 2014)​Valério Souza
 
Dicas e truques para desenvolver projetos web utilizando WordPress
Dicas e truques para desenvolver projetos web utilizando WordPressDicas e truques para desenvolver projetos web utilizando WordPress
Dicas e truques para desenvolver projetos web utilizando WordPressLeo Baiano
 
Iniciando com Ruby on Rails - Luiz Fernando Pimenta
Iniciando com Ruby on Rails - Luiz Fernando PimentaIniciando com Ruby on Rails - Luiz Fernando Pimenta
Iniciando com Ruby on Rails - Luiz Fernando Pimentamichel adriano medeiros
 
Drupal 7 - Nova Versão para Novos Desafios
Drupal 7 - Nova Versão para Novos DesafiosDrupal 7 - Nova Versão para Novos Desafios
Drupal 7 - Nova Versão para Novos DesafiosPaulino Michelazzo
 
Docker de ponta a ponta: do Desenvolvimento à Nuvem - UNICID - Novembro-2019
Docker de ponta a ponta: do Desenvolvimento à Nuvem - UNICID - Novembro-2019Docker de ponta a ponta: do Desenvolvimento à Nuvem - UNICID - Novembro-2019
Docker de ponta a ponta: do Desenvolvimento à Nuvem - UNICID - Novembro-2019Renato Groff
 
ASP.NET Core - iMasters - Março/2016
ASP.NET Core - iMasters - Março/2016ASP.NET Core - iMasters - Março/2016
ASP.NET Core - iMasters - Março/2016Renato Groff
 
Melhorando o desempenho do seu WordPress
Melhorando o desempenho do seu WordPressMelhorando o desempenho do seu WordPress
Melhorando o desempenho do seu WordPressJulian Fernandes
 
Apresentação Wordpress FLISOL 2010
Apresentação Wordpress FLISOL 2010Apresentação Wordpress FLISOL 2010
Apresentação Wordpress FLISOL 2010Zarathon Maia
 
Traduções no WordPress
Traduções no WordPressTraduções no WordPress
Traduções no WordPressBreno Alves
 
Arquitetura de Microserviços - Stone Tech Saturday - Março/2017
Arquitetura de Microserviços - Stone Tech Saturday - Março/2017Arquitetura de Microserviços - Stone Tech Saturday - Março/2017
Arquitetura de Microserviços - Stone Tech Saturday - Março/2017Renato Groff
 

Mais procurados (20)

Como instalar o WordPress no seu computador
Como instalar o WordPress no seu computadorComo instalar o WordPress no seu computador
Como instalar o WordPress no seu computador
 
PHP com Docker
PHP com DockerPHP com Docker
PHP com Docker
 
Curso de ReactJS
Curso de ReactJSCurso de ReactJS
Curso de ReactJS
 
9 erros que desenvolvedores Node.js cometem
9 erros que desenvolvedores Node.js cometem9 erros que desenvolvedores Node.js cometem
9 erros que desenvolvedores Node.js cometem
 
WordCamp SP 2014 - SEO para Desenvolvedores WordPress
WordCamp SP 2014 - SEO para Desenvolvedores WordPressWordCamp SP 2014 - SEO para Desenvolvedores WordPress
WordCamp SP 2014 - SEO para Desenvolvedores WordPress
 
Blazor #SnetTalks3
Blazor  #SnetTalks3Blazor  #SnetTalks3
Blazor #SnetTalks3
 
Guga Alves apresenta Gutenberg fase 2 e 3
Guga Alves apresenta Gutenberg fase 2 e 3Guga Alves apresenta Gutenberg fase 2 e 3
Guga Alves apresenta Gutenberg fase 2 e 3
 
Instalando Drupal, Começando do Começo
Instalando Drupal, Começando do ComeçoInstalando Drupal, Começando do Começo
Instalando Drupal, Começando do Começo
 
AMP Roadshow SP 2019 - Web Apps Modernas
AMP Roadshow SP 2019 - Web Apps ModernasAMP Roadshow SP 2019 - Web Apps Modernas
AMP Roadshow SP 2019 - Web Apps Modernas
 
Vitor Hugo Bastos Cardoso apresenta voando alto com WordPress: um guia prátic...
Vitor Hugo Bastos Cardoso apresenta voando alto com WordPress: um guia prátic...Vitor Hugo Bastos Cardoso apresenta voando alto com WordPress: um guia prátic...
Vitor Hugo Bastos Cardoso apresenta voando alto com WordPress: um guia prátic...
 
Jetpack, um Canivete Suíço no seu WordPress (WordCamp São Paulo 2014)​
Jetpack, um Canivete Suíço no seu WordPress (WordCamp São Paulo 2014)​Jetpack, um Canivete Suíço no seu WordPress (WordCamp São Paulo 2014)​
Jetpack, um Canivete Suíço no seu WordPress (WordCamp São Paulo 2014)​
 
Dicas e truques para desenvolver projetos web utilizando WordPress
Dicas e truques para desenvolver projetos web utilizando WordPressDicas e truques para desenvolver projetos web utilizando WordPress
Dicas e truques para desenvolver projetos web utilizando WordPress
 
Iniciando com Ruby on Rails - Luiz Fernando Pimenta
Iniciando com Ruby on Rails - Luiz Fernando PimentaIniciando com Ruby on Rails - Luiz Fernando Pimenta
Iniciando com Ruby on Rails - Luiz Fernando Pimenta
 
Drupal 7 - Nova Versão para Novos Desafios
Drupal 7 - Nova Versão para Novos DesafiosDrupal 7 - Nova Versão para Novos Desafios
Drupal 7 - Nova Versão para Novos Desafios
 
Docker de ponta a ponta: do Desenvolvimento à Nuvem - UNICID - Novembro-2019
Docker de ponta a ponta: do Desenvolvimento à Nuvem - UNICID - Novembro-2019Docker de ponta a ponta: do Desenvolvimento à Nuvem - UNICID - Novembro-2019
Docker de ponta a ponta: do Desenvolvimento à Nuvem - UNICID - Novembro-2019
 
ASP.NET Core - iMasters - Março/2016
ASP.NET Core - iMasters - Março/2016ASP.NET Core - iMasters - Março/2016
ASP.NET Core - iMasters - Março/2016
 
Melhorando o desempenho do seu WordPress
Melhorando o desempenho do seu WordPressMelhorando o desempenho do seu WordPress
Melhorando o desempenho do seu WordPress
 
Apresentação Wordpress FLISOL 2010
Apresentação Wordpress FLISOL 2010Apresentação Wordpress FLISOL 2010
Apresentação Wordpress FLISOL 2010
 
Traduções no WordPress
Traduções no WordPressTraduções no WordPress
Traduções no WordPress
 
Arquitetura de Microserviços - Stone Tech Saturday - Março/2017
Arquitetura de Microserviços - Stone Tech Saturday - Março/2017Arquitetura de Microserviços - Stone Tech Saturday - Março/2017
Arquitetura de Microserviços - Stone Tech Saturday - Março/2017
 

Destaque

WordPress para Redatores, Jornalistas, Publicitários e Blogueiros
WordPress para Redatores, Jornalistas, Publicitários e BlogueirosWordPress para Redatores, Jornalistas, Publicitários e Blogueiros
WordPress para Redatores, Jornalistas, Publicitários e BlogueirosValério Souza
 
Home viva do design da interface até a programação do sistema
Home viva  do design da interface até a programação do sistemaHome viva  do design da interface até a programação do sistema
Home viva do design da interface até a programação do sistemaLeo Baiano
 
Building an Autonomous Website
Building an Autonomous WebsiteBuilding an Autonomous Website
Building an Autonomous Websitevegasgeek
 
WordPress Multisite: Desenvolvendo Portais com Sites Interligados.
WordPress Multisite: Desenvolvendo Portais com Sites Interligados.WordPress Multisite: Desenvolvendo Portais com Sites Interligados.
WordPress Multisite: Desenvolvendo Portais com Sites Interligados.Nícholas André
 
Building Accessible Websites in WordPress - Birmingham WordCamp 2014
Building Accessible Websites in WordPress - Birmingham WordCamp 2014Building Accessible Websites in WordPress - Birmingham WordCamp 2014
Building Accessible Websites in WordPress - Birmingham WordCamp 2014Nancy Thanki
 
Como criar conteúdo de qualidade contínuamente sem burn-out
Como criar conteúdo de qualidade contínuamente sem burn-outComo criar conteúdo de qualidade contínuamente sem burn-out
Como criar conteúdo de qualidade contínuamente sem burn-outAnna Korkman Lopes
 
HTTP/2, quels impacts pour mon site WordPress ?
HTTP/2, quels impacts pour mon site WordPress ?HTTP/2, quels impacts pour mon site WordPress ?
HTTP/2, quels impacts pour mon site WordPress ?Laurent Vergnaud
 
Wordcamp paris-2016 : Comment fonctionnent le projet et la communauté open so...
Wordcamp paris-2016 : Comment fonctionnent le projet et la communauté open so...Wordcamp paris-2016 : Comment fonctionnent le projet et la communauté open so...
Wordcamp paris-2016 : Comment fonctionnent le projet et la communauté open so...Chipway
 
4 sites communautaires faits avec BuddyPress, WordCamp Paris 2016
4 sites communautaires faits avec BuddyPress, WordCamp Paris 20164 sites communautaires faits avec BuddyPress, WordCamp Paris 2016
4 sites communautaires faits avec BuddyPress, WordCamp Paris 2016Sylvie Clément
 
Pesquisas com usuários, o que desenvolvedores também precisam saber!
Pesquisas com usuários, o que desenvolvedores também precisam saber! Pesquisas com usuários, o que desenvolvedores também precisam saber!
Pesquisas com usuários, o que desenvolvedores também precisam saber! Daniel Coscarelli
 
Customizing the WP Admin for fun and profit
Customizing the WP Admin for fun and profitCustomizing the WP Admin for fun and profit
Customizing the WP Admin for fun and profitJustin Foell
 
Localize e seja localizado WordCamp BH
Localize e seja localizado WordCamp BHLocalize e seja localizado WordCamp BH
Localize e seja localizado WordCamp BHWordCampBH
 
Os recursos mais fodásticos do painel administrativo do WordPress
Os recursos mais fodásticos do painel administrativo do WordPressOs recursos mais fodásticos do painel administrativo do WordPress
Os recursos mais fodásticos do painel administrativo do WordPressMayara Alanna Pereira Martins
 
WordPress em sua estratégia de marketing
WordPress em sua estratégia de marketingWordPress em sua estratégia de marketing
WordPress em sua estratégia de marketingGuga Alves
 
Estratégia de Conteúdo para SEO
Estratégia de Conteúdo para SEOEstratégia de Conteúdo para SEO
Estratégia de Conteúdo para SEOBruno Figueiredo
 
Startups com WordPress - Tirando a sua ideia do papel
Startups com WordPress - Tirando a sua ideia do papelStartups com WordPress - Tirando a sua ideia do papel
Startups com WordPress - Tirando a sua ideia do papelLeonardo Velozo
 
Wordcamp paris 2016 - La REST API, une review technique
Wordcamp paris 2016 - La REST API, une review techniqueWordcamp paris 2016 - La REST API, une review technique
Wordcamp paris 2016 - La REST API, une review techniqueNicolas Juen
 
Architecture de l'information pour WordPress
Architecture de l'information pour WordPressArchitecture de l'information pour WordPress
Architecture de l'information pour WordPressBenjamin LUPU
 
Web Design Responsivo WordCamp-RJ 2015
Web Design Responsivo WordCamp-RJ 2015Web Design Responsivo WordCamp-RJ 2015
Web Design Responsivo WordCamp-RJ 2015Hans Mösl
 
WordCamp Alicante 2017 - De HTML a WordPress
WordCamp Alicante 2017 - De HTML a WordPressWordCamp Alicante 2017 - De HTML a WordPress
WordCamp Alicante 2017 - De HTML a WordPressDarío BF
 

Destaque (20)

WordPress para Redatores, Jornalistas, Publicitários e Blogueiros
WordPress para Redatores, Jornalistas, Publicitários e BlogueirosWordPress para Redatores, Jornalistas, Publicitários e Blogueiros
WordPress para Redatores, Jornalistas, Publicitários e Blogueiros
 
Home viva do design da interface até a programação do sistema
Home viva  do design da interface até a programação do sistemaHome viva  do design da interface até a programação do sistema
Home viva do design da interface até a programação do sistema
 
Building an Autonomous Website
Building an Autonomous WebsiteBuilding an Autonomous Website
Building an Autonomous Website
 
WordPress Multisite: Desenvolvendo Portais com Sites Interligados.
WordPress Multisite: Desenvolvendo Portais com Sites Interligados.WordPress Multisite: Desenvolvendo Portais com Sites Interligados.
WordPress Multisite: Desenvolvendo Portais com Sites Interligados.
 
Building Accessible Websites in WordPress - Birmingham WordCamp 2014
Building Accessible Websites in WordPress - Birmingham WordCamp 2014Building Accessible Websites in WordPress - Birmingham WordCamp 2014
Building Accessible Websites in WordPress - Birmingham WordCamp 2014
 
Como criar conteúdo de qualidade contínuamente sem burn-out
Como criar conteúdo de qualidade contínuamente sem burn-outComo criar conteúdo de qualidade contínuamente sem burn-out
Como criar conteúdo de qualidade contínuamente sem burn-out
 
HTTP/2, quels impacts pour mon site WordPress ?
HTTP/2, quels impacts pour mon site WordPress ?HTTP/2, quels impacts pour mon site WordPress ?
HTTP/2, quels impacts pour mon site WordPress ?
 
Wordcamp paris-2016 : Comment fonctionnent le projet et la communauté open so...
Wordcamp paris-2016 : Comment fonctionnent le projet et la communauté open so...Wordcamp paris-2016 : Comment fonctionnent le projet et la communauté open so...
Wordcamp paris-2016 : Comment fonctionnent le projet et la communauté open so...
 
4 sites communautaires faits avec BuddyPress, WordCamp Paris 2016
4 sites communautaires faits avec BuddyPress, WordCamp Paris 20164 sites communautaires faits avec BuddyPress, WordCamp Paris 2016
4 sites communautaires faits avec BuddyPress, WordCamp Paris 2016
 
Pesquisas com usuários, o que desenvolvedores também precisam saber!
Pesquisas com usuários, o que desenvolvedores também precisam saber! Pesquisas com usuários, o que desenvolvedores também precisam saber!
Pesquisas com usuários, o que desenvolvedores também precisam saber!
 
Customizing the WP Admin for fun and profit
Customizing the WP Admin for fun and profitCustomizing the WP Admin for fun and profit
Customizing the WP Admin for fun and profit
 
Localize e seja localizado WordCamp BH
Localize e seja localizado WordCamp BHLocalize e seja localizado WordCamp BH
Localize e seja localizado WordCamp BH
 
Os recursos mais fodásticos do painel administrativo do WordPress
Os recursos mais fodásticos do painel administrativo do WordPressOs recursos mais fodásticos do painel administrativo do WordPress
Os recursos mais fodásticos do painel administrativo do WordPress
 
WordPress em sua estratégia de marketing
WordPress em sua estratégia de marketingWordPress em sua estratégia de marketing
WordPress em sua estratégia de marketing
 
Estratégia de Conteúdo para SEO
Estratégia de Conteúdo para SEOEstratégia de Conteúdo para SEO
Estratégia de Conteúdo para SEO
 
Startups com WordPress - Tirando a sua ideia do papel
Startups com WordPress - Tirando a sua ideia do papelStartups com WordPress - Tirando a sua ideia do papel
Startups com WordPress - Tirando a sua ideia do papel
 
Wordcamp paris 2016 - La REST API, une review technique
Wordcamp paris 2016 - La REST API, une review techniqueWordcamp paris 2016 - La REST API, une review technique
Wordcamp paris 2016 - La REST API, une review technique
 
Architecture de l'information pour WordPress
Architecture de l'information pour WordPressArchitecture de l'information pour WordPress
Architecture de l'information pour WordPress
 
Web Design Responsivo WordCamp-RJ 2015
Web Design Responsivo WordCamp-RJ 2015Web Design Responsivo WordCamp-RJ 2015
Web Design Responsivo WordCamp-RJ 2015
 
WordCamp Alicante 2017 - De HTML a WordPress
WordCamp Alicante 2017 - De HTML a WordPressWordCamp Alicante 2017 - De HTML a WordPress
WordCamp Alicante 2017 - De HTML a WordPress
 

Semelhante a Desenvolvendo para WordPress com Docker, Git e WP-CLI

Construção e provisionamento de ambientes de desenvolvimento virtualizados
Construção e provisionamento de ambientes  de desenvolvimento virtualizadosConstrução e provisionamento de ambientes  de desenvolvimento virtualizados
Construção e provisionamento de ambientes de desenvolvimento virtualizadosThiago Rodrigues
 
Docker - tutorial iniciantes
Docker - tutorial iniciantesDocker - tutorial iniciantes
Docker - tutorial iniciantesDiogoSoares847327
 
Source-to-container no mundo real
Source-to-container no mundo realSource-to-container no mundo real
Source-to-container no mundo realEvandro Silvestre
 
Docker 101 e Ambientes Imutáveis
Docker 101 e Ambientes Imutáveis Docker 101 e Ambientes Imutáveis
Docker 101 e Ambientes Imutáveis Wallison Marra
 
Docker Para Maiores - GDG Cabreúva
Docker Para Maiores - GDG CabreúvaDocker Para Maiores - GDG Cabreúva
Docker Para Maiores - GDG CabreúvaMatheus Fidelis
 
Dockerizando aplicações em uma fintech o bom, o mau e o feio as surpresas
Dockerizando aplicações em uma fintech  o bom, o mau e o feio as surpresasDockerizando aplicações em uma fintech  o bom, o mau e o feio as surpresas
Dockerizando aplicações em uma fintech o bom, o mau e o feio as surpresasRafael Gomes
 
Docker - Tutorial for beginners
Docker - Tutorial for beginnersDocker - Tutorial for beginners
Docker - Tutorial for beginnersRafael Chiavegatto
 
Docker do básico a orquestração (PHPeste2016)
Docker do básico a orquestração (PHPeste2016)Docker do básico a orquestração (PHPeste2016)
Docker do básico a orquestração (PHPeste2016)Wellington Silva
 
Oficina postgresql avançado_consegi2010
Oficina postgresql avançado_consegi2010Oficina postgresql avançado_consegi2010
Oficina postgresql avançado_consegi2010Fabrízio Mello
 
EIIFRO2014 - Desenvolvimento Colaborativo de Software
EIIFRO2014 - Desenvolvimento Colaborativo de SoftwareEIIFRO2014 - Desenvolvimento Colaborativo de Software
EIIFRO2014 - Desenvolvimento Colaborativo de SoftwareAldson Diego
 
Containers com docker #CPRecife4
Containers com docker #CPRecife4Containers com docker #CPRecife4
Containers com docker #CPRecife4David Ruiz
 
Integração Contínua com Cruise Control e phpUnderControl
Integração Contínua com Cruise Control e phpUnderControlIntegração Contínua com Cruise Control e phpUnderControl
Integração Contínua com Cruise Control e phpUnderControlDiego Tremper
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmGuilherme Blanco
 
Curso de Verão - Aula 02 - Orquestração de Contêineres
Curso de Verão - Aula 02 - Orquestração de ContêineresCurso de Verão - Aula 02 - Orquestração de Contêineres
Curso de Verão - Aula 02 - Orquestração de ContêineresGuilhermeJorgeAragod
 
Docker de containers a orquestração
Docker de containers a orquestraçãoDocker de containers a orquestração
Docker de containers a orquestraçãoItalo José
 

Semelhante a Desenvolvendo para WordPress com Docker, Git e WP-CLI (20)

Construção e provisionamento de ambientes de desenvolvimento virtualizados
Construção e provisionamento de ambientes  de desenvolvimento virtualizadosConstrução e provisionamento de ambientes  de desenvolvimento virtualizados
Construção e provisionamento de ambientes de desenvolvimento virtualizados
 
Docker - tutorial iniciantes
Docker - tutorial iniciantesDocker - tutorial iniciantes
Docker - tutorial iniciantes
 
Source-to-container no mundo real
Source-to-container no mundo realSource-to-container no mundo real
Source-to-container no mundo real
 
Docker 101 e Ambientes Imutáveis
Docker 101 e Ambientes Imutáveis Docker 101 e Ambientes Imutáveis
Docker 101 e Ambientes Imutáveis
 
Docker Para Maiores - GDG Cabreúva
Docker Para Maiores - GDG CabreúvaDocker Para Maiores - GDG Cabreúva
Docker Para Maiores - GDG Cabreúva
 
Conceitos Basicos e Docker - Java Noroeste
Conceitos Basicos e Docker - Java NoroesteConceitos Basicos e Docker - Java Noroeste
Conceitos Basicos e Docker - Java Noroeste
 
Dockerizando aplicações em uma fintech o bom, o mau e o feio as surpresas
Dockerizando aplicações em uma fintech  o bom, o mau e o feio as surpresasDockerizando aplicações em uma fintech  o bom, o mau e o feio as surpresas
Dockerizando aplicações em uma fintech o bom, o mau e o feio as surpresas
 
Docker - Tutorial for beginners
Docker - Tutorial for beginnersDocker - Tutorial for beginners
Docker - Tutorial for beginners
 
Docker do básico a orquestração (PHPeste2016)
Docker do básico a orquestração (PHPeste2016)Docker do básico a orquestração (PHPeste2016)
Docker do básico a orquestração (PHPeste2016)
 
Ruby On Rails Regis
Ruby On Rails RegisRuby On Rails Regis
Ruby On Rails Regis
 
Docker para maiores
Docker para maioresDocker para maiores
Docker para maiores
 
Oficina postgresql avançado_consegi2010
Oficina postgresql avançado_consegi2010Oficina postgresql avançado_consegi2010
Oficina postgresql avançado_consegi2010
 
EIIFRO2014 - Desenvolvimento Colaborativo de Software
EIIFRO2014 - Desenvolvimento Colaborativo de SoftwareEIIFRO2014 - Desenvolvimento Colaborativo de Software
EIIFRO2014 - Desenvolvimento Colaborativo de Software
 
Containers com docker #CPRecife4
Containers com docker #CPRecife4Containers com docker #CPRecife4
Containers com docker #CPRecife4
 
Integração Contínua com Cruise Control e phpUnderControl
Integração Contínua com Cruise Control e phpUnderControlIntegração Contínua com Cruise Control e phpUnderControl
Integração Contínua com Cruise Control e phpUnderControl
 
Debug de cabo a rabo
Debug de cabo a raboDebug de cabo a rabo
Debug de cabo a rabo
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine Orm
 
MigraçãO
MigraçãOMigraçãO
MigraçãO
 
Curso de Verão - Aula 02 - Orquestração de Contêineres
Curso de Verão - Aula 02 - Orquestração de ContêineresCurso de Verão - Aula 02 - Orquestração de Contêineres
Curso de Verão - Aula 02 - Orquestração de Contêineres
 
Docker de containers a orquestração
Docker de containers a orquestraçãoDocker de containers a orquestração
Docker de containers a orquestração
 

Desenvolvendo para WordPress com Docker, Git e WP-CLI

  • 1. Desenvolvendo para WordPress com Docker, Git e WP-CLI Como construir um ambiente de desenvolvimento inteligente para um workflow mais prático e ágil
  • 2. Rudá Almeida Integrante 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
  • 3. WP-CLI Um verdadeiro canivete suíço para o WordPress
  • 4. O que é Gerencia o WordPress via linha de comando Simplifica tarefas tediosas e repetitivas Dispensa o uso do navegador Automação e programabilidade
  • 5. Vamos ver alguns exemplos?
  • 6. 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
  • 7. 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>
  • 8. $ wp plugin list $ wp plugin install advanced-custom-fields --activate Instalando plugins
  • 9. Atualizando o core e os plugins $ wp core update $ wp plugin update --all $ wp theme update --all
  • 10. 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
  • 11. Git git commit -m "#WCRJ16" git push
  • 12. 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
  • 13. Git é uma skill essencial para todo desenvolvedor WordPress
  • 14. Git é uma skill essencial para todo desenvolvedor PHP
  • 15. Git é uma skill essencial para todo desenvolvedor back-end
  • 16. Git é uma skill essencial para todo desenvolvedor front-end
  • 17. Git é uma skill essencial para todo desenvolvedor
  • 18. 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
  • 21. Git não é backup!
  • 22. Git não é backup!
  • 23. Git não é backup!
  • 24. Para saber mais sobre Git Uma das 76 mil questões com a tag “Git” no Stack Overflow O livro “Pro Git”, de Scott Chacon e Ben Straub O curso interativo “Try Git”, parceria entre Code School e Github (gratuito)
  • 25. Docker É igual uma máquina virtual, só que é completamente diferente.
  • 26. 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.
  • 27. Estrutura básica da plataforma Docker
  • 28. Build? Pull? Run? Imagem? Contêiner? Dockerfile?
  • 29. Keep calm e lembre do bolo Imagem => 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
  • 31. 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
  • 32. 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
  • 33. 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
  • 34. ...mas e o WP-CLI?
  • 35. 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>
  • 37. 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}"
  • 38. DICAS
  • 39. 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
  • 40. 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.
  • 41. Para rodar um contêiner em background, use -d Para visualizar os logs de um contêiner em background, use: docker logs -f <container>
  • 42. Para ter acesso ao terminal dentro de um contêiner: docker exec -it <container> bash
  • 43. 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
  • 44. 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.
  • 45. 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
  • 47. 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 -d Docker-compose down
  • 48. docker-compose.yml version: '2' services: database: image: mysql:5.7.14 ports: - "3306:3306" volumes: - "./database/import:/docker-entrypoint- initdb.d:Z" restart: always environment: MYSQL_ROOT_PASSWORD: wordpress MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: wordpress wordpress: depends_on: - database image: wordpress:4.5.1 links: - database:mysql ports: - "80:80" volumes: - "./tema:/var/www/html/wp- content/themes/meutema:z" - "./arquivos:/var/www/html/wp-content:z" restart: always environment: WORDPRESS_DB_HOST: database:3306 WORDPRESS_DB_PASSWORD: wordpress
  • 49. 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}"
  • 50. Para saber mais sobre Docker

Notas do Editor

  1. Com apenas quatro comandos, o WP-CLI: baixa e descompacta o core do WordPress, cria e popula o arquivo wp-config.php, cria o banco de dados no MySQL e preenche os dados de instalação. Não é preciso nem abrir o navegador: o WordPress já está instalado, com o seu famoso post de “Hello World”.
  2. Nos comandos ao lado, o WP-CLI lista os plugins, baixa o plugin “Advanced Custom Fields” do repositório oficial, instala este plugin, depois ativa e finalmente mostra o novo plugin na lista de plugins instalados.
  3. Nos comandos ao lado, o WP-CLI atualiza o core do WordPress e depois verifica entre os plugins instalados quais estão desatualizados e faz a sua atualização. Os downloads são feitos do repositório oficial.