Este guia ativa o painel de geolocalização do GoAccess usando as bases GeoLite2 (MaxMind). Pressupõe que o GoAccess tenha suporte ao GeoIP2, que os logs Nginx já contenham o IP real do cliente (via proxy reverso), e que você gere relatórios com um script como o update-goaccess.sh que configuramos em Manual completo – Caddy + Nginx + GoAccess ou que você tenha acesso ao arquivo de configuração global do GoAccess

1 — Conferir suporte GeoIP2 no GoAccess
goaccess -V | grep -i geoip
Saída esperada:
--enable-geoip=mmdb
2 — Criar a conta na MaxMind e gerar a License Key
- Acesse maxmind.com e crie uma conta gratuita para usar as bases GeoLite2.
- Depois de logado, localize o menu lateral de conta (Account).
- Entre em Manage license keys e gere uma nova chave (License Key) para uso nos servidores.
- Guarde o seu Account ID e a License Key, pois serão usados em
/etc/GeoIP.conf
.
3 — Instalar e atualizar as bases GeoLite2
- Habilite o componente contrib no Debian (se ainda não estiver habilitado) e atualize o índice:
sudo vim /etc/apt/sources.list
# Em cada linha que tenha "main", adicione "contrib". Ex.:
deb http://deb.debian.org/debian trixie main contrib
deb http://deb.debian.org/debian-security trixie-security main contrib
deb http://deb.debian.org/debian trixie-updates main contrib
sudo apt update
- Instale o utilitário oficial:
sudo apt install -y geoipupdate
- Edite a configuração com suas credenciais (MaxMind/GeoLite2):
sudo vim /etc/GeoIP.conf
# Preencha com sua conta MaxMind:
AccountID YOUR_ACCOUNT_ID
LicenseKey YOUR_LICENSE_KEY
EditionIDs GeoLite2-ASN GeoLite2-City GeoLite2-Country
- Baixe/atualize as bases e confirme os arquivos
.mmdb
:
sudo geoipupdate
ls -lh /var/lib/GeoIP/*.mmdb
# Você deve ver GeoLite2-ASN.mmdb, GeoLite2-City.mmdb e GeoLite2-Country.mmdb
- (Opcional, porém recomendado) Habilite atualização automática:
sudo systemctl enable --now geoipupdate.timer
systemctl status geoipupdate.timer
4 — Testar o GoAccess com GeoIP antes de integrar
Gere um HTML de teste, apontando explicitamente a base City:
goaccess /var/log/nginx/SEU_SITE.access.log --log-format=COMBINED --geoip-database=/var/lib/GeoIP/GeoLite2-City.mmdb -o /tmp/teste-geo.html
Se você está no Windows e quer abrir o HTML sem GUI no servidor, copie via PowerShell (ajuste usuário/IP):
scp seu_usuario@ip_do_servidor:/tmp/teste-geo.html "$env:USERPROFILE\Downloads\teste-geo.html"
Abra o arquivo no navegador e confirme se o painel “GEO LOCATION” aparece.
5 — Integrar ao seu fluxo (script que gera os relatórios)
Opção adotada: forçar GeoIP pelo script, deixando tudo determinístico.
- Edite seu update-goaccess.sh e adicione a flag
--geoip-database
no bloco de opções do GoAccess:
sudo vim /usr/local/bin/update-goaccess.sh
# Exemplo de bloco GOA_OPTS (ajuste ao seu script)
GOA_OPTS=(
--log-format="$LOGFMT"
--date-format='%d/%b/%Y'
--time-format='%T'
--ignore-crawlers
--no-global-config
--geoip-database=/var/lib/GeoIP/GeoLite2-City.mmdb
# as opções configuradas aqui se sobrepõem às contidas no arquivo de configuração global
)
- Regenere os relatórios:
sudo /usr/local/bin/update-goaccess.sh
- Abra seu URL de relatórios (ex.: /analytics/) e confirme o painel de geolocalização.
6 — (Alternativa) Usar o arquivo global do GoAccess
Se preferir centralizar no /etc/goaccess/goaccess.conf, basta acrescentar a linha geoip-database /var/lib/GeoIP/GeoLite2-City.mmdb no arquivo de configuração e não usar –no-global-config no script:
Com isso, chamadas do GoAccess sem a flag --geoip-database
já herdarão o GeoIP do config global. (Lembre: se você mantiver --no-global-config
no script, o arquivo global é ignorado.)
7 — Validar e observar
- Verifique o log do job/cron:
tail -n 50 /var/log/update-goaccess.log
- Se necessário, recarregue serviços auxiliares (ex.: se você publica os relatórios via Nginx/Caddy):
sudo nginx -t && sudo systemctl reload nginx || true
Qual configuração “vence” (ordem de precedência)
A prioridade é clara: valores padrão < arquivo global < variáveis de ambiente < flags na linha de comando. Ou seja, o que você colocar no script (flags) sempre prevalece. Se usar --no-global-config
, o GoAccess ignora totalmente o /etc/goaccess/goaccess.conf
.