v0.4.8
Signedpublished August 18, 2026What changed
Added
-
install.sh --acme-ca=stagingorders certificates from Let's Encrypt's staging CA. Production allows 5 certificates per exact set of identifiers per 168h, and every test cycle that starts from an empty certificate store spends one:uninstall.sh --purgeremoves thetraefik-acmevolume, and the first install after enablinguserns-remapmoves Docker's data root to/var/lib/docker/<uid>.<gid>, orphaning the old volume just the same. Five reinstalls on one hostname exhaust the quota; Traefik then logs a 429 and serves its self-signedTRAEFIK DEFAULT CERT, which reaches the operator as an invalid-certificate warning on a host that otherwise installed cleanly. Staging certificates are untrusted, but the issuance path — DNS,:443, TLS-ALPN-01, the ACME store — is the same one, so a test install still proves it works.DEVGRAIL_ACME_CAis the env-var form; a directory URL is accepted for a private CA (pebble, an internal ACME server).Each CA keeps its own store file under the
traefik-acmevolume —acme.jsonfor production,acme-staging.jsonfor staging — becauseacme.jsonholds the registered ACME account and an account from one CA is unknown to another. That also means a staging test cannot overwrite production certificates that the rate limit would not let you re-issue, and switching back with--acme-ca=productionpicks them up again instead of re-ordering. An upgrade that names no CA keeps whichever one the prior install used, and the closing banner says plainly when certificates are coming from a non-production CA.
Container images
Installer files
Signature
One signature covers every artifact above. It is made off this host, and neither this site nor the registry behind it can check it — that is the point, and it is why verifying it catches things a checksum from the same server cannot. How to verify it.
curl -fsSL https://web-dev.trixibot.com/api/registry/releases/v0.4.8 -o release.json
# -j, not -r: -r appends a newline the signer never saw, and the check fails.
jq -j '.signature.payload' release.json > payload
jq -r '.signature.signature' release.json | base64 -d > payload.sig
openssl dgst -sha256 -verify devgrail-release.pem -signature payload.sig payload
# -> Verified OK
# The payload must name this release, so an older signed one cannot be replayed.
head -2 payload
# ...and it must name this exact file. -qxF: whole line, literal.
grep -qxF 'image devgrail-container 16 amd64 25cf3f546c4f6ac9037a544766b15cda582a0b46be74fafe27af128937303799' payload && echo "digest is covered by the signature"The signed payload — shown for reading, not for verifying
Copy this from the manifest with jq -j, never from this page: the signature covers exact bytes, and rendering here drops the trailing newline the signer included.
devgrail-release-signature-v1
release v0.4.8
asset docker-compose.yml 15 4681b04b3e2b93b79c76846b51c9e0b529dc59742311e42d77716bda482c6a9b
asset install.sh 15 b8fcfae6b2d6dcb50c8bcb51415d3e8ff2def96ca39d1f89e0476bde16d0d464
asset traefik-dynamic-http.yml 14 e344c8efd13c7d84996e2ebfbc75dcee2d995d8538c8a245c89c0e44fad0089b
asset traefik-dynamic.yml 15 d18fa561b8eb7d53b015284e0246b2d05953bf281b65269c1fae3d6883530db6
asset uninstall.sh 15 d8dc586f38e0cf33eadc126d75b303c660e970e55028f60ad4e2872c40cbaa71
image devgrail-container 16 amd64 25cf3f546c4f6ac9037a544766b15cda582a0b46be74fafe27af128937303799
image devgrail-container 16 arm64 ebf6d90c31f4a9a3783194313ae4e0ae3fe98510f53695428350040867a2cdb0
image devgrail-server 16 amd64 d247173f739df9981ed20d9a658977b7967382467e4de93700dc5cfe60ca56fe
image devgrail-server 16 arm64 d2e425fbdce0c03cfd31709fb1840a2517664e442de6f6e386795e2068ca26a6