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:

    bash
    # 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"
    Dica
    TTFB acima de 300 ms indica problema no servidor. Com cache ativo, TTFB de 50–100 ms é excelente.

    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:

    bash
    # 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 wordpress
    Dica
    opcache.revalidate_freq=60 faz o PHP checar mudanças de arquivo a cada 60 segundos — adequado para produção. Em desenvolvimento use 0 para recompilar sempre.

    Redis 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:

    yaml
    # 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:
    Dica
    Depois de subir o Redis, instale o plugin Redis Object Cache no WordPress (/wp-admin → Plugins) e clique em "Enable Object Cache". O plugin conecta em redis:6379 automaticamente.

    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:

    bash
    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.cnf
    Dica
    slow_query_log captura queries acima de 1 segundo — verifique com docker compose exec db tail -50 /var/log/mysql/slow.log.

    Gzip 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:

    nginx
    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.

    Perguntas frequentes