Container Environment
Configure the official Probo container image using PROBOD_* environment variables, required secrets, AWS secret references, and startup behavior.
The official container image uses probod-bootstrap to convert PROBOD_*
environment variables into a YAML configuration file before starting probod.
Startup behavior
Section titled “Startup behavior”CONFIG_FILE selects the generated or mounted configuration file and defaults
to /etc/probod/config.yml.
On every container start:
- When
PROBOD_ENCRYPTION_KEYis set, the entrypoint generatesCONFIG_FILEfrom the environment. Existing file content is replaced. - Otherwise, the entrypoint uses the existing
CONFIG_FILE. - Startup fails when neither source is available.
This makes PROBOD_ENCRYPTION_KEY the switch between environment-generated and
directly managed configuration.
Required inputs
Section titled “Required inputs”probod-bootstrap requires four persistent secrets:
| Variable | Purpose |
|---|---|
PROBOD_ENCRYPTION_KEY | Encrypts sensitive application data at rest |
PROBOD_AUTH_COOKIE_SECRET | Signs session cookies |
PROBOD_AUTH_PASSWORD_PEPPER | Adds a deployment secret to password hashing |
PROBOD_OAUTH2_SERVER_SIGNING_KEY | PEM RSA private key used to sign OAuth 2.0 tokens |
Generate separate random values for the first three settings and an RSA key for the signing key:
openssl rand -base64 32openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048Set these values before the first production start, keep them stable across restarts and application instances, and include them in recovery procedures.
Configure the application
Section titled “Configure the application”Set infrastructure and application values alongside the required secrets. This minimal example shows the main inputs; it is not a complete variable list.
PROBOD_BASE_URL=https://probo.example.comPROBOD_API_ADDR=0.0.0.0:8080PROBOD_API_CORS_ALLOWED_ORIGINS=https://probo.example.com
PROBOD_PG_ADDR=postgres.example.com:5432PROBOD_PG_USERNAME=probodPROBOD_PG_PASSWORD=replace-mePROBOD_PG_DATABASE=probod
PROBOD_AWS_REGION=eu-west-1PROBOD_AWS_BUCKET=probo-productionThe bootstrap process applies documented defaults, converts strings to the required types, and fails before writing the file when a required value is missing or a value cannot be parsed.
Compliance Portal TLS
Section titled “Compliance Portal TLS”Compliance Portals listen separately from the console and API because they route requests by the visitor-facing domain. Choose the mode that matches the network path for those portal requests:
| Variable value | TLS endpoint | Portal listener |
|---|---|---|
PROBOD_TRUST_CENTER_TLS_MODE=direct | Probo | PROBOD_TRUST_CENTER_HTTP_ADDR for HTTP and PROBOD_TRUST_CENTER_HTTPS_ADDR for HTTPS |
PROBOD_TRUST_CENTER_TLS_MODE=external | Trusted layer-7 proxy | PROBOD_TRUST_CENTER_HTTP_ADDR for forwarded HTTP requests |
direct is the default. It requires TCP passthrough so Probo receives TLS SNI
and can select the certificate for the requested portal domain.
Use external when a reverse proxy, ingress controller, tunnel, or hosting
platform terminates TLS. The proxy must:
- forward portal traffic to
PROBOD_TRUST_CENTER_HTTP_ADDR, notPROBOD_API_ADDR; - preserve the original
Hostheader, or overwriteX-Forwarded-Hostwith the original host; - overwrite
X-Forwarded-Protowith onehttporhttpsvalue instead of appending to a client-provided value; - prevent direct public access to the portal HTTP listener; and
- route HTTP ACME challenges under
/.well-known/acme-challenge/to the same listener.
PROBOD_TRUST_CENTER_PROXY_PROTOCOL_TRUSTED_PROXIES enables the PROXY protocol
when the upstream proxy sends it. List only the proxy source addresses or CIDR
ranges. This setting does not replace network isolation or forwarded-header
sanitization.
For custom domains, also replace the Probo Cloud default in
PROBOD_CUSTOM_DOMAINS_CNAME_TARGET with a stable hostname that routes to this
portal entry point. The value is displayed to portal administrators and used
for DNS validation. See Branding and domains.
Special input behavior
Section titled “Special input behavior”PROBOD_PG_CA_BUNDLE_PATHreads a PostgreSQL CA bundle from a file and takes precedence over the inlinePROBOD_PG_CA_BUNDLE.- When both
PROBOD_SAML_CERTIFICATEandPROBOD_SAML_PRIVATE_KEYare absent, bootstrap generates a pair. Configure a stable pair when SAML sessions must survive container replacement. - Setting a connector client ID enables that connector and makes its client secret required. Slack also requires its signing secret; Vercel also requires its integration slug.
- Comma-separated inputs are trimmed and converted to lists.
- Boolean values use
trueorfalse. Numeric durations are expressed in the unit stated in the complete reference. - PEM values must preserve their line breaks.
External secret references
Section titled “External secret references”Every value read by probod-bootstrap can be a literal or an AWS secret
reference:
| Syntax | Service |
|---|---|
awssm://<secret-id> | AWS Secrets Manager |
aws://<secret-id> | AWS Secrets Manager alias |
awsps://<parameter-name> | AWS Systems Manager Parameter Store |
PROBOD_ENCRYPTION_KEY=awssm://probo/production/encryption-keyPROBOD_AUTH_COOKIE_SECRET=awsps:///probo/production/cookie-secretSecret resolution uses the standard AWS SDK credential and region chain.
PROBOD_AWS_* configures Probo object storage; it does not authenticate secret
resolution.
Apply changes
Section titled “Apply changes”The generated file is a startup artifact, and probod does not hot-reload it.
After changing an environment variable or referenced secret, restart every
application instance and confirm that each instance starts successfully.