WordPress – Guia de Instalação

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:

Bash
# 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:

Bash
# 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:

Bash
# 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):

/storage/register/config/config.yml
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:

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