Esta arquitetura foi desenhada para extrair o máximo de performance e estabilidade do WordPress rodando em contêineres Docker. Ela soluciona problemas clássicos (como lentidão no Nginx e erros visuais de PHP) através de uma abordagem baseada em microserviços, dividindo explicitamente o Banco de Dados, o Processador PHP e o Servidor Web.
wp_nginx(Servidor Web & Proxy Reverso): Imagem oficial baseada em Alpine. Configurado para servir arquivos estáticos diretamente (CSS, JS, Imagens) com cache de 30 dias e encaminhar requisições dinâmicas via Socket Unix para o PHP-FPM. Bloqueia acesso direto a arquivos de sistema (wp-config.php,.env,.git).wp_php(Processador PHP-FPM 8.5): Imagem oficialwordpress:php8.5-fpm-alpine. Otimizada comopcacheativado, upload_max_filesize alto e workers dinâmicos. A comunicação com o Nginx é feita de maneira super eficiente montando um socket compartilhado. Os "Deprecated Warnings" do PHP 8.5 foram ocultados para garantir uma interface de usuário limpa em temas/plugins defasados.wp_mariadb(Banco de Dados Otimizado): Imagem oficial LTS do MariaDB. Selecionado devido ao seu thread pool nativo e melhor desempenho geral com consultas de CMS em comparação com o MySQL tradicional.
- Nginx (Alpine)
- PHP-FPM (v8.5 - Alpine)
- MariaDB (LTS)
- WordPress (Última versão suportada pela imagem FPM)
- Docker & Docker Compose
Siga este passo a passo para subir a stack na sua máquina.
Garanta que você possui este repositório contendo o docker-compose.yml e as pastas de configuração (nginx/, php/).
A estrutura necessária é:
📦 docker/
┣ 📂 nginx/
┃ ┣ 📂 conf.d/
┃ ┃ ┗ 📜 wordpress.conf
┃ ┗ 📜 nginx.conf
┣ 📂 php/
┃ ┣ 📜 php.ini
┃ ┗ 📜 www.conf
┣ 📜 .env
┗ 📜 docker-compose.yml
O projeto depende de um arquivo .env para gerenciar senhas e portas com segurança.
O arquivo .env já deve estar configurado na raiz com a seguinte estrutura base:
MYSQL_ROOT_PASSWORD=SuaSenhaForte
MYSQL_DATABASE=wordpress_db
MYSQL_USER=wp_user
MYSQL_PASSWORD=SuaSenhaForte
WORDPRESS_DB_HOST=mariadb:3306
WORDPRESS_DB_NAME=wordpress_db
WORDPRESS_DB_USER=wp_user
WORDPRESS_DB_PASSWORD=SuaSenhaForte
WORDPRESS_TABLE_PREFIX=wp_
WORDPRESS_DEBUG=0
WORDPRESS_CONFIG_EXTRA="define('WP_DEBUG_DISPLAY', false); @ini_set('display_errors', 0);"
NGINX_HTTP_PORT=80
NGINX_HTTPS_PORT=443
SERVER_NAME=localhost
PHP_MEMORY_LIMIT=512M
PHP_UPLOAD_MAX_FILESIZE=64M
PHP_MAX_EXECUTION_TIME=300💡 UX Tip: O uso do
WORDPRESS_DEBUG=0garante que os alertas "Deprecated" gerados por temas antigos (ex: Kallyas) no PHP 8.5 não quebrem a interface visual (frontend) do seu site.
Navegue até o diretório do projeto e execute o comando mágico:
docker compose up -dA flag -d significa detached mode, permitindo que os contêineres rodem em segundo plano.
Para ter certeza de que tudo subiu corretamente (ou para fazer troubleshooting):
docker compose logs -fAbra seu navegador favorito e acesse a porta definida (padrão 80):
👉 http://localhost
O que vai acontecer?
Você será recebido pela clássica tela "Five Minute Install" do WordPress. Nela, você criará o seu nome de usuário Administrador e senha para acessar o painel administrativo (/wp-admin).
As credenciais do MariaDB (.env) já foram injetadas automaticamente!
Se abrir a página e vir a tela "502 Bad Gateway" escrita pelo Nginx, significa que o Nginx está de pé, mas não conseguiu se comunicar com o PHP-FPM.
- Verifique os logs do nginx (
docker compose logs nginx). Se disserPermission deniednophp-fpm.sock... - Vá ao arquivo
php/www.confe garanta que está configurado:listen.mode = 0666(e não 0660). - Reinicie os serviços:
docker compose restart php nginx.
O Docker tenta montar arquivos (nginx.conf, www.conf, php.ini) a partir do seu computador. Se esses arquivos forem excluídos ou corrompidos no hospedeiro antes de rodar o docker compose up -d, o Docker cria instintivamente pastas vazias (ex. pastas chamadas www.conf/) e o container crasha.
- Solução: Remova esses falsos diretórios criados no seu terminal, crie os arquivos de texto genuínos nos diretórios corretos e suba a stack novamente (
docker compose up -d).
Se você bagunçou a instalação e quer começar do total zero (isso apaga TODOS os dados, posts e imagens!):
docker compose down -v(O -v é o que destrói os volumes persistentes mariadb_data, wordpress_data e php_socket).

