Saudações.
Esse tutorial é um guia rápido de instalação e uso do WordPress.
Pré-requisitos (constam em outros artigos aqui do blog):
- Instalação do Linux (Debian);
- Internet no servidor (sua VPS ou host);
- Docker CE instalado;
- Traefik como proxy reverso;
1 – Sobre WordPress
O WordPress (WP) é um sistema de gerenciamento de conteúdo (CMS — Content Management System) criado em 2003 por Matt Mullenweg e Mike Little.
É a plataforma mais utilizada no mundo para criação de sites, respondendo por mais de 40% de todos os sites na internet.
Ele separa o conteúdo da apresentação visual. Todo o conteúdo é armazenado em um banco de dados MySQL (MariaDB), enquanto os arquivos PHP do sistema processam as requisições e montam as páginas dinamicamente a cada acesso do usuário.
A estrutura do WordPress é organizada em três camadas principais:
- Núcleo (Core): o conjunto de arquivos base responsável pelo funcionamento do sistema, atualizações de segurança e gerenciamento de conteúdo.
- Temas: controlam a aparência visual do site, determinando layout, tipografia e cores. Podem ser trocados sem afetar o conteúdo.
- Plugins: extensões que adicionam funcionalidades extras, como formulários de contato, SEO, lojas virtuais (WooCommerce) e muito mais. Existem mais de 60 mil plugins no repositório oficial.
Existem duas versões:
- WordPress.com é uma plataforma hospedada, ideal para quem quer simplicidade sem lidar com servidores;
- WordPress.org oferece o software gratuito para instalação em hospedagem própria, dando total controle e personalização ao usuário.
Assim, vamos usar o ORG para hospedar nosso próprio WP em Docker.
2 – Rodando WordPress
Rede de containers do serviço:
# Rede "wordpress":
docker network create \
-d bridge \
\
-o "com.docker.network.bridge.name"="br-wordpress" \
-o "com.docker.network.bridge.enable_icc"="true" \
\
--subnet 10.222.0.0/16 --gateway 10.222.255.254 \
\
wordpress;
Banco de dados MariaDB:
# Diretório para o volume do MariaDB:
mkdir -p /storage/wordpress-mariadb;
# Rodar mariadb:
docker run \
-d \
--restart=unless-stopped \
--name wordpress-mariadb -h wordpress-mariadb.intranet.br \
\
--network wordpress \
\
-e MYSQL_ROOT_PASSWORD=tulipasql \
-e MYSQL_DATABASE=wordpress \
-e MYSQL_USER=wordpress \
-e MYSQL_PASSWORD=tulipasql \
\
-v /storage/mariadb-wordpress:/var/lib/mysql \
\
mariadb:latest;
# Acesso: root / tulipasql
# Testando acesso no host: (requer client, apt-get -y install mariadb-client)
# mariadb -h IP_do_container -u root -ptulipasql
# mariadb -h IP_do_container -u wordpress -ptulipasql
Rodando container do WordPress:
# Endereco de DNS:
FQDN="wordpress.seudominio.com.br";
# Diretório para o volume do WordPress:
mkdir -p /storage/wordpress-data
mkdir -p /storage/wordpress-data/uploads
mkdir -p /storage/wordpress-data/htdocs
# Usado imagem oficial
docker run \
-d \
--restart=unless-stopped \
--name wordpress-app -h wordpress-app.intranet.br \
\
--network wordpress \
\
-p 12101:80 \
\
-e WORDPRESS_DB_HOST=wordpress-mariadb \
-e WORDPRESS_DB_USER=wordpress \
-e WORDPRESS_DB_PASSWORD=tulipasql \
-e WORDPRESS_DB_NAME=wordpress \
\
-v /storage/wordpress-data:/data \
-v /storage/wordpress-data/htdocs:/var/www/html \
\
--label "traefik.enable=true" \
--label "traefik.http.routers.$NAME.rule=Host(\`$FQDN\`)" \
--label "traefik.http.routers.$NAME.entrypoints=websecure" \
--label "traefik.http.routers.$NAME.tls=true" \
--label "traefik.http.routers.$NAME.tls.certresolver=letsencrypt" \
--label "traefik.http.services.$NAME.loadbalancer.server.port=80" \
\
wordpress:latest;
O primeiro acesso é urgente e vital para configurar a senha de acesso.
No exemplo acima redirecionei a porta 12101 para o container wordpress-app.
Acesse: http:// + IP do servidor + :12101
Define os valores iniciais (pode alterar depois):
- Idioma: recomendo deixar em inglês;
- Site title: Título principal do site;
- Username: Nome de usuário administrador, normalmente “admin“;
- Your Email: Email de administrador;
Após instalar o WordPress, faça o acesso de administração: http:// + IP do servidor + :12101/wp-admin/
3 – Arquitetura do WordPress
O WordPress é um software LAMP (Linux, Apache, MySQL e PHP).
Containers são originalmente usados para rodar um único software (PID 1) o que força o uso do Apache com mod_php , onde o PHP é carregado como um módulo do Apache 2 em tempo de execução.
Isso faz com que o processo do Apache2 seja pesado e fortemente acoplado somando no mesmo processo todas as funções e threads do Apache com todas as funções e threads do PHP.
Centenas de usuários podem consumir muitos recursos e derrubar facilmente o site.
Para resolver isso o PHP dispõe de um processo chamado PHP-FPM (FastCGI Process Manager) onde o PHP roda separado, o Apache2 passa a enviar as requisições de arquivos PHP para serem processados pelo FPM.
Logo:
- Arquitetura monolítica:
- Container mariadb: Servidor MySQL, não replicável;
- Container apache2: Apache2 com mod_php;
- Arquitetura distribuida:
- Container mariadb: Servidor MySQL, não replicável;
- Container apache2: Apache2 puro, configuração apontando para o socket ou porta tcp do php-fpm, replicável;
- Container php-fpm: Servidor PHP-FPM para processamento PHP, hospeda os volumes e o código PHP do WordPress, replicável desde que compartilhando o mesmo volume (uploads, updates);
A arquitetura distribuída para o WP deve considerar alguma tecnologia de volume distribuído ou plugin que abstraia o acesso a arquivos (S3 por exemplo). O PHP precisa ser configurado para salvar as sessões em REDIS em vez de arquivos.
4 – Docker Compose
Para rodar no Docker Compose, utilize a Stack (Apache2+mod_php):
networks:
wordpress:
driver: bridge
volumes:
mariadb-data:
wordpress-data:
wordpress-htdocs:
services:
mariadb:
image: mariadb:latest
restart: unless-stopped
networks:
- wordpress
environment:
MYSQL_ROOT_PASSWORD: tulipasql
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: tulipasql
volumes:
- mariadb-data:/var/lib/mysql
wordpress:
image: wordpress:latest
restart: unless-stopped
networks:
- wordpress
ports:
- "12101:80"
environment:
WORDPRESS_DB_HOST: wordpress-mariadb
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: tulipasql
WORDPRESS_DB_NAME: wordpress
volumes:
- wordpress-data:/data
- wordpress-htdocs:/var/www/html
depends_on:
- mariadb
labels:
- "traefik.enable=true"
- "traefik.http.routers.wp-app.rule=Host(`wordpress.seudominio.com.br`)"
- "traefik.http.routers.wp-app.entrypoints=websecure"
- "traefik.http.routers.wp-app.tls=true"
- "traefik.http.routers.wp-app.tls.certresolver=letsencrypt"
- "traefik.http.services.wp-app.loadbalancer.server.port=80"5 – Temas e plugins
O WordPress fica muito bom quando você instala alguns plugins para dar funcionalidades e temas para deixar o site mais bonito.
Aditivos que uso no meu site:
- Tema Raft: tema simples e de visualização suave:
- Plugin Code Block Pro: exibir código-fonte com estilo profissional:
- Plugin Code Block Pro Theme Pack: pacote de estilos para o Code Block Pro;
- Plugin Copy & Delete Posts: duplicar posts para acelerar a criação de novos posts usando posts prontos e posts template;
“Os homens mais ricos são aqueles que possuem amigos mais poderosos.“
O Poderoso Chefão
Terminamos por hoje!
Patrick Brandão, patrickbrandao@gmail.com
