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

 
 
 

Contributors