Otimizar o Servidor AlmaLinux para Web

Saiba como otimizar o Servidor AlmaLinux desempenho, segurança e confiabilidade, voltado para hospedagem web com técnicas práticas de configuração, tuning de kernel, serviços, armazenamento e segurança.
Ter um servidor AlmaLinux otimizado para web não é apenas sobre velocidade bruta. Trata-se de um equilíbrio entre desempenho, estabilidade e segurança. Neste guia, apresento um conjunto de boas práticas para configurar um servidor AlmaLinux voltado a aplicações web (sites estáticos e dinâmicos, APIs, WordPress, Node.js, etc.). Abordaremos:
- Arquitetura e planejamento: escolha de kernels, serviços e recursos.
- Desempenho: configuração de Nginx/Apache, PHP-FPM, caching, tuning de sysctl.
- Armazenamento e rede: I/O eficiente, RAID, armazenamento em SSD, opções de rede.
- Segurança: hardening, firewall, fail2ban, TLS, atualizações.
- Automação e manutenção: backup, monitoramento, atualizações automáticas recomendadas.
Vamos aos passos práticos para deixar seu servidor mais rápido, seguro e estável, pronto para servir conteúdos na web com confiabilidade e escalabilidade.
Suponha que você tem um VPS: 6 vCPU + 12GB RAM + Apache + WHM + PHP 8.3
Não faça nada disso sem antes fazer backup do servidor completo, ou todos os sites instalados no servidor. E também não configura nada se não souber o que está fazendo. Tudo é por sua conta e risco!
1. Otimizar o Servidor AlmaLinux
1.1 Atualizar o Sistema
# Atualizar todos os pacotes
sudo dnf update -y
# Instalar ferramentas essenciais
sudo dnf install -y htop iotop nethogs tuned
1.2 Configurar Perfil de Performance
# Ativar perfil de performance
sudo systemctl enable tuned
sudo systemctl start tuned
sudo tuned-adm profile throughput-performance
# Verificar perfil ativo
sudo tuned-adm active
1.3 Otimizar Parâmetros do Kernel
Edite /etc/sysctl.conf:
sudo nano /etc/sysctl.conf
Adicione estas linhas:
# Otimizações de rede
net.core.rmem_default = 262144
net.core.rmem_max = 16777216
net.core.wmem_default = 262144
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 12582912 16777216
net.ipv4.tcp_wmem = 4096 12582912 16777216
net.core.netdev_max_backlog = 5000
net.ipv4.tcp_congestion_control = bbr
# Otimizações de memória
vm.swappiness = 10
vm.dirty_ratio = 15
vm.dirty_background_ratio = 5
vm.vfs_cache_pressure = 50
# Otimizações de arquivo
fs.file-max = 2097152
Aplicar alterações:
sudo sysctl -p
2. Otimizar o Apache
2.1 Configurar MPM Event (Mais Eficiente)
Edite /etc/httpd/conf.modules.d/00-mpm.conf:
# Descomente esta linha:
LoadModule mpm_event_module modules/mod_mpm_event.so
# Comente estas linhas:
#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
2.2 Configurar Parâmetros do MPM Event
Edite /etc/httpd/conf.d/mpm_event.conf (crie se não existir):
<IfModule mpm_event_module>
StartServers 4
MinSpareThreads 75
MaxSpareThreads 250
ThreadsPerChild 25
MaxRequestWorkers 400
MaxConnectionsPerChild 0
ServerLimit 16
ThreadLimit 64
</IfModule>
2.3 Otimizar Configuração Principal do Apache
Edite /etc/httpd/conf/httpd.conf:
# Adicione estas diretivas:
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
# Desabilitar módulos desnecessários
# Comente estas linhas se existirem:
#LoadModule autoindex_module modules/mod_autoindex.so
#LoadModule userdir_module modules/mod_userdir.so
#LoadModule status_module modules/mod_status.so
2.4 Habilitar Compressão
Edite /etc/httpd/conf.d/compression.conf (crie o arquivo):
<IfModule mod_deflate.c>
# Comprimir texto, html, javascript, css, xml
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
# Não comprimir imagens
SetEnvIfNoCase Request_URI \
\.(?:gif|jpe?g|png|ico)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI \
\.(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
</IfModule>
2.5 Configurar Cache de Arquivos Estáticos
Edite /etc/httpd/conf.d/expires.conf (crie o arquivo):
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/javascript "access plus 1 month"
ExpiresByType image/png "access plus 1 year"
ExpiresByType image/jpg "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/gif "access plus 1 year"
ExpiresByType image/ico "access plus 1 year"
ExpiresByType image/x-icon "access plus 1 year"
</IfModule>
3. Otimizar o PHP 8.3
3.1 Configurar OPcache
Edite o arquivo de configuração do OPcache (localização pode variar):
sudo nano /etc/php.d/10-opcache.ini
Configure assim:
[opcache]
zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=0
opcache.memory_consumption=512
opcache.interned_strings_buffer=64
opcache.max_accelerated_files=32531
opcache.validate_timestamps=0
opcache.save_comments=1
opcache.fast_shutdown=1
opcache.revalidate_freq=0
opcache.max_file_size=0
opcache.file_cache=/tmp/opcache
3.2 Otimizar php.ini
Edite /etc/php.ini:
# Configurações de memória
memory_limit = 512M
max_execution_time = 300
max_input_time = 300
post_max_size = 64M
upload_max_filesize = 64M
# Otimizações de performance
max_input_vars = 3000
realpath_cache_size = 4096K
realpath_cache_ttl = 600
# Configurações de sessão
session.save_handler = files
session.gc_maxlifetime = 3600
session.gc_probability = 1
session.gc_divisor = 1000
# Desabilitar funções desnecessárias
disable_functions = exec,passthru,shell_exec,system,proc_open,popen
3.3 Configurar PHP-FPM (Se usando)
Se estiver usando PHP-FPM, edite /etc/php-fpm.d/www.conf:
[www]
user = apache
group = apache
listen = /run/php-fpm/www.sock
listen.owner = apache
listen.group = apache
listen.mode = 0660
pm = dynamic
pm.max_children = 50
pm.start_servers = 8
pm.min_spare_servers = 5
pm.max_spare_servers = 15
pm.max_requests = 500
php_admin_value[memory_limit] = 512M
4. Otimizar o Bando de Dados
4.1 MySQL/MariaDB – Edite /etc/my.cnf.d/server.cnf:
[mysqld]
# Configurações básicas
innodb_buffer_pool_size = 8G # 70% da RAM disponível
innodb_log_file_size = 512M
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
# Cache de consultas
query_cache_type = 1
query_cache_size = 256M
query_cache_limit = 2M
# Conexões
max_connections = 200
connect_timeout = 10
wait_timeout = 300
# Buffers
key_buffer_size = 256M
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
myisam_sort_buffer_size = 64M
# Logs
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
5. Configurar Redis Para Cache
O Redis é um cache de objetos para banco de dados:
5.1 Instalar Redis
sudo dnf install -y redis
sudo systemctl enable redis
sudo systemctl start redis
5.2 Configurar Redis – Edite /etc/redis/redis.conf:
# Configurações de memória
maxmemory 2gb
maxmemory-policy allkeys-lru
# Performance
save 900 1
save 300 10
save 60 10000
# Rede
bind 127.0.0.1
port 6379
timeout 300
# Logs
loglevel notice
logfile /var/log/redis/redis-server.log
6. MONITORAMENTO E FERRAMENTAS
6.1 Instalar Ferramentas de Monitoramento
# Instalar htop, iotop, etc.
sudo dnf install -y htop iotop nethogs glances
# Instalar ferramentas de análise web
sudo dnf install -y curl wget ab siege
6.2 Scripts de Monitoramento
Crie /usr/local/bin/server-status.sh:
#!/bin/bash
echo "=== STATUS DO SERVIDOR ==="
echo "CPU Usage:"
top -bn1 | grep "Cpu(s)" | awk '{print $2 + $4"%"}'
echo -e "\nMemória:"
free -m | awk 'NR==2{printf "%.2f%%\n", $3*100/$2 }'
echo -e "\nApache Status:"
systemctl is-active httpd
echo -e "\nPHP-FPM Status:"
systemctl is-active php-fpm
echo -e "\nMySQL Status:"
systemctl is-active mysqld
echo -e "\nRedis Status:"
systemctl is-active redis
chmod +x /usr/local/bin/server-status.sh
7. CONFIGURAÇÕES DE SEGURANÇA E FIREWALL
7.1 Configurar Firewall
# Configurar firewalld
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --reload
7.2 Configurar Fail2Ban
# Instalar fail2ban
sudo dnf install -y fail2ban
# Configurar
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
# Editar configurações
sudo nano /etc/fail2ban/jail.local
8. COMANDOS DE REINICIALIZAÇÃO
8.1 Reiniciar Todos os Serviços
#!/bin/bash
# Script para reiniciar todos os serviços
echo "Reiniciando Apache..."
sudo systemctl restart httpd
echo "Reiniciando PHP-FPM..."
sudo systemctl restart php-fpm
echo "Reiniciando MySQL..."
sudo systemctl restart mysqld
echo "Reiniciando Redis..."
sudo systemctl restart redis
echo "Limpando cache do sistema..."
sudo sync; echo 3 > /proc/sys/vm/drop_caches
echo "Todos os serviços reiniciados!"
9. TESTES DE PERFORMANCE
9.1 Comandos para Testar
# Teste de stress do Apache
ab -n 1000 -c 10 http://seu-site.com/
# Teste com Siege
siege -c 20 -t 1M http://seu-site.com/
# Verificar tempo de resposta
curl -o /dev/null -s -w "Time: %{time_total}s\n" http://seu-site.com/
# Monitorar recursos em tempo real
htop
10. MANUTENÇÃO REGULAR
10.1 Script de Limpeza Diária
Crie /usr/local/bin/daily-cleanup.sh:
#!/bin/bash
# Limpeza diária do servidor
# Limpar logs antigos
find /var/log -name "*.log" -mtime +30 -delete
# Limpar cache do OPcache
find /tmp/opcache -type f -mtime +1 -delete
# Otimizar tabelas MySQL
mysqlcheck --optimize --all-databases
# Limpar cache do sistema
sync; echo 1 > /proc/sys/vm/drop_caches
echo "Limpeza concluída em $(date)"
10.2 Agendar no Crontab
# Adicionar ao crontab
0 3 * * * /usr/local/bin/daily-cleanup.sh >> /var/log/cleanup.log 2>&1
RESUMO DAS MELHORIAS ESPERADAS
Após implementar todas essas otimizações, você deve observar:
✅ Redução de 60-80% no tempo de resposta ✅ Aumento de 3-5x na capacidade de usuários simultâneos ✅ Menor uso de CPU e memória ✅ Melhor pontuação em ferramentas como GTmetrix/PageSpeed ✅ Maior estabilidade do servidor
Tempo estimado para implementação completa: 2-3 horas




