Introdução
Ao instalar temas e plugins no WordPress através do Docker, utilizando a imagem oficial do WordPress, você pode se deparar com um problema comum.
O WordPress não consegue descompactar temas e plugins na pasta wp-content dentro do contêiner.
Neste post, vamos explorar como corrigir esse problema ajustando o Dockerfile, o docker-compose.yml e outras configurações necessárias.
Dockerfile
Começando pelo Dockerfile, que utiliza a imagem oficial do WordPress com Apache e PHP 7.4, você pode realizar as seguintes configurações:
|
|
Na linha 3, você define o parâmetro APACHE_RUN_PORT para configurar a porta do Apache. Por padrão, no arquivo docker-compose.yml, a porta é definida como 8080.
Nas linhas 5 e 6, substituímos a porta padrão do Apache (80) pela porta 8080, conforme configurado no docker-compose.yml.
Nas linhas 8 e 9, alteramos os IDs do usuário e do grupo www-data para 1000. Isso resolve incompatibilidades com permissões de arquivos e pastas em sistemas Linux, que também afetam a instalação de temas/plugins no WordPress.
docker-compose.yml
No arquivo docker-compose.yml, definimos como será a execução do serviço WordPress:
|
|
Observe que o docker-compose.yml não tem conexão com um contêiner MySQL. Isso ocorre porque é comum executar o MySQL em um contêiner separado, especialmente quando você o utiliza para outros projetos.
Nesse cenário, você não precisa mapear portas no docker-compose.yml, pois a opção network_mode é configurada como “host”, permitindo que o contêiner WordPress veja todas as portas disponíveis no host.
Na linha 7, você pode alterar a porta 8080 para qualquer outra porta, caso ela já esteja sendo usada por outro serviço.
Na linha 13, definimos o ID do usuário padrão do Apache (www-data) como 1000, resolvendo o problema mencionado anteriormente no Dockerfile.
wp-config.php
Dentro da pasta do projeto WordPress, você deve definir a constante FS_METHOD como “direct” no arquivo wp-config.php:
|
|
Essa configuração instrui o WordPress a instalar temas/plugins usando operações diretas de E/S de arquivo, permitindo acesso direto ao sistema de arquivos.
Lembrando que essas configurações são úteis apenas em ambientes locais. Por questões de segurança, não é recomendado usar o método “direct” em ambientes de homologação ou produção.
No mesmo arquivo wp-config.php, para permitir que o WordPress se comunique com o serviço MySQL, altere a constante DB_HOST para 127.0.1.1:
|
|
Resumo
Após criar os arquivos Dockerfile e docker-compose.yml e configurar o FS_METHOD e o DB_HOST no wp-config.php, você pode iniciar o contêiner do WordPress:
|
|
Lembre-se de que o docker-compose.yml não inclui um contêiner MySQL. Portanto, é importante ter um contêiner MySQL em execução antes de iniciar o WordPress na máquina.
Em um ambiente local, é comum ter apenas um contêiner MySQL em execução para vários projetos. Para criar um contêiner MySQL separado, você pode executar o seguinte comando:
|
|
Se preferir trabalhar com vários bancos de dados, adapte o arquivo docker-compose.yml para vincular a um contêiner MySQL separado. Para obter mais informações sobre como fazer isso, consulte a documentação oficial do Docker.