Skip to content

overdigo/wordpress-nginx

Repository files navigation

WordPress Nginx Multi-Site Installer

License: MIT

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.

🚀 Características Principais

📦 Instalação e Multi-Sites

  • 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

⚡ Performance

  • 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%

🔒 Segurança

  • 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

🛠️ Scripts e Ferramentas

  • 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 - Otimizações de rede avançadas

📁 Arquivos do Projeto

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

📋 Como Usar

1. Instalar o Git e Clonar o Repositório

apt install git -y
git clone https://github.com/overdigo/wordpress-nginx
cd wordpress-nginx

2. Configuração Inicial do Servidor (apenas uma vez)

chmod +x server-setup.sh && ./server-setup.sh

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

3. Instalação de Sites WordPress (para cada site)

chmod +x install-wordpress.sh && ./install-wordpress.sh

O 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)

⚡ FastCGI Cache (Page Cache em RAM)

O FastCGI Cache armazena páginas em RAM (/dev/shm) para máxima performance.

Características:

  • 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

Gerenciamento do Cache

# 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 watch

Plugin Nginx Helper

O 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

🚀 Cache Server (Object Cache)

O server-setup.sh permite escolher entre 3 opções de cache server:

Opções Disponíveis:

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

Tabela Comparativa:

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

Características:

  • 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

Comandos úteis:

# 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 dragonfly

Configuração no WordPress:

O plugin redis-cache é instalado e configurado automaticamente quando o FastCGI Cache está habilitado.


🔒 Segurança

Firewall NFTables

# Aplicar firewall
sudo nft -f nftables.conf

# Ver regras ativas
sudo nft list ruleset

Recursos:

  • 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)

WAF (Web Application Firewall)

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

🚀 Performance Tuning

Network Tuning

# 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 atual

Sysctl Otimizado

O arquivo 50-perf.conf contém mais de 100 otimizações:

# Aplicar configurações
sudo cp 50-perf.conf /etc/sysctl.d/
sudo sysctl --system

Principais 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

Serviços Systemd

# 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-dir

📝 Sistema de Templates

O 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

🔧 Comandos Úteis

MySQL Tuner (otimização do MySQL)

bash <(wget -O - https://raw.githubusercontent.com/overdigo/wordpress-nginx/master/mysqltuner.sh)

Benchmark do Servidor

wget https://freevps.us/downloads/bench.sh -O - -o /dev/null|bash

Verificar Configuração Nginx

sudo nginx -t

Reiniciar Serviços

sudo 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

Logs

# Nginx error log
tail -f /var/log/nginx/error.log

# PHP-FPM log
tail -f /var/log/php8.4-fpm.log

📊 Arquitetura

┌─────────────────────────────────────────────────────────────┐
│                         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)                │
└─────────────────────────────────────────────────────────────┘

📄 Licença

Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.


🤝 Contribuindo

Contribuições são bem-vindas! Por favor, abra uma issue ou pull request.


⚠️ Aviso

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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published