Container Environment
Generate probod configuration from environment variables with the official container image
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.
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.