No momento, você está visualizando Docker para WordPress – Parte 4: WP Local Docker da 10up

Docker para WordPress – Parte 4: WP Local Docker da 10up

  • Last modified: 16 de dezembro de 2022
  • Reading time: 13 mins

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

Este post tem 4 comentários

  1. raphael

    “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.”
    Mais um ótimo conteúdo porém incompleto. Respeito seu estilo, mas é por isso que não atrai publico. Ninguém gosta de coisas incompletas.

  2. Ricardo

    Oi, amigo! Primeiramente, parabéns pela serie! Ficou muito boa!

    Nessa especificamente fiquei na dúvida, como gerencio todo com outros colegas de equipe. Por exemplo, o que eu devo mantar no GITHUB?

    Grande abraço e novamente parabéns!

  3. Maycon Queiroz

    Tem trocar como trocar o mysql por mariaDB?

  4. Gabriel

    Não consigo acessar pela url normal, usando wsl2 .
    PS: Quando vou criar o site aparece estes warnings que não consegui resolver:
    WARNING: bridge-nf-call-iptables is disabled
    WARNING: bridge-nf-call-ip6tables is disabled

Os comentários estão encerrados.