Introdução ao WordPress com Docker
Ao contrário do que possa parecer, rodar WordPress com Docker localmente é uma tarefa fácil. Com a popularização da conteinerização de ambientes, o que antes levava um tempo considerável de preparação atualmente leva poucos minutos.
Na forma tradicional, seria preciso instalar um software servidor web (Apache, Nginx) com suporte PHP mais outro servidor MySQL para o banco de dados. Apesar de ainda ser uma tarefa simples, é pouco prático. Principalmente se você precisa de múltiplos ambientes distintos (quando estiver trabalhando em mais de um site).
Alternativamente, existe a opção de ambiente utilizando o XAMPP (acrônimo para Cross-platform, Apache, MariaDB/MySQL, PHP, Perl) que apesar de facilitar (e muito) a criação de um ambiente, ainda leva desvantagem pela falta de modularidade, consumo de recursos e complexidade de replicação.
Além disso, ainda fica sob responsabilidade do desenvolvedor a instalação do WordPress nesta abordagem. Definitivamente uma outra possibilidade se faz necessária para facilitar a vida do criador de sites.
Nesse sentido, a utilização do Docker é muito conveniente: ainda que estes mesmos servidores sejam necessários, o Docker se encarrega de baixá-los e rodá-los de forma automática, requisitando pouquíssimas configurações.
Como nem tudo são flores, existe uma curva de aprendizado para a utilização do Docker e para sua configuração inicial. Contudo, é um “ônus” que vale muito a pena dadas as suas vantagens. Parte desta curva pretendo amenizar com o restante deste post!
Instalação do Docker
Instalar o Docker é muito simples. Usuários Linux/Debian podem executar o seguinte comando:
sudo apt update
sudo apt install docker
Em algumas distribuições é possível que o pacote docker não esteja mais disponível via apt. Porém, pode ser instalado via snap:
sudo snap install docker
No Windows, basta fazer o download no site do docker e seguir os passos do próprio instalador.
Conforme mencionado, há uma curva de aprendizado considerável para a utilização do Docker e consequentemente, um tempo deve ser aplicado para sua adequada compreensão. Como o objetivo deste post não é ensinar exclusivamente a ferramenta e sim o mínimo para obter um ambiente WordPress com Docker, seguiremos o passo a passo!
Sobre Containers
Um container Docker é uma unidade leve, portátil e isolada que contém o necessário para rodar um aplicação. Ele garante que a aplicação rode da mesma forma em qualquer sistema operacional. Pense um container como uma “pequena porção” de um computador que funciona “virtualmente” dentro do seu sistema operacional.
Vale destacar que o conceito de container não é o mesmo que virtualização de máquina. Portanto, são coisas bem distintas que não podem ser confundidas.
No caso do WordPress com Docker, uma pequena versão do linux chamada Alpine é o sistema operacional que roda internamente no container com um servidor Apache com suporte a PHP instalado. Logo, não importa onde você rode este container, ele terá as mesmas características e funcionará do mesmo jeito.
De maneira idêntica, um outro container contendo o banco de dados MySQL trabalha em conjunto com o container WordPress para prover o acesso aos dados que se fazem necessários para o funcionamento do site. Note que são dois “computadores virtuais” que trocam dados entre si através de uma “rede virtual” que fornece suporte para isso.
Assim, nada melhor que criar nosso ambiente como exemplo para entender como isso tudo funciona.
Preparação do ambiente WordPress com Docker
Existem várias formas de criar e rodar containers Docker, seja por linha de comando, pela interface gráfica, criar um container de cada vez ou a minha preferida: criar e rodar tudo de uma vez. Como resultado, o Docker dispõe de uma ferramenta chamada docker-compose cujo objetivo é descrever ao docker todo o necessário para a criação do ambiente que precisamos. Essa “descrição” deve obedecer um conjunto de regras bem definidas (como em um script) para que o docker interprete e execute aquilo que desejamos.
Os arquivos abaixo contém tudo que precisamos para obter um ambiente WordPress com Docker totalmente funcional e pronto para o desenvolvimento de um site completo.
Nesse sentido, sugiro criar antes uma estrutura de pastas e arquivos onde você quiser com o seguinte formato:
seu_projeto
www
db
uploads.ini
docker-compose.yml
Dentro de docker-compose.yml e cole o conteúdo a seguir:
services:
wordpress:
image: wordpress
restart: always
ports:
- 8080:80
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: usuario
WORDPRESS_DB_PASSWORD: senha
WORDPRESS_DB_NAME: db
volumes:
- ./www:/var/www/html
- ./uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
db:
image: mysql:8.0
restart: always
ports:
- 3306:3306
environment:
MYSQL_DATABASE: db
MYSQL_USER: usuario
MYSQL_PASSWORD: senha
MYSQL_RANDOM_ROOT_PASSWORD: '1'
volumes:
- ./db:/var/lib/mysql
phpmyadmin:
image: phpmyadmin/phpmyadmin
restart: always
ports:
- 8082:80
environment:
PMA_HOST: db
MYSQL_ROOT_PASSWORD: senha
volumes:
www:
db:
Dentro do arquivo uploads.ini cole este conteúdo:
file_uploads = On
memory_limit = 500M
upload_max_filesize = 500M
post_max_size = 500M
max_execution_time = 600
Para executá-lo, basta digitar (Linux/Debian):
sudo docker-compose up
No Windows, dentro do prompt de comando do próprio docker, digite:
docker-compose up
Ao final do processo, o wp-admin do WordPress está acessível em http://localhost:8080 e caso seja necessário acesso direto ao MySQL, o PHPMyAdmin em fica acessível http://localhost:8082.
Docker Compose
O Docker Compose é uma ferramenta muito útil que permite definir e gerenciar múltiplos containers de forma simplificada usando um único arquivo em formato yml.
Os arquivos do Docker Compose são bastante intuitivos e por vezes repetitivos. Assim, ao entender uma parte, outra automaticamente acaba sendo esclarecida.
Entendendo as configurações
A seção services abriga a descrição do(s) container(s) que queremos em nosso ambiente. Assim sendo, no nosso caso temos os containers wordpress, db (MySQL) e phpmyadmin. Repare que estas seções estão aninhadas a seção services.
Dentro de cada uma dessas seções, temos a descrição da imagem do container que deverá ser instalada. Estes nomes dever coincidir com os nomes das imagens que estão no docker hub, repositório oficial de imagens do Docker. Assim temos as imagens wordpress, mysql:8.0 e phpmyadmin/phpmyadmin.
Por sua vez, a opção “restart: always” diz ao Docker que o container sempre deve ser reinicializado, independente de como o mesmo seja encerrado.
Na opção “ports”, indicamos ao Docker que as portas de rede do container devem ser mapeadas para as portas de rede do nosso sistema operacional. Desse modo, conseguimos acessar o wp-admin na porta 8080 e phpmyadmin na porta 8082.
Em seguida temos a opção “environment” que é responsável por definir variáveis de ambiente visíveis ao container. Entenda isso como uma forma de passarmos informações ao container, como usuários e senhas por exemplo. Do contrário, não conseguiríamos definir informações básicas ao wordpress e nosso banco de dados MySQL.
Por fim, a seção “volumes” representa o mapeamento das pastas internas do container para pastas criadas em nosso próprio sistema operacional. Desta maneira, conseguimos acessar o conteúdo de pastas ou arquivos do container sem a necessidade de outra conexão ao container.
No nosso ambiente, temos o volume www que é o conteúdo do nosso site; de maneira idêntica temos o volume db que é o conteúdo do nosso banco de dados; por fim temos o arquivo uploads.ini que é apenas uma configuração adicional enviada ao Apache para aumentar o limite de tamanho de uploads para podermos enviar uma imagem ou um plugin maior ao wordpress, por exemplo.
Vantagens e Desvantagens
Em suma, criar um ambiente WordPress com Docker é relativamente simples, principalmente se você tiver um modelo de arquivo compose do Docker pré-configurado. Rodar este ambiente localmente torna o acesso mais rápido em comparação a um ambiente hospedado em servidores externos, principalmente se o plano de hospedagem for mais básico.
No entanto, quando concluída a fase de desenvolvimento do site, sua migração pode ser um pouco problemática em função das particularidades que sua hospedagem pode apresentar. Plugins de migração do wordpress por vezes não funcionam satisfatoriamente nas suas versões gratuitas.
Em contrapartida, para testar novos plugins, simular ambientes diferenciados para sites ou até mesmo para aprender wordpress, rodá-lo localmente com Docker é uma excelente opção.
Pondere os prós e os contras na hora de definir seu ambiente de desenvolvimento e quais são os seus objetivos. Isso lhe poupará bastante tempo e energia!
Espero ter ajudado!
Até a próxima!