Como gerenciar e atualizar múltiplos WordPress pelo terminal com WP-CLI#
Quem cuida de vários sites em WordPress sabe o tempo perdido em manutenções manuais: abrir dezenas de abas no navegador, logar em cada painel /wp-admin, atualizar plugins um a um e torcer para nada quebrar.
Usar o WP-CLI diretamente pelo SSH elimina esse trabalho repetitivo. Com ele, você cria usuários, atualiza temas, roda backups e pesquisa strings no banco de dados em segundos.
Abaixo, reuni o passo a passo para instalar a ferramenta com segurança (com ou sem root), gerenciar credenciais sem vazar senhas nos logs e um script em Bash para atualizar todos os sites do servidor em lote.
1. Requisitos e teste do PHP CLI#
Antes de baixar o executável, confirme se o PHP de linha de comando está funcionando no seu terminal:
# Verificar a versão do PHP CLI
php --version
Se o binário não for encontrado, instale o pacote e os módulos comuns:
# Debian / Ubuntu
sudo apt-get update
sudo apt-get install php-cli php-mysql php-xml php-mbstring php-curl -y
# RHEL / Rocky Linux / AlmaLinux
sudo dnf install php-cli php-mysqlnd php-xml php-mbstring php-curl -y
2. Instalação global com permissão de root#
Para disponibilizar o comando wp para todos os usuários do servidor:
# 1. Baixar o arquivo PHAR oficial
curl -sO https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
# 2. Validar integridade via hash SHA-256
curl -sLO https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar.sha256 && shasum -a 256 -c wp-cli.phar.sha256
# 3. Tornar executável e mover para o PATH global
chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp
# 4. Validar instalação
wp --info
3. Instalação local em hospedagem sem root#
Se você estiver em um plano de hospedagem compartilhada ou com usuário enjaulado:
# 1. Criar pasta bin pessoal
mkdir -p ~/bin
curl -sO https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
chmod +x wp-cli.phar
mv wp-cli.phar ~/bin/wp
# 2. Adicionar ao PATH no ~/.bashrc
echo 'export PATH="$HOME/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
4. O perigo de passar senhas direto no comando#
Formas seguras de definir senhas:#
# Opção 1: Definir senha interativamente via prompt (não grava no histórico)
wp user update 1 --prompt=user_pass --skip-email
# Opção 2: Deixar o WP-CLI gerar uma senha forte aleatória
wp user create admin-novo admin@seudominio.com --role=administrator
# Opção 3: Usar variável de ambiente temporária (limpa logo após o uso)
export WP_PASS="SenhaTemporaria123!"
wp user create admin-novo admin@seudominio.com --role=administrator --user_pass="$WP_PASS"
unset WP_PASS
5. Backups rápidos direto no gzip#
Antes de qualquer atualização de plugin ou tema, faça um dump do banco comprimido:
# Exportar banco direto para gzip (economiza I/O e espaço em disco)
wp db export - | gzip > backup-$(date +%Y%m%d-%H%M%S).sql.gz
# Restaurar backup comprimido
gunzip -c backup-XXXX.sql.gz | wp db import -
# Otimizar e reparar tabelas
wp db optimize
wp db repair
6. Comandos mais usados no dia a dia#
A. Atualizações e integridade do core#
# Checar o que tem de novo
wp core check-update
wp plugin list --update=available
wp theme list --update=available
# Atualizar tudo de uma vez
wp plugin update --all
wp theme update --all
# Validar se algum arquivo do WordPress foi modificado ou corrompido
wp core verify-checksums
B. Trocar domínio no banco (search & replace)#
# 1. Simular a troca antes de aplicar (dry-run)
wp search-replace 'https://site-antigo.com' 'https://site-novo.com' --all-tables --dry-run
# 2. Aplicar a troca em todas as tabelas
wp search-replace 'https://site-antigo.com' 'https://site-novo.com' --all-tables
C. Limpeza de cache#
# Limpar transients acumulados e cache de objetos
wp transient delete --all
wp cache flush
7. Configurando padrões no wp-cli.yml#
Crie um arquivo wp-cli.yml na raiz do seu site para desativar comandos perigosos e definir atalhos:
path: /var/www/site/public_html
disabled_commands:
- db drop
- db reset
skip-plugins:
- akismet
8. Gerenciando redes WordPress multi-site#
# Listar subsites da rede
wp site list
# Atualizar o core e todos os plugins em toda a rede
wp core update --network
wp plugin update --all --network
9. Script em Bash para atualizar todos os sites do servidor#
Se você administra um servidor com dezenas de clientes ou projetos, este script localiza todas as pastas com wp-config.php, faz backup prévio e atualiza o core e plugins com log:
#!/usr/bin/env bash
set -euo pipefail
BASE_DIR="${1:-/home}"
LOG_FILE="/var/log/wp-update-$(date +%Y%m%d-%H%M%S).log"
BACKUP_DIR="/root/wp-backups/$(date +%Y%m%d)"
mkdir -p "$BACKUP_DIR"
log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"; }
SITES=$(find "$BASE_DIR" -maxdepth 5 -name wp-config.php -not -path "*/wp-content/*" 2>/dev/null)
for wpconfig in $SITES; do
site=$(dirname "$wpconfig")
SITE_NAME=$(basename "$(dirname "$site")")
log "Atualizando site: $site"
# 1. Backup do banco
wp --path="$site" --no-color --skip-plugins db export "$BACKUP_DIR/${SITE_NAME}-pre-update.sql" --quiet 2>/dev/null || true
# 2. Atualizar core e plugins
wp --path="$site" --no-color core update --skip-plugins --quiet || true
wp --path="$site" --no-color plugin update --all --quiet || true
# 3. Validar integridade
wp --path="$site" --no-color core verify-checksums --quiet || log "Alerta de checksums em $site"
done
log "Rotina de atualizacoes em lote finalizada."
Cuidados importantes em produção#
- Use --skip-plugins quando o site cair: Se uma atualização quebrar o site com erro fatal (500), o WP-CLI continua funcionando se você passar a flag
--skip-plugins, permitindo desativar o plugin problemático pelo terminal. - Pipes economizam tempo e disco: Exportar e importar bancos passando direto pelo
gzipevita criar arquivos.sqlgigantes temporários no disco. - Verifique checksums periodicamente: O comando
wp core verify-checksumsé a forma mais rápida de descobrir se algum arquivo original do WordPress foi alterado por malware. - Proteja as rotas administrativas: Combine o uso de WP-CLI com uma auditoria técnica de segurança no WordPress e valide as permissões de cache no servidor web com o guia de permissões no Nginx.
Este artigo foi útil?
Deixe uma reação rápida para apoiar o conteúdo:
Este post está licenciado sob CC BY-NC.



Comentários
Participe da discussão abaixo.
0 comentários