Authelia now runs in front of Traefik, so the app was asking for a second
password at the same door. This removes its own authentication entirely
rather than layering the two.
Breaking — the server needs both files in this deploy
compose.yaml and .env are not pulled from this repository. The new image
ignores PASSWORD, and the old image refuses to start without it, so the
image and the compose file have to move together or the container dies at
startup.
Variable
Change
PASSWORD
removed — the app no longer reads it
AUTH
new, required — the Traefik middleware that authenticates the app, e.g. authelia@docker
CERTRESOLVER
new, required — the resolver issuing the certificate for HOST
The tls=true label is replaced by tls.certresolver=${CERTRESOLVER}.
Naming a resolver implies TLS, so it stays one label rather than two — and
the resolver had been carried by hand on the server since the first deploy.
What was removed
auth() and challenge() — HTTP Basic over a single shared password
throttle.go and its tests — the per-IP guess limiter and the X-Forwarded-For handling that fed it
golang.org/x/time, which existed only for that limiter
Sixty -u flags from the smoke script
routes() returns the bare mux and /healthz is an ordinary route on it.
159 insertions against 446 deletions; nothing was written to replace what
went.
What holds the app up now
Both invariants live in compose.yaml, next to comments saying why:
The router names the Authelia middleware through AUTH. Traefik takes
a router out of service when its middleware does not resolve, so an unset
or misspelt value fails shut rather than serving the app open.
The container publishes no ports. It is reachable only over the shared
proxy network. Publishing 8080 would now bypass authentication outright,
not merely TLS.
/healthz returns the version and nothing else, so it is safe to exempt in
Authelia if a monitor needs to reach it.
Why this is stronger, not weaker
The layer being deleted was one shared secret with no sessions, no second
factor and no way to revoke access for one person. Authelia does all three,
configured once for every service on the host instead of reimplemented per
app. The weaker of the two prompts was the one being kept.
Tests
TestAuth and TestHealthzSkipsAuth are replaced by a single test asserting
every route answers without credentials — a 401 from the app would now mean
authentication had crept back in. make check green; CI green on dev.
Note on the commit list
Nine of the ten commits below are already in main via #4, squash-merged
under a different SHA. They contribute nothing to the diff, which is the
auth removal alone.
Authelia now runs in front of Traefik, so the app was asking for a second
password at the same door. This removes its own authentication entirely
rather than layering the two.
## Breaking — the server needs both files in this deploy
`compose.yaml` and `.env` are not pulled from this repository. The new image
ignores `PASSWORD`, and the old image refuses to start without it, so the
image and the compose file have to move together or the container dies at
startup.
| Variable | Change |
|---|---|
| `PASSWORD` | **removed** — the app no longer reads it |
| `AUTH` | **new, required** — the Traefik middleware that authenticates the app, e.g. `authelia@docker` |
| `CERTRESOLVER` | **new, required** — the resolver issuing the certificate for `HOST` |
The `tls=true` label is replaced by `tls.certresolver=${CERTRESOLVER}`.
Naming a resolver implies TLS, so it stays one label rather than two — and
the resolver had been carried by hand on the server since the first deploy.
## What was removed
- `auth()` and `challenge()` — HTTP Basic over a single shared password
- `throttle.go` and its tests — the per-IP guess limiter and the
`X-Forwarded-For` handling that fed it
- `golang.org/x/time`, which existed only for that limiter
- Sixty `-u` flags from the smoke script
`routes()` returns the bare mux and `/healthz` is an ordinary route on it.
159 insertions against 446 deletions; nothing was written to replace what
went.
## What holds the app up now
Both invariants live in `compose.yaml`, next to comments saying why:
- **The router names the Authelia middleware through `AUTH`.** Traefik takes
a router out of service when its middleware does not resolve, so an unset
or misspelt value fails shut rather than serving the app open.
- **The container publishes no ports.** It is reachable only over the shared
proxy network. Publishing `8080` would now bypass authentication outright,
not merely TLS.
`/healthz` returns the version and nothing else, so it is safe to exempt in
Authelia if a monitor needs to reach it.
## Why this is stronger, not weaker
The layer being deleted was one shared secret with no sessions, no second
factor and no way to revoke access for one person. Authelia does all three,
configured once for every service on the host instead of reimplemented per
app. The weaker of the two prompts was the one being kept.
## Tests
`TestAuth` and `TestHealthzSkipsAuth` are replaced by a single test asserting
every route answers without credentials — a 401 from the app would now mean
authentication had crept back in. `make check` green; CI green on `dev`.
## Note on the commit list
Nine of the ten commits below are already in `main` via #4, squash-merged
under a different SHA. They contribute nothing to the diff, which is the
auth removal alone.
BREAKING CHANGE: PASSWORD is gone and AUTH and CERTRESOLVER are required.
The server's compose.yaml and .env must be updated in the same deploy — the
new image ignores PASSWORD, and the old one refuses to start without it.
Authelia now sits in front of Traefik, so the app was asking for a second
password at the same door. Two prompts, and the weaker of the two was the one
holding a single shared secret with no sessions, no MFA and no revocation.
Deleting it is the whole change: Authelia already does this properly, once,
for every service on the host.
Gone: auth(), challenge(), the whole of throttle.go and its tests, and
golang.org/x/time with them. routes() returns the bare mux, /healthz is an
ordinary route on it, and the smoke script drops sixty -u flags. Roughly 230
lines removed and nothing written to replace them.
What holds the app up now, both asserted in compose.yaml:
- The router names the Authelia middleware through AUTH. Traefik takes a
router out of service when its middleware does not resolve, so a typo or an
unset variable fails shut rather than serving the app open.
- The container still publishes no ports, so the proxy is the only thing that
can reach it. Publishing 8080 would now bypass authentication outright, not
merely TLS — the comment there says so.
certresolver replaces the bare tls=true, parameterised as CERTRESOLVER: the
server had been carrying that label by hand since the first deploy. Naming a
resolver implies tls=true, so it stays one label.
TestAuth and TestHealthzSkipsAuth are replaced by one test asserting every
route answers without credentials — a 401 from here would now mean auth had
crept back in.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Authelia now runs in front of Traefik, so the app was asking for a second
password at the same door. This removes its own authentication entirely
rather than layering the two.
Breaking — the server needs both files in this deploy
compose.yamland.envare not pulled from this repository. The new imageignores
PASSWORD, and the old image refuses to start without it, so theimage and the compose file have to move together or the container dies at
startup.
PASSWORDAUTHauthelia@dockerCERTRESOLVERHOSTThe
tls=truelabel is replaced bytls.certresolver=${CERTRESOLVER}.Naming a resolver implies TLS, so it stays one label rather than two — and
the resolver had been carried by hand on the server since the first deploy.
What was removed
auth()andchallenge()— HTTP Basic over a single shared passwordthrottle.goand its tests — the per-IP guess limiter and theX-Forwarded-Forhandling that fed itgolang.org/x/time, which existed only for that limiter-uflags from the smoke scriptroutes()returns the bare mux and/healthzis an ordinary route on it.159 insertions against 446 deletions; nothing was written to replace what
went.
What holds the app up now
Both invariants live in
compose.yaml, next to comments saying why:AUTH. Traefik takesa router out of service when its middleware does not resolve, so an unset
or misspelt value fails shut rather than serving the app open.
proxy network. Publishing
8080would now bypass authentication outright,not merely TLS.
/healthzreturns the version and nothing else, so it is safe to exempt inAuthelia if a monitor needs to reach it.
Why this is stronger, not weaker
The layer being deleted was one shared secret with no sessions, no second
factor and no way to revoke access for one person. Authelia does all three,
configured once for every service on the host instead of reimplemented per
app. The weaker of the two prompts was the one being kept.
Tests
TestAuthandTestHealthzSkipsAuthare replaced by a single test assertingevery route answers without credentials — a 401 from the app would now mean
authentication had crept back in.
make checkgreen; CI green ondev.Note on the commit list
Nine of the ten commits below are already in
mainvia #4, squash-mergedunder a different SHA. They contribute nothing to the diff, which is the
auth removal alone.
2974ffc621tocf2cb0ce0a