,

Automatize a atualização do Brotli em servidores Nginx

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:

  1. Verifica se o Nginx está em execução: se não estiver, encerra o script.
  2. 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.
  3. 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.
  4. 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.
  5. Copia o módulo para a pasta de módulos do Nginx: Substitui o módulo antigo pelo novo.
  6. 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.

Avatar de Matheus Misumoto