🔐 Auth & TLS
Authelia access rule
File: /home/loca/dev/services/authelia/config/configuration.yml (root:root 644)
Edit procedure — stage in /tmp then install atomically:
sudo -n install -m 644 -o root -g root /tmp/configuration.yml /home/loca/dev/services/authelia/config/configuration.ymlYAML added inside access_control.rules:
- domain: "cdsr.loca.zone"
policy: one_factorThe rule sits alongside existing rules for auth.loca.zone, admin.loca.zone, omp.loca.zone, pwiz.loca.zone, trlm.loca.zone.
Why the wiki has no rule
Authelia runs with default_policy: bypass. An explicit rule for wiki.cdsr.loca.zone is intentionally omitted — the wiki remains public by omission while the app host becomes protected by explicit allowlisting.
Apply procedure
cd /home/loca/dev/services/authelia
sudo -n docker compose config
sudo -n docker compose restart
sudo -n docker compose psAuthelia v4.39.20 restarts clean on loopback 127.0.0.1:51091. Session cookie domain loca.zone, authelia_url https://auth.loca.zone, expiration 1h, inactivity 5m.
Nginx topology
File: /etc/nginx/sites-available/cdsr.loca.zone (symlinked into sites-enabled), installed from deploy/cdsr.nginx.conf.
Four server blocks after Certbot:
cdsr.loca.zone:443— reverse proxy tohttp://127.0.0.1:52224- includes
snippets/security-headers-app.conf - includes
snippets/authelia-location.conf location /protected bysnippets/authelia-authrequest.confproxy_http_version 1.1, websocket headers (Upgrade,Connection),proxy_read_timeout 86400
- includes
wiki.cdsr.loca.zone:443— static root/home/loca/dev/wikis/cdsr/current- includes
snippets/security-headers.conf - 1y immutable cache for
css|js|png|webp|ico|json|woff2?|svg|map try_files $uri $uri.html $uri/ =404
- includes
cdsr.loca.zone:80— ACME challenge from/var/www/html+ 301 to HTTPSwiki.cdsr.loca.zone:80— ACME challenge from/var/www/html+ 301 to HTTPS
TLS certificate
Single lineage cdsr.loca.zone covering both hosts:
sudo -n certbot certonly --webroot -w /var/www/html --non-interactive --agree-tos -m admin@loca.zone --cert-name cdsr.loca.zone -d cdsr.loca.zone -d wiki.cdsr.loca.zoneExpiry: 2026-11-17, auto-renew scheduled. Certs at /etc/letsencrypt/live/cdsr.loca.zone/{fullchain,privkey}.pem.
If a partial lineage already exists, rerun with the same --cert-name and --expand instead of minting a second lineage.
sudo -n nginx -t emits a harmless pre-existing ssl_stapling warning about flxr.loca.zone — expected and safe to ignore.
Proof commands
# app host — unauthenticated redirect into Authelia
curl -sSI https://cdsr.loca.zone/
# -> HTTP/1.1 302
# -> Location: https://auth.loca.zone/?rd=https%3A%2F%2Fcdsr.loca.zone%2F&rm=HEAD
# wiki host — public, no auth redirect
curl -sSI https://wiki.cdsr.loca.zone/
# -> HTTP/1.1 200
# -> serves static content directlyRollback / debug order if auth breaks
sudo -n nginx -t— config clean (ignore the pre-existing flxr ssl_stapling warning)- Confirm app 443 block includes both snippets:
include snippets/authelia-location.conflocation / { include snippets/authelia-authrequest.conf; ... }
- Confirm Authelia rule present:
grep -A2 'domain: "cdsr.loca.zone"' /home/loca/dev/services/authelia/config/configuration.yml
- Check Authelia container:
cd /home/loca/dev/services/authelia && sudo -n docker compose pscd /home/loca/dev/services/authelia && sudo -n docker compose logs --tail=50 authelia
- Prove code-server itself is healthy (bypasses all auth/TLS):
curl -sf http://127.0.0.1:52224/healthz- should return
{"status":"alive",...}when an editor session is active