v0.8.1 · aggiornata · GitHub

Installazione

Requisiti: Go 1.25+ solo se compili dai sorgenti. Tutti gli altri metodi forniscono un binario statico (CGO_ENABLED=0) per Linux / macOS / Windows su amd64, arm64, arm. Verifica ogni metodo subito dopo l'installazione.

Verifica rapida (tutti i metodi)
Il binario della release v0.8.1 stampa caddy-analyze version 0.8.1; le build sorgenti possono mostrare 0.8.1-dev. Se vedi command not found, verifica PATH o riapri il terminale.

Linux / macOS — install.sh

Rileva SO/architettura, scarica tar.gz + checksums.txt, verifica SHA256 e cosign facoltativo.

curl -sSfL https://raw.githubusercontent.com/lenny-ts/caddy-analyzer/main/install.sh | bash

Verifica

caddy-analyze --version
which caddy-analyze
# atteso: /usr/local/bin/caddy-analyze  e  version 0.8.1

Se /usr/local/bin non è scrivibile, lo script usa sudo mv. L'installer installa attualmente in /usr/local/bin; usa l'archivio della release o go install se ti serve una posizione utente.

Windows — install.ps1

iwr -useb https://raw.githubusercontent.com/lenny-ts/caddy-analyzer/main/install.ps1 | iex

Verifica

caddy-analyze --version
# close and re-open PowerShell if PATH was updated
Get-Command caddy-analyze | Format-List
# expected: Source  C:\Users\YOU\AppData\Local\caddy-analyze\caddy-analyze.exe
Nota
Richiede PowerShell 5.1+. Lo script antepone %LOCALAPPDATA%\caddy-analyze al PATH utente: riapri il terminale perché venga applicato.

Toolchain Go

go install github.com/lenny-ts/caddy-analyzer/cmd/caddy-analyze@latest

Verifica

caddy-analyze --version
# if "command not found", add Go bin to PATH:
export PATH="$HOME/go/bin:$PATH"
go env GOPATH
# expected: .../go/bin/caddy-analyze

Docker

Go non richiesto. Immagine: ghcr.io/lenny-ts/caddy-analyzer (Alpine, utente non-root caddy).

Pubblicata dalla v0.8.1 per linux/amd64 e linux/arm64. Usa :v0.8.1 (o :0.8.1) per fissare una release; :latest segue solo le release stabili. Le immagini delle versioni precedenti non erano pubblicate.

docker pull ghcr.io/lenny-ts/caddy-analyzer:latest
# analyze a file
docker run --rm -v /var/log/caddy:/logs ghcr.io/lenny-ts/caddy-analyzer /logs/access.log
# stream from Docker
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock ghcr.io/lenny-ts/caddy-analyzer docker://caddy

Verifica

docker run --rm ghcr.io/lenny-ts/caddy-analyzer --version
docker images ghcr.io/lenny-ts/caddy-analyzer --format "{{.Tag}} {{.Size}}"

Build locale

Richiede Git e Docker con BuildKit; Go viene eseguito nel container di build. Sostituisci la directory dei log sull'host con quella di Caddy.

git clone https://github.com/lenny-ts/caddy-analyzer.git
cd caddy-analyzer
docker build --build-arg VERSION=0.8.1-local -t caddy-analyzer:local .
docker run --rm caddy-analyzer:local --version
docker run --rm -v /var/log/caddy:/logs:ro caddy-analyzer:local /logs/access.log

Il container usa un utente non-root: i log montati devono essere leggibili da quell'utente.

Binari precompilati

Scarica da GitHub Releases. Ogni *.tar.gz (o .zip su Windows) contiene caddy-analyze. Scarica separatamente checksums.txt e firma/certificato/bundle Cosign dalla stessa release.

# Linux amd64 — il tag ha v, la versione nell'archivio no
curl -sSfL https://github.com/lenny-ts/caddy-analyzer/releases/download/v0.8.1/caddy-analyzer_0.8.1_linux_amd64.tar.gz -o /tmp/caddy-analyzer_0.8.1_linux_amd64.tar.gz
curl -sSfL https://github.com/lenny-ts/caddy-analyzer/releases/download/v0.8.1/checksums.txt -o /tmp/checksums.txt
grep caddy-analyzer_0.8.1_linux_amd64.tar.gz /tmp/checksums.txt | (cd /tmp && sha256sum -c)
tar -xzf /tmp/caddy-analyzer_0.8.1_linux_amd64.tar.gz -C /tmp && sudo mv /tmp/caddy-analyze /usr/local/bin/

Verifica

caddy-analyze --version
ls -l /usr/local/bin/caddy-analyze
# optional cosign: cosign verify-blob --certificate-identity ... --signature checksums.txt.sig checksums.txt

Systemd (demone guard)

Per usare guard come servizio. Richiede root per iptables.

sudo tee /etc/systemd/system/caddy-guard.service >/dev/null <<'EOF'
[Unit]
Description=caddy-analyzer Security Guard Daemon
Wants=network-online.target
After=network-online.target caddy.service
[Service]
Type=simple
ExecStart=/usr/local/bin/caddy-analyze guard --limit 50 --window 1m /var/log/caddy/access.log
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now caddy-guard

Verifica

La protezione IP predefinita richiede HTTPS diretto in uscita. Nelle reti limitate aggiungi --protect-self=false e gli indirizzi fidati --never-block a ExecStart, poi esegui sudo systemctl daemon-reload && sudo systemctl restart caddy-guard. Gli indirizzi amministratore remoti sono separati dagli IP del server protetti automaticamente.

systemctl status caddy-guard --no-pager
journalctl -u caddy-guard -n 20 --no-pager
# should show "guard started" and no "permission denied" on /var/log/caddy/access.log

Aggiornamento

caddy-analyze update --check   # check without installing
caddy-analyze update           # install latest (cosign + SHA256 verified)
caddy-analyze update --version v0.8.1 --force  # fissa / reinstalla

Risoluzione dei problemi

  • curl: command not found → sudo apt-get install curl oppure usa il download del binario.
  • permission denied sul log → sudo caddy-analyze … oppure sudo usermod -aG caddy $USER, poi effettua nuovamente l'accesso.
  • Proxy aziendale → imposta https_proxy prima di curl.