Neste post explico como automatizar a atualização do módulo Brotli para servidores Nginx. Para isso, utilizo um script que pode ser executado inclusive como pré-etapa em jobs de patch de máquinas virtuais em serviços de nuvem.
O Brotli é um algoritmo de compressão de dados de código aberto, desenvolvido pelo Google, que oferece taxas de compressão significativamente melhores do que o tradicional gzip. Isso resulta em carregamentos de página mais rápidos e uma experiência de usuário superior.
Anteriormente no blog expliquei como implementar o módulo no Nginx. No entanto, como o Brotli é compilado a partir da versão instalada do servidor, isso precisa ser refeito a cada atualização do Nginx.
Até então, eu recompilava o módulo manualmente a cada atualização, mesmo com a automatização da checagem e instalação de novas versões do Nginx pelos patches da máquina virtual Compute Engine do Google Cloud.
Por várias vezes, a incompatibilidade do Brotli após a atualização do Nginx fez com que o servidor não iniciasse. Por consequência, isso já deixou o site fora do ar até a substituição do módulo por um adequado à nova versão. Além disso, havia a inconveniência da necessidade de acessar à VM via console e realizar todo o processo via comandos de terminal quando isso acontecia.
Automatizando com um script bash
Podemos integrar este script como uma pré-etapa em jobs de patch de máquinas virtuais em serviços de nuvem como Google Cloud, AWS e Azure. Também há a possibilidade de inclusão em outras rotinas programadas. Isso garante que a atualização do módulo Brotli aconteça de forma consistente e automatizada.
#!/bin/bash
# Check if Nginx is running
if ! systemctl is-active nginx; then
echo "Nginx is not running."
exit 1
fi
# Get the current Nginx version
current_nginx_version=$(sudo nginx -v 2>&1 | awk '{gsub("nginx/", "", $3); print $3}')
# Get the latest Nginx version from apt
latest_nginx_version=$(sudo apt-cache policy nginx | grep "^ Installed:" | awk '{gsub("-.*", "", $2); print $2}')
echo "Current Nginx version: $current_nginx_version"
echo "Latest Nginx version: $latest_nginx_version"
# Compare the versions
if [[ "$current_nginx_version" == "$latest_nginx_version" ]]; then
echo "Nginx is already up to date."
exit 0
fi
echo "Nginx versions are different."
echo "Rebuilding Brotli modules to fit the latest version of Nginx"
cd ~
sudo wget https://nginx.org/download/nginx-"$latest_nginx_version".tar.gz
tar zxvf nginx-"$latest_nginx_version".tar.gz
cd nginx-"$latest_nginx_version"
sudo ./configure --with-compat --add-dynamic-module=../ngx_brotli
sudo make modules
echo "Copying Brotli module to the Nginx modules folder..."
sudo cp -f ./objs/*.so /etc/nginx/modules
echo "Removing downloaded files..."
cd ~
sudo rm -rf nginx-"$latest_nginx_version".tar.gz nginx-"$latest_nginx_version"
echo "Brotli module is now ready for the latest Nginx version"
exit 0
O script realiza as seguintes tarefas:
- Verifica se o Nginx está em execução: se não estiver, encerra o script.
- Obtém a versão atual e a mais recente do Nginx: Utiliza comandos do sistema operacional para coletar informações sobre as versões instaladas e a mais recente disponível. Em seguida, exibe ambos os dados no terminal e, por consequência, no registro do job de patch.
- Compara as versões: Verifica se é necessária uma atualização do Nginx. Se a a versão instalada for a mais recente, encerra o script.
- Se uma atualização do Nginx estiver disponível, reconstrói o módulo Brotli: Gera uma nova versão do módulo Brotli compatível com a versão mais recente do servidor.
- Copia o módulo para a pasta de módulos do Nginx: Substitui o módulo antigo pelo novo.
- Limpa os arquivos temporários: Remove os arquivos baixados e utilizados durante o processo.
Portanto, antes da checagem de atualização de pacotes da VM e da possível atualização do Nginx, o script bash verificará a necessidade de recompilação do módulo Brotli. Se necessário, fará a adequação antes mesmo da instalação da nova versão do servidor, evitando problemas.
Lembre-se que a otimização do desempenho web é um fator crucial para o sucesso de qualquer site ou aplicação. Ao utilizar o algoritmo de compressão Brotli e automatizar a atualização do módulo em seus servidores Nginx, você garante uma melhor experiência do usuário, evitando interrupções, reduzindo o tempo de carregamento das páginas e melhorando o posicionamento nos resultados de busca.