WordPress · 13 min read · Sep 10, 2025

Como Instalar o WordPress com Docker Compose

O WordPress CMS (Sistema de Gerenciamento de Conteúdo) é uma plataforma de código aberto amplamente utilizada que permite aos usuários criar, gerenciar e publicar conteúdo digital, principalmente para sites e blogs. Lançado inicialmente em 2003, o WordPress cresceu para se tornar o CMS mais popular do mundo, alimentando mais de 40% de todos os sites na internet. Ele oferece uma interface amigável que permite que indivíduos com pouca ou nenhuma experiência em programação construam e mantenham sites de qualidade profissional. O WordPress é altamente personalizável, com milhares de temas e plugins disponíveis para estender sua funcionalidade, atendendo a uma ampla gama de necessidades, desde blogs simples até sites de e-commerce complexos. Seu forte suporte da comunidade, atualizações regulares e extensa documentação fazem dele uma escolha confiável e versátil tanto para iniciantes quanto para desenvolvedores experientes.

O Docker é uma plataforma de código aberto projetada para automatizar a implantação, escalonamento e gerenciamento de aplicativos dentro de contêineres leves e portáteis. Introduzido em 2013, o Docker revolucionou o desenvolvimento de software ao fornecer um ambiente consistente para aplicativos serem executados, independentemente de onde são implantados, seja na máquina local de um desenvolvedor, em data centers locais ou na nuvem. Os contêineres agrupam um aplicativo com todas as suas dependências, bibliotecas e arquivos de configuração, garantindo desempenho consistente em diferentes ambientes. Essa containerização simplifica o fluxo de trabalho de desenvolvimento, melhora a colaboração e aumenta a eficiência, permitindo que os desenvolvedores criem, compartilhem e executem aplicativos de forma contínua. O ecossistema do Docker inclui ferramentas e serviços para orquestração de contêineres, como Docker Swarm e Kubernetes, que facilitam o gerenciamento de implantações de contêineres em larga escala, tornando-se uma tecnologia fundamental nas práticas modernas de DevOps.

Este tutorial ensinará como instalar o WordPress usando Docker/Docker Compose. Usando o Docker, o processo de instalação da pilha preferida se torna muito mais fácil. Você pode usar a mesma configuração para instalar o WordPress rapidamente em vários servidores. Também instalaremos a ferramenta phpMyAdmin para gerenciar bancos de dados junto com o servidor proxy Nginx para servir o site via SSL.

Pré-requisitos

  • Um servidor Linux com um usuário não-root com privilégios sudo. Estamos usando um servidor rodando Ubuntu 24.04 para nosso tutorial.
  • Um nome de domínio totalmente qualificado (FQDN) apontando para seu servidor. Para nossos propósitos, usaremos example.com como o nome de domínio para o site WordPress e phpmyadmin.example.com para o site phpMyAdmin.
  • Certifique-se de que tudo está atualizado. $ sudo apt update
  • Instale pacotes utilitários básicos. Alguns deles podem já estar instalados. $ sudo apt install wget curl nano software-properties-common dirmngr apt-transport-https gnupg gnupg2 ca-certificates lsb-release ubuntu-keyring unzip -y

Passo 1 - Configurar o Firewall

O primeiro passo é configurar o firewall. O Ubuntu vem com ufw (Uncomplicated Firewall) por padrão.

Verifique se o firewall está em execução.

$ sudo ufw status

Você deve obter a seguinte saída.

Status: inactive

Permita a porta SSH para que o firewall não interrompa a conexão atual ao ativá-lo.

$ sudo ufw allow OpenSSH

Permita também as portas HTTP e HTTPS.

$ sudo ufw allow http
$ sudo ufw allow https

Ative o Firewall

$ sudo ufw enable
Comando pode interromper conexões ssh existentes. Prosseguir com a operação (y|n)? y
Firewall está ativo e habilitado na inicialização do sistema

Verifique o status do firewall novamente.

$ sudo ufw status

Você deve ver uma saída semelhante.

Status: active

Para                         Ação      De
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443                        ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)

Passo 2 - Instalar Docker e Docker Compose

O Ubuntu 22.04 vem com uma versão mais antiga do Docker. Para instalar a versão mais recente, primeiro, importe a chave GPG do Docker.

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

Crie um arquivo de repositório do Docker.

$ echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Atualize a lista de repositórios do sistema.

$ sudo apt update

Instale a versão mais recente do Docker.

$ sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin

Verifique se está em execução.

$ sudo systemctl status docker
? docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2024-07-19 17:11:19 UTC; 3s ago
TriggeredBy: ? docker.socket
       Docs: https://docs.docker.com
   Main PID: 1163 (dockerd)
      Tasks: 7
     Memory: 21.9M
        CPU: 221ms
     CGroup: /system.slice/docker.service
             ??2803 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Por padrão, o Docker requer privilégios de root. Se você quiser evitar usar sudo toda vez que executar o comando docker, adicione seu nome de usuário ao grupo docker.

$ sudo usermod -aG docker $(whoami)

Você precisará sair do servidor e entrar novamente como o mesmo usuário para habilitar essa mudança ou usar o seguinte comando.

$ su - ${USER}

Confirme que seu usuário foi adicionado ao grupo Docker.

$ groups
navjot wheel docker

Passo 3 - Criar Arquivo Docker Compose para WordPress

Farei toda a instalação do Docker WordPress em /opt. Você pode escolher um local diferente como /var ou /home para atender às suas necessidades.

cd /opt

Crie um diretório para a configuração do WordPress.

$ mkdir wordpress

Mude para o diretório.

$ cd wordpress

Crie e abra o arquivo Docker compose para edição.

$ nano docker-compose.yml

Cole o seguinte código nele.

services:
  wp:
    image: wordpress:latest
    container_name: wordpress-app
    restart: unless-stopped
    expose:
      - 8080
    volumes:
      - ./config/php.conf.ini:/usr/local/etc/php/conf.d/conf.ini
      - ./wp-app:/var/www/html
      #- ./plugin-name/trunk/:/var/www/html/wp-content/plugins/plugin-name # Desenvolvimento de plugin
      #- ./theme-name/trunk/:/var/www/html/wp-content/themes/theme-name # Desenvolvimento de tema
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_NAME: "${DB_NAME}"
      WORDPRESS_DB_USER: "${DB_USER_NAME}"
      WORDPRESS_DB_PASSWORD: "${DB_USER_PASSWORD}"
      VIRTUAL_HOST: example.com
      LETSENCRYPT_HOST: example.com
    depends_on:
      - db
    links:
      - db

  wpcli:
    image: wordpress:cli
    container_name: wpcli_app
    volumes:
      - ./config/php.conf.ini:/usr/local/etc/php/conf.d/conf.ini
      - ./wp-app:/var/www/html
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_NAME: "${DB_NAME}"
      WORDPRESS_DB_USER: "${DB_USER_NAME}"
      WORDPRESS_DB_PASSWORD: "${DB_USER_PASSWORD}"
    depends_on:
      - db
      - wp

  pma:
    image: phpmyadmin/phpmyadmin
    container_name: pma
    restart: unless-stopped
    environment:
      # https://docs.phpmyadmin.net/en/latest/setup.html#docker-environment-variables
      PMA_HOST: db
      PMA_PORT: 3306
      MYSQL_ROOT_PASSWORD: "${DB_ROOT_PASSWORD}"
      UPLOAD_LIMIT: 50M
      VIRTUAL_HOST: phpmyadmin.example.com
      LETSENCRYPT_HOST: phpmyadmin.example.com
    expose:
      - 8081
    links:
      - db:db

  db:
    image: mysql:latest
    container_name: wordpressdb
    restart: unless-stopped
    command: [
        '--default_authentication_plugin=mysql_native_password',
        '--character-set-server=utf8mb4',
        '--collation-server=utf8mb4_unicode_ci'
    ]
    volumes:
      - ./wp-data:/docker-entrypoint-initdb.d
      - db_data:/var/lib/mysql
    environment:
      MYSQL_DATABASE: "${DB_NAME}"
      MYSQL_ROOT_PASSWORD: "${DB_ROOT_PASSWORD}"
      MYSQL_USER: "${DB_USER_NAME}"
      MYSQL_PASSWORD: "${DB_USER_PASSWORD}"

volumes:
  db_data:

Salve o arquivo pressionando Ctrl + X e digitando Y quando solicitado.

Existem duas imagens do WordPress que estamos puxando. Uma é para o site e a outra é para a ferramenta WP-CLI. Ambas as imagens dependem da imagem do MySQL 8.0. Aqui definimos as variáveis de ambiente para as credenciais do Banco de Dados. Criamos dois volumes para ambos os contêineres, um dos quais aponta para os arquivos públicos do site WordPress e o segundo aponta para a localização personalizada do PHP.ini. Também definimos as variáveis de ambiente para o domínio do host virtual Nginx e o domínio SSL Let’s encrypt para o site WordPress.

Você pode adicionar mais variáveis de ambiente e adicionar dados personalizados wp-config.php ao arquivo Docker. Você pode aprender sobre as variáveis de ambiente adicionais na página do WordPress DockerHub.

A próxima imagem é para o phpMyAdmin, que depende da mesma imagem do MySQL e se conecta a ela usando a senha root. Ele tem um limite de upload de 50MB. Você pode alterá-lo de acordo com suas necessidades e o tamanho do seu banco de dados. Assim como no site WordPress, definimos o domínio do host virtual Nginx e o nome do domínio SSL Let’s encrypt para o site phpMyAdmin.

A última imagem é para o banco de dados MySQL. Passamos alguns comandos para configurá-lo com o método de autenticação padrão e o conjunto de caracteres. Também criamos alguns volumes para armazenar os dados e configuramos variáveis de ambiente para as credenciais do banco de dados.

O próximo passo é criar o arquivo de ambiente para as variáveis usadas no arquivo compose. Crie e abra o arquivo de ambiente para edição.

$ sudo nano .env

Cole o seguinte código nele.

DB_NAME=wordpress
DB_USER_NAME=username
DB_USER_PASSWORD=userpassword
DB_ROOT_PASSWORD=password

Você pode salvar o arquivo pressionando Ctrl + X e digitando Y quando solicitado. Substitua as variáveis pelo nome de usuário e senha de sua escolha.

Você pode personalizar a configuração do PHP usando um arquivo php.ini personalizado.

Crie uma pasta para a configuração do PHP.

$ mkdir config

Crie e abra o arquivo php.conf.ini para edição.

$ nano config/php.conf.ini

Cole o seguinte código nele. Ajuste os valores conforme sua necessidade. O limite de upload para o contêiner PhpMyadmin é independente dos valores que você usa neste arquivo.

file_uploads = On
memory_limit = 500M
upload_max_filesize = 30M
post_max_size = 30M
max_execution_time = 600

Salve o arquivo pressionando Ctrl + X e digitando Y quando solicitado.

Passo 4 - Atualizar Docker Compose Para Nginx

Crie o diretório para a configuração do Nginx.

$ mkdir nginx

Crie um diretório para Hosts Virtuais dentro desse diretório.

$ mkdir nginx/vhost

Crie e abra o arquivo nginx/vhost/wordpress.example.com para edição.

$ nano nginx/vhost/wordpress.example.com

Cole o seguinte código nele.

server_tokens off;
client_max_body_size 30m;

Salve o arquivo pressionando Ctrl + X e digitando Y quando solicitado.

Faça o mesmo para o arquivo nginx/vhost/phpmyadmin.example.com.

$ nano nginx/vhost/phpmyadmin.example.com

Cole o seguinte código nele.

server_tokens off;
client_max_body_size 50m;

Salve o arquivo pressionando Ctrl + X e digitando Y quando solicitado.

Abra o arquivo docker compose novamente.

$ nano docker-compose.yml

Cole o seguinte código antes da linha volumes: db_data:.

  nginx:
    container_name: nginx
    image: nginxproxy/nginx-proxy
    restart: unless-stopped
    ports:
        - 80:80
        - 443:443
    volumes:
        - /var/run/docker.sock:/tmp/docker.sock:ro
        - ./nginx/html:/usr/share/nginx/html
        - ./nginx/certs:/etc/nginx/certs
        - ./nginx/vhost:/etc/nginx/vhost.d
    logging:
        options:
            max-size: "10m"
            max-file: "3"

Salve o arquivo pressionando Ctrl + X e digitando Y quando solicitado.

No código acima, puxamos a imagem Docker do proxy Nginx e expomos as portas 80 e 443 para o contêiner host, que serão usadas para se conectar ao mundo exterior. Também criamos volumes para a página HTML do Nginx, um diretório onde todos os certificados SSL serão armazenados e o diretório para hosts virtuais, que usamos acima para adicionar configuração adicional do Nginx. Configuramos o tamanho do upload de arquivos para os sites WordPress e phpMyAdmin. O nome do domínio do site é retirado das variáveis de ambiente que definimos na etapa anterior.

Passo 5 - Atualizar Docker Compose para SSL

Abra o arquivo docker compose para edição.

$ nano docker-compose.yml

Cole o seguinte código antes da linha volumes: db_data:.

  acme-companion:
    container_name: acme-companion
    image: nginxproxy/acme-companion
    restart: unless-stopped
    volumes_from:
        - nginx
    volumes:
        - /var/run/docker.sock:/var/run/docker.sock
        - ./nginx/acme:/etc/acme.sh
    environment:
        DEFAULT_EMAIL: [email protected]

Salve o arquivo pressionando Ctrl + X e digitando Y quando solicitado.

Aqui, estamos puxando a imagem Docker do Acme companion, que funciona com o proxy Nginx. Ele puxa os volumes do contêiner Nginx. Também definimos um volume para a ferramenta acme.sh, que armazena toda a configuração relacionada ao SSL Let’s Encrypt. Por fim, definimos uma variável de ambiente para registrar o certificado SSL com o Let’s Encrypt.

Passo 6 - Iniciar e Instalar o WordPress

Agora que todos os nossos arquivos de configuração estão completos, é hora de iniciar e lançar os contêineres.

$ docker compose up -d

Aguarde alguns minutos e verifique o status dos contêineres.

$ docker ps
CONTAINER ID   IMAGE                       COMMAND                  CREATED          STATUS          PORTS                                                                      NAMES
c1e8a9b5169d   nginxproxy/acme-companion   "/bin/bash /app/entr…"   14 seconds ago   Up 7 seconds                                                                               acme-companion
8a37c78ff790   wordpress:latest            "docker-entrypoint.s…"   14 seconds ago   Up 7 seconds    80/tcp, 8080/tcp                                                           wordpress-app
4f9c777c97c2   phpmyadmin/phpmyadmin       "/docker-entrypoint.…"   14 seconds ago   Up 7 seconds    80/tcp, 8081/tcp                                                           pma
1b1dede46b07   nginxproxy/nginx-proxy      "/app/docker-entrypo…"   14 seconds ago   Up 11 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   nginx
b9cf64a2f4a3   mysql:latest                "docker-entrypoint.s…"   14 seconds ago   Up 11 seconds   3306/tcp, 33060/tcp                                                        wordpressdb

Abra a URL https://example.com para iniciar o instalador do WordPress.

Selecionar Idioma do Instalador do WordPress

Selecione seu idioma e clique no botão Continuar para prosseguir para a próxima página.

Detalhes do Site do Instalador do WordPress

Preencha os detalhes do site, escolha seu nome de usuário, senha e endereço de e-mail e clique no botão Instalar WordPress para iniciar a instalação.

Sucesso na Instalação do WordPress

Você será levado à página de sucesso da instalação. Clique no botão Log in para ir para a página de login.

Página de Login do WordPress

Digite seus dados de login e clique no botão Log In para abrir o painel do WordPress.

Painel do WordPress

Você pode começar a usar o WordPress agora.

Passo 7 - Acessar PhpMyAdmin

Você pode acessar o phpMyAdmin através da URL https://phpmyadmin.example.com.

Página de Login do phpMyAdmin

Digite root como nome de usuário e a senha root e clique em Log in para abrir o painel.

Painel do phpMyAdmin

Você pode começar a usar o phpMyAdmin agora.

Passo 8 - Acessar WP-CLI

Você pode acessar o WP-CLI usando o seguinte comando.

$ docker compose run --rm wpcli cli version

Você obterá a seguinte saída.

[+] Running 2/0
 ? Container wordpressdb    Running                                                                                0.0s
 ? Container wordpress-app  Running                                                                                0.0s
WP-CLI 2.7.1

Para evitar digitar um comando tão longo toda vez, podemos usar o recurso de alias do Linux.

$ alias wp="docker compose -f ~/wordpress/docker-compose.yml run --rm wpcli"

Agora você pode digitar o seguinte comando de qualquer lugar em seu contêiner.

$ wp cli version

Os aliases no Linux são temporários. Para tornar o alias permanente, você precisa editar o arquivo ~/.bashrc. Abra-o para edição.

$ nano ~/.bashrc

Cole a seguinte linha no final do arquivo.

# Aliases personalizados
alias wp="docker compose -f ~/wordpress/docker-compose.yml run --rm wpcli"

Salve o arquivo pressionando Ctrl + X e digitando Y quando solicitado.

Fonte o arquivo para recarregar a configuração.

$ source ~/.bashrc

Você pode começar a usar o WP-CLI.

Passo 9 - Fazer Backup do WordPress

Existem várias maneiras de fazer backup do WordPress. A maneira mais fácil é usar um plugin. Existem vários plugins disponíveis para isso. Você também pode usar o phpMyAdmin para criar um backup.

Você também pode usar a linha de comando para fazer backup do banco de dados do WordPress. Mude para o diretório do WordPress.

$ cd ~/wordpress

Use o seguinte comando para fazer backup do banco de dados do WordPress. Você será solicitado a inserir sua senha root do MySQL.

$ docker compose exec db sh -c "exec mysqldump wordpress -uroot -p" | sudo tee wp-data/data_`date +%d-%m-%Y"_"%H_%M_%S`.sql >/dev/null
Digite a senha: password

O comando acima criará o backup SQL no diretório ~/wordpress/wp-data.

Verifique o conteúdo do diretório.

$ ls -al wp-data
total 908
drwxr-xr-x 2 root   root     4096 Jan 11 10:15 ./
drwxrwxr-x 6 navjot navjot   4096 Jan 11 10:05 ../
-rw-r--r-- 1 root   root   919814 Jan 11 10:14 data_11-01-2023_10_14_40.sql

Você pode ver o banco de dados salvo no diretório. Você pode restaurar esse banco de dados usando a ferramenta phpMyAdmin ou usando o seguinte comando.

$ docker compose exec db sh -c "exec mysql -uroot -p" < wp-data/data_11-01-2023_10_14_40.sql

Você pode criar um cron job para fazer backup do banco de dados regularmente.

Crie o script de backup no diretório /etc/cron.daily e abra-o para edição.

$ sudo nano /etc/cron.daily/wpbackup.sh

Cole o seguinte código nele.

#!/bin/bash
docker compose exec db sh -c "exec mysqldump wordpress -uroot -p" | tee wp-data/data_`date +%d-%m-%Y"_"%H_%M_%S`.sql >/dev/null

Salve o arquivo pressionando Ctrl + X e digitando Y quando solicitado.

Torne o script executável.

$ sudo chmod +x /etc/cron.daily/wpbackup.sh

Agora, seu banco de dados será salvo diariamente.

Passo 10 - Atualizar o WordPress

A maneira mais fácil de atualizar o WordPress é usar o atualizador embutido. Você também pode atualizá-lo usando o Docker. O primeiro passo é fazer backup do banco de dados do WordPress usando o comando da etapa 9.

Em seguida, mude para o diretório.

$ cd ~/wordpress

Pare os Contêineres.

$ docker compose down --remove-orphans

Puxe as imagens de contêiner mais recentes.

$ docker compose pull

Faça quaisquer alterações no docker-compose.yml, se desejar.

Reinicie os contêineres do WordPress.

$ docker compose up -d

Conclusão

Isso conclui nosso tutorial sobre como instalar o WordPress usando Docker Compose, phpMyAdmin e WP-CLI. Se você tiver alguma dúvida, poste nos comentários abaixo.

Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.