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
“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.
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!
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