- Site values for the helmfile (
deploy/selfhost/environments/default.yaml, copied to your own file). They describe the site and are turned into values for each chart. - Chart values of
deploy/helm/atoll. The helmfile sets them indeploy/selfhost/values/atoll.yaml.gotmpl; override any of them withatoll.valuesin your site file.
Site values (helmfile)
Chart values
Values of the chart indeploy/helm/atoll. Settings map to the server’s environment variables; see values.yaml for every key.
Server permissions, by namespace:
Feature settings
Each platform feature reads its ownATOLL_<AREA>_* variables. The chart passes them through without knowing
them, so new settings need no chart change:
config key without the area’s prefix, which catches typos.
Panel host
The panel signs in with theatoll_session cookie, set host-only on the panel host (Secure when
urls.panel is https), and calls /api on that same host. Two rules follow:
- The panel host (and the API host) must not be
urls.appsDomainor below it. Apps under the wildcard run user code and could set cookies for a parent domain they share with the panel. The chart fails the install otherwise. Prefer an apps domain on a different registrable domain altogether. - If the panel gets its own host (
urls.paneldifferent fromurls.public), the chart adds it to theatoll-serverIngress. atoll-server serves the panel’s static files itself, so by default the whole host goes to it;ingress.panelServicecan send everything but/apito a separate Service instead.
X-Forwarded-For/-Proto (ATOLL_AUTH_TRUST_FORWARDED=true) for
client IPs (rate limits, audit) and the https scheme. That is safe because Traefik overwrites those headers
from clients it does not trust, and the atoll-server NetworkPolicy keeps everything but the controller and
the release namespace away from the API port. Build pods run untrusted code and could send any header, so they
only reach the internal port 8081, which serves the build protocol (/internal) and nothing else; /internal
in turn answers 404 on the API port.
Network policies
k3s enforces them with its built-in controller. Other clusters need a CNI that enforces NetworkPolicies.
Egress is restricted for build and app pods (untrusted code); platform components keep open egress.
Ingress controllers
Traefik is the default. Two details are handled by the chart:- Traefik ranks routers by rule length, and the wildcard rule
*.apps...is longer than short exact hosts, so the wildcardatoll-sitesIngress getsrouter.priority: 1and app Ingresses always win. - App Ingresses have TLS without a secret. A Traefik
TLSStorenameddefaultserves the wildcard certificate for them (certManager.traefikDefaultCertificate).
ingress.controller: nginx the chart adds ingress-nginx annotations (512m uploads, 300 s timeouts)
instead; set the wildcard certificate as --default-ssl-certificate. ingress-nginx no longer gets security
fixes, so prefer Traefik.