Nesta parte vamos ver um ambiente que resolve todos os problemas das partes anteriores, o WP Local Docker, da 10up. A 10up, a empresa onde trabalho, é uma das maiores agências de WordPress do mundo, e este ambiente é usado por toda a empresa e disponibilizado gratuitamente para a comunidade. Não é porque eu trabalho lá, mas o ambiente é realmente muito bom.

Instalação

Para instalar o WP Local Docker, você vai precisar dos seguintes programas:

  • Docker
  • Docker Compose
  • Node

Já falamos sobre o Docker e o Docker Compose na parte 1. No canal existe um vídeo sobre Node e NVM, se você quiser saber mais sobre o assunto.

O WP Local Docker será um pacote instalado globalmente no node. Para instalá-lo basta executar o seguinte comando:

npm install -g wp-local-docker

Para saber se a instalação funcionou corretamente, execute:

10updocker --version

Configuração

Para começar a usar o WP Local Docker, o ideal é configurá-lo antes. Para isso execute o seguinte comando:

10updocker configure

No terminal, você responderá as seguintes perguntas:

  • Em que pasta você quer guardar os seus sites.
  • Em que pasta você quer guardar os WP Snapshots. Esta é outra ferramenta da 10up para compartilhar snapshots de sites WordPress (arquivos e bancos de dados) entre a equipe, enviando um zip para uma instância da AWS (Amazon Web Services). Se isso não é algo que você deseja usar agora, basta aceitar o padrão.
  • Decidir se o WP Local Docker deve gerenciar o seu arquivo hosts. Este arquivo, no Linux localizado em /etc/hosts, é responsável por dizer para o seu computador se um determinado IP de responder por um determinado domínio. “Gerenciar” aqui significa apenas que o WP Local Docker tentará incluir ou excluir uma entrada neste arquivo ao criar ou excluir um novo site. Eu recomendo aceitar.

Localização das pastas

Se tudo correu bem na instalação e na configuração, você terá três novas pastas. Por padrão, os sites ficam na pasta /home/<usuario>/wp-local-docker-sites, na pasta /home/<usuario>/.wpsnapshots ficarão os Snapshots se você decidir usá-lo um dia e na pasta /home/<usuario>/.wplocaldocker ficarão alguns arquivos usados pelo WP Local Docker para gerenciar contêineres globais do Docker.

Contêineres globais

A ferramenta foi criada e estruturada de uma forma em que algumas coisas serão comuns a todos os sites e outras serão específicas para cada site. Aqui a lista dos contêineres “globais”:

  • dns: Dependendo do seu sistema operacional, com este contêiner todo site com domínio “.test” apontará para a sua própria máquina. Com isso, não é necessário acrescentar entradas no arquivo /etc/hosts. No Ubuntu e no Linux Mint são necessários alguns passos adicionais para fazer esse contêiner funcionar. Não vou cobrir esta parte aqui. Para usuários do Mac (e talvez Windows e outras distros Linux), essa ferramenta funciona sem configurações adicionais.
  • gateway: Com o WP Local Docker é possível subir vários sites ao mesmo tempo. Este contêiner é responsável por direcionar a requisição para o site certo.
  • mysql: No WP Local Docker o banco de dados é comum para todos os sites.
  • mailcatcher e phpmyadmin: Ferramentas disponíveis para gerenciar e-mails e o banco de dados. Veja mais na seção Ferramentas.

Como criar um site no WP Local Docker

O gerenciamento de ambientes do WP Local Docker é todo feito através da linha de comando, mas pelo menos são comandos bem simples. Para criar um site, basta digitar:

10updocker create

Isso iniciará o processo de criação de um novo site. Você terá que responder algumas perguntas:

  • Domínio(s) do novo site: Com o WP Local Docker você não usará “localhost” para acessar os seus sites, mas sim algo como “site-1.test” e “cliente-xyz.test”.
  • Habilitar ou não HTTPS.
  • Usar um endereço externo para imagens ou arquivos de mídia: Se você quiser exibir as imagens do site em produção no seu ambiente local sem ter que baixar tudo, basta informar o endereço do site que o WP Local Docker cria a configuração no nginx para você.
  • Versão do PHP.
  • Instalar ou não o Elasticsearch. Elasticsearch é um servidor de buscas distribuído baseado no Apache Lucene (copiei e colei do Google). É uma ferramenta muito interessante, mas pode responder n se não pretende usá-la agora.
  • Instalar ou não o WordPress.
  • Instalação normal ou multisite (com diferentes tipos).
  • Remover ou não o conteúdo padrão (temas e plugins).
  • Nome do site e dados do usuário administrador.

Com estas respostas o WP Local Docker vai criar a pasta do site, seu banco de dados (naquele contêiner global do BD), uma entrada no arquivo hosts e subir o ambiente.

Node com Node Version Manager

Se você, assim como eu, só usa o nvm, ao invés de instalar o Node diretamente, você verá uma mensagem de alerta no fim da criação do ambiente, dizendo que não foi possível incluir a linha necessária no arquivo hosts. Isso acontece porque só o usuário root pode alterar este arquivo e o nvm não lida bem com isso.

Para criar a entrada no arquivo hosts, você pode chamar o comando separadamente. Ao instalar o pacote 10updocker, você também terá acesso ao pacote 10updocker-hosts e você pode chamá-lo assim:

sudo 10updocker-hosts add site-1.test

Para realmente corrigir o problema, você deve disponibilizar o node e o 10updocker para o usuário root. Para isso, basta criar dois links simbólicos dos arquivos destes dois programas para uma pasta que esteja na variável de ambiente PATH do usuário raiz:

sudo ln -s $(which node) /usr/local/bin/node
sudo ln -s $(which 10updocker-hosts) /usr/local/bin/10updocker-hosts

Como parar e reiniciar um ou todos os site

Diferente do que vimos na parte 2, ao iniciar um ambiente com 10updocker create ou 10updocker start, o terminal será disponibilizado de volta para você. Os comandos para parar um site, reiniciá-lo ou ainda parar todos são os seguintes:

  • 10updocker stop
  • 10updocker restart
  • 10updocker stop all (este comando para também os contêineres globais)

Ferramentas

O WP Local Docker vem com várias ferramentas úteis durante o desenvolvimento. Além das listadas abaixo, o ambiente também tinha PHPMemcachedAdmin, mas ele foi retirado recentemente, devido a este problema. Segue a lista das ferramentas disponíveis:

WP-CLI com o WP Local Docker

Você já sabe o quanto eu gosto de WP-CLI. Este é um exemplo de como usá-lo no WP Local Docker:

10updocker wp plugin list

Se você estiver na pasta de um site, a ferramenta entenderá que você quer usar o WP-CLI naquele site. Caso contrário, ela perguntará qual site deve ser usado.

Como acessar o terminal

O WP Local Docker tem uma forma bem fácil de acessar o terminal do contêiner principal de um site:

10updocker shell

Da mesma forma que o WP-CLI, você precisará escolher qual site quer usar se não estiver em uma pasta de um site.

phpMyAdmin

Como o banco de dados é um dos contêineres globais, você pode acessar todos os bancos de dados em um só endereço: http://localhost:8092. Você pode usar wordpress ou root como usuário e a senha é password nos dois casos.

MailCatcher

Na parte 2 usamos o MailHog. O WP Local Docker usa o MailCatcher, que é bem parecido. Para acessá-lo visite http://localhost:1080 no seu navegador. Como também é um contêiner global, aqui chegarão os e-mails de todos os sites.

Xdebug

Assim como na parte 2, para usar o Xdebug você precisa habilitá-lo no arquivo docker-compose.yml. Como esta é uma opção relacionada a cada site, o arquivo certo estará em /home/<usuario>/wp-local-docker-sites/<site>/docker-compose.yml. Ache o contêiner phpfpm e, na seção environment, altere

ENABLE_XDEBUG: 'false'

para

ENABLE_XDEBUG: 'true'

Também como na parte 2, para usar o Xdebug no Visual Studio Code você precisará incluir uma seção no seu arquivo settings.json. Veja esta seção da documentação. Lembre-se de reiniciar o site para aplicar a alteração no arquivo do Docker Compose.

Como excluir um site

Por fim, se você deseja excluir um site e seu banco de dados, basta executar:

10updocker delete