Administration settings¶
Platform behavior is controlled almost entirely through environment
variables read by saas.provisioner, rather than an in-app settings
screen. This page is the reference for what to set and why.
Backend selection¶
Variable |
Default |
Notes |
|---|---|---|
|
|
Used when an instance has no explicit |
Kubernetes backend¶
Variable |
Default |
Notes |
|---|---|---|
|
|
Shared Postgres service |
|
|
|
|
|
Used for both the filestore and custom-addons PVCs |
|
|
Fixed (not environment-configurable) Kubernetes constants worth knowing:
namespace prefix saas-, ingress class alb, image pull policy
IfNotPresent, pod UID/GID 100/101, pod-exec timeout 300s with 5
retries at 5s apart.
Docker backend¶
Variable |
Required |
Notes |
|---|---|---|
|
No ( |
Created automatically if missing |
|
No (defaults to the same image as K8s) |
|
|
No ( |
|
|
No ( |
|
|
Yes |
Absolute path on the Docker host’s own filesystem — not a path inside the platform Odoo container. Raises immediately if unset. |
|
Yes |
Same host-filesystem caveat as above |
|
Yes |
Where per-tenant |
|
Yes, for DNS |
Public IP or hostname used for the Cloudflare A/CNAME record |
|
No ( |
Why these paths are so strict about “host filesystem”
The platform Odoo module itself runs inside a container. Every
docker_client.containers.run() call in the provisioner talks to the
host’s Docker daemon (over the mounted docker.sock), so any volume
bind-mount source has to be a real path on the host — not a path that
happens to exist inside the platform container. Reusing
FILESTORE_BASE_PATH (used elsewhere for host resource checks, evaluated
inside the platform container’s own mount namespace) for a Docker bind
mount would silently mount the wrong location. This is why the provisioner
creates tenant directories via a throwaway container rather than
os.makedirs() directly.
Cloudflare¶
Variable |
Required |
|---|---|
|
Yes — raises immediately if missing |
|
Yes — raises immediately if missing |
See Domains for what these are used for.