WordPress lento na VPS: como otimizar
WordPress lento na VPS tem três causas principais: OPcache PHP desabilitado, ausência de cache de objetos (Redis) ou queries lentas no banco. A maioria dos sites passa de 3–4 segundos para menos de 800 ms com as otimizações descritas aqui — sem trocar de servidor ou aumentar RAM.
Medir antes de otimizar
Nunca otimize sem uma baseline. Meça o TTFB (Time To First Byte) com curl — desconta DNS e latência de rede, isola o tempo real do servidor:
# Medir TTFB (3 medições para média)
for i in 1 2 3; do
curl -o /dev/null -s -w "TTFB: %{time_starttransfer}s | Total: %{time_total}s\n" \
https://seudominio.com.br/
done
# Forçar page não-cacheada
curl -o /dev/null -s -w "TTFB: %{time_starttransfer}s\n" \
"https://seudominio.com.br/?nocache=1"OPcache PHP: o ganho mais rápido
OPcache armazena o bytecode PHP compilado em memória, eliminando a recompilação a cada requisição. É desabilitado por padrão na maioria das imagens Docker. Verifique e ative:
# Verificar se está ativo
docker compose exec wordpress php -r "echo opcache_get_status()['opcache_enabled'] ? 'OK' : 'DISABLED';"
# Criar configuração PHP customizada
cat > ./php-opcache.ini << 'EOF'
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.revalidate_freq=60
opcache.save_comments=1
EOF
# Montar no container (docker-compose.yml, serviço wordpress)
# volumes:
# - ./php-opcache.ini:/usr/local/etc/php/conf.d/opcache.ini
docker compose restart wordpressRedis Object Cache
Redis elimina queries repetidas ao banco cacheando objetos PHP na memória. Adicione o serviço ao docker-compose.yml e configure o WordPress:
# No docker-compose.yml, adicionar:
redis:
image: redis:7-alpine
restart: always
command: redis-server --maxmemory 128mb --maxmemory-policy allkeys-lru
volumes:
- redis_data:/data
# No serviço wordpress, adicionar variável:
wordpress:
environment:
WORDPRESS_REDIS_HOST: redis
volumes:
redis_data:Otimizar MariaDB
O banco mal configurado é gargalo em sites com muitos posts ou WooCommerce. Configure o InnoDB buffer pool para usar ~50% da RAM dedicada ao banco:
cat > ./mariadb.cnf << 'EOF'
[mysqld]
innodb_buffer_pool_size = 256M
innodb_log_file_size = 64M
innodb_flush_log_at_trx_commit = 2
query_cache_type = 0
max_connections = 50
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
EOF
# Montar no container (serviço db)
# volumes:
# - ./mariadb.cnf:/etc/mysql/conf.d/custom.cnfGzip e cache de estáticos no Nginx
Compressão gzip reduz HTML/CSS/JS em 60–80%. Cache de assets evita servir o mesmo arquivo repetidamente. Adicione ao bloco server do nginx.conf:
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_types text/plain text/css text/xml application/json
application/javascript application/xml+rss image/svg+xml;
location ~* \.(css|js|png|jpg|jpeg|gif|ico|svg|woff|woff2)$ {
expires 30d;
add_header Cache-Control "public, immutable";
access_log off;
}$ runstack deploy --plan starter
Não quer configurar manualmente?
Não quer configurar manualmente? Implante o WordPress em menos de 3 minutos com a Runstack. Infraestrutura da OPEN DATACENTER, com servidores no Brasil.