Conjunto completo de scripts para instalação e otimização de WordPress com Nginx e PHP-FPM, incluindo segurança avançada, cache em RAM e tuning de performance.
- Múltiplos sites no mesmo servidor: Cada domínio possui seu próprio diretório e configuração
- Detecção automática de SSL baseada na URL fornecida
- Suporte para diferentes versões do PHP (8.1, 8.2, 8.3, 8.4)
- Pool PHP dedicado para área administrativa com limites de recursos ampliados
- Sistema de templates Mustache para configurações dinâmicas
- FastCGI Cache em RAM (
/dev/shm) - Cache de páginas para máxima velocidade - DragonflyDB Object Cache - 25x mais rápido que Redis, multi-threaded
- Network Performance Tuning - Otimizações baseadas em "Extreme HTTP Performance Tuning"
- Sysctl otimizado - Mais de 100 parâmetros de kernel ajustados (TCP BBR, buffers, swappiness, etc.)
- Busy Polling - Reduz latência em ~5-10%
- WAF (Web Application Firewall) - Regras extensivas de proteção
- Proteção contra HTTP Smuggling, XSS, SQL Injection
- Hardening de headers HTTP - Content-Type, User-Agent, Referer
- Proteção DDoS com rate limiting
- NFTables Firewall - Firewall moderno com rate limiting para SSH/ICMP
- 8G Firewall - Regras adicionais de segurança
server-setup.sh- Configuração inicial do servidorinstall-wordpress.sh- Instalação de sites WordPressnginx-cache-manager.sh- Gerenciamento do cache FastCGInetwork-tuning.sh- Otimizações de rede avançadas
wordpress-nginx/
├── server-setup.sh # Configuração inicial do servidor
├── install-wordpress.sh # Instalação de sites WordPress
├── nginx-cache-manager.sh # Gerenciamento do cache FastCGI
├── network-tuning.sh # Tuning de performance de rede
├── nftables.conf # Configuração do firewall NFTables
├── 50-perf.conf # Configurações sysctl otimizadas
├── network-tuning.service # Serviço systemd para tuning de rede
├── nginx-cache-dir.service # Serviço para criar diretório de cache no boot
├── nginx/
│ ├── nginx.conf # Configuração principal do Nginx
│ ├── nginx.mustache # Template Nginx (sem cache)
│ ├── nginx-cache.mustache # Template Nginx (com FastCGI cache)
│ └── snippets/
│ ├── secure.conf # Regras de segurança
│ ├── secure-maps.conf # Maps de segurança (WAF)
│ ├── fastcgi-cache.conf # Configuração do cache FastCGI
│ ├── fastcgi-cache-location.conf # Diretivas de cache para location
│ ├── fastcgi-php.conf # Configuração FastCGI para PHP
│ └── ddos-protection.conf # Proteção contra DDoS
├── php/
│ └── *.mustache # Templates de configuração PHP-FPM
└── mysql/
└── *.mustache # Templates de configuração MySQL/MariaDB
apt install git -y
git clone https://github.com/overdigo/wordpress-nginx
cd wordpress-nginxchmod +x server-setup.sh && ./server-setup.shEste script instalará e configurará:
- Nginx (oficial ou compilado)
- MySQL ou MariaDB (configuração otimizada por RAM)
- PHP-FPM (versão escolhida)
- Cache Server (DragonflyDB, Valkey ou Redis - você escolhe)
- Firewall NFTables
- Sysctl otimizado para performance
⚠️ Importante: Guarde a senha do MySQL root que será exibida ao final da instalação.
chmod +x install-wordpress.sh && ./install-wordpress.shO script irá perguntar:
- URL do site (ex:
https://meusite.com) - Email do administrador
- Versão do PHP
- Senha do MySQL root
- Habilitar FastCGI Cache (opcional - recomendado)
Cada site terá:
- Diretório dedicado:
/var/www/dominio.com - Banco de dados dedicado
- Configuração Nginx específica
- SSL com certificado autoassinado (ou use Certbot depois)
- FastCGI Cache e Object Cache (se habilitado)
O FastCGI Cache armazena páginas em RAM (/dev/shm) para máxima performance.
- Cache em RAM - Latência mínima
- Bypass inteligente para:
- Usuários logados
- Carrinho/Checkout do WooCommerce
- Páginas administrativas
- Formulários (POST requests)
- Preview de posts
# Ver status do cache
./nginx-cache-manager.sh status
# Limpar todo o cache
sudo ./nginx-cache-manager.sh purge
# Ver tamanho do cache
./nginx-cache-manager.sh size
# Monitorar cache em tempo real
./nginx-cache-manager.sh watchO script instala automaticamente o plugin Nginx Helper configurado para:
- Purge automático ao atualizar posts/páginas
- Purge ao atualizar menus/widgets
- Cache path:
/dev/shm/nginx-cache
O server-setup.sh permite escolher entre 3 opções de cache server:
1. DragonflyDB ⭐ (RECOMENDADO)
- 25x mais rápido que Redis
- 30% menos uso de RAM
- Multi-threaded (usa todos os cores)
- Latência ~0.3ms
2. Valkey
- Fork open-source do Redis
- Performance igual ao Redis
- Licença BSD (totalmente livre)
- Latência ~1ms
3. Redis
- Mais maduro e estável
- Single-threaded
- Latência ~1ms
- Amplamente testado
| Métrica | Redis | DragonflyDB |
|---|---|---|
| Threading | Single-threaded | Multi-threaded |
| Performance | Baseline | 25x mais rápido |
| Uso de RAM | Baseline | 30% menos |
| Latência | ~1ms | ~0.3ms |
| Compatibilidade | 100% | 100% Redis API |
- Multi-threaded - Aproveita todos os cores da CPU
- Altamente otimizado - Menos uso de memória
- 100% compatível com Redis API
- Plugin redis-cache funciona normalmente
# Verificar status
systemctl status dragonfly
# Ver estatísticas em tempo real
redis-cli --stat
# Monitorar comandos
redis-cli MONITOR
# Ver informações de memória
redis-cli INFO memory
# Reiniciar serviço
sudo systemctl restart dragonflyO plugin redis-cache é instalado e configurado automaticamente quando o FastCGI Cache está habilitado.
# Aplicar firewall
sudo nft -f nftables.conf
# Ver regras ativas
sudo nft list rulesetRecursos:
- Policy DROP para input/forward
- Rate limiting para SSH (10/minuto)
- Rate limiting para ICMP (1/segundo)
- Suporte a HTTP/3 (QUIC - porta 443/UDP)
Proteções incluídas em nginx/snippets/secure.conf e secure-maps.conf:
| Categoria | Proteção |
|---|---|
| Headers | User-Agent malicioso, Referer spam, Content-Type attacks |
| URL | Path traversal, SQL injection, XSS |
| Arquivos | Backup files, config files, PHP em uploads |
| WordPress | wp-config, xmlrpc, install.php, upgrade.php |
| HTTP | HTTP Smuggling, H2C Smuggling, Method tampering |
| Overflow | Cookie size, URI length, query parameters |
# Aplicar todas as otimizações de rede
sudo ./network-tuning.sh all
# Ou individualmente:
sudo ./network-tuning.sh irq # IRQ affinity
sudo ./network-tuning.sh xps # Transmit Packet Steering
sudo ./network-tuning.sh ring # Ring buffers
sudo ./network-tuning.sh status # Ver status atualO arquivo 50-perf.conf contém mais de 100 otimizações:
# Aplicar configurações
sudo cp 50-perf.conf /etc/sysctl.d/
sudo sysctl --systemPrincipais otimizações:
- TCP BBR congestion control
- Busy polling (reduz latência 5-10%)
- Buffers otimizados (rmem, wmem)
- SYN cookies e proteção contra floods
- TCP FastOpen
- Swappiness reduzido
# Tuning de rede no boot
sudo cp network-tuning.service /etc/systemd/system/
sudo systemctl enable network-tuning
# Criar diretório de cache no boot
sudo cp nginx-cache-dir.service /etc/systemd/system/
sudo systemctl enable nginx-cache-dirO projeto usa arquivos .mustache como templates. Variáveis disponíveis:
| Variável | Descrição | Exemplo |
|---|---|---|
{{DOMAIN}} |
Domínio do site | meusite.com |
{{PHP_VERSION}} |
Versão do PHP | 8.4 |
{{PHP_VERSION_NO_DOT}} |
Versão sem ponto | 84 |
{{SITE_ROOT}} |
Caminho do site | /var/www/meusite.com |
bash <(wget -O - https://raw.githubusercontent.com/overdigo/wordpress-nginx/master/mysqltuner.sh)wget https://freevps.us/downloads/bench.sh -O - -o /dev/null|bashsudo nginx -tsudo systemctl restart nginx
sudo systemctl restart php8.4-fpm
sudo systemctl restart dragonfly
sudo systemctl restart mysql
sudo systemctl restart mariadb
# todos
sudo systemctl restart nginx php8.4-fpm dragonfly mysql mariadb# Nginx error log
tail -f /var/log/nginx/error.log
# PHP-FPM log
tail -f /var/log/php8.4-fpm.log┌─────────────────────────────────────────────────────────────┐
│ CLIENTE │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ NFTables Firewall │
│ (Rate limiting SSH/ICMP, Drop policy) │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ NGINX │
│ ┌─────────────────┐ ┌──────────────┐ ┌────────────────┐ │
│ │ WAF Rules │ │ FastCGI │ │ Static │ │
│ │ (secure.conf) │ │ Cache (RAM) │ │ Files │ │
│ └─────────────────┘ └──────────────┘ └────────────────┘ │
└─────────────────────────────────────────────────────────────┘
│
▼
┌──────────────────────────────┐ ┌─────────────────────────┐
│ PHP-FPM │ │ DragonflyDB │
│ ┌──────────┐ ┌──────────┐ │ │ (Object Cache) │
│ │ www │ │ admin │ │◄──►│ 25x faster than │
│ │ pool │ │ pool │ │ │ Redis, multi-thread │
│ └──────────┘ └──────────┘ │ └─────────────────────────┘
└──────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ MySQL / MariaDB │
│ (Configuração otimizada por RAM) │
└─────────────────────────────────────────────────────────────┘
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
Contribuições são bem-vindas! Por favor, abra uma issue ou pull request.
Este projeto é voltado para servidores de produção. Antes de usar:
- Faça backup dos seus dados
- Teste em ambiente de desenvolvimento primeiro
- Revise as configurações de segurança para seu caso de uso específico