Docker para WordPress – Parte 4: WP Local Docker da 10up
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.
- Parte 1: Ambiente básico de Docker para WordPress
- Parte 2: Ambiente com phpMyAdmin, MailHog e outras ferramentas
- Parte 3: O que é Docker e suas vantagens sobre o XAMPP
- Parte 4: WP Local Docker da 10up
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
Tem trocar como trocar o mysql por mariaDB?
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