Env files
Write dotenv-style env files for dbmcp
Each env file named by --env-file / DBMCP_ENV_FILE uses this format:
# Comments start with #
DBMCP_DB_BACKEND=postgres
DBMCP_DB_HOST: db.internal # KEY: VAL also works
export DBMCP_DB_USER=app # optional export prefix
DB_PASSWORD='p@ss #not a comment' # single quotes are literal
GREETING="line one\nline two" # double quotes support escapes
CERT="-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----" # quoted values may span lines
DBMCP_DB_NAME=${APP_DB:-myapp} # ${} expands from process env, then earlier keys
DBMCP_CONFIG_FILE=/srv/dbmcp.yaml # may name the config files- Unquoted values end at
#(space, hash) and are trimmed. - Single-quoted values are taken literally; double-quoted values support escapes such as
\nand\". - Unquoted and double-quoted values expand
${}against the process environment, then keys defined earlier in the same file, then earlier env files. - A bare
KEYwith no value takes its value from the process environment, else from an earlier line or an earlier env file; if none sets it, the line is skipped.
Each env file plays two roles at once:
- Its
DBMCP_*keys set settings directly, between the process environment and the config files in precedence. An empty value is unset, as everywhere. - All of its keys, whatever their name, are available to
${}in the config files, after the process environment.
Errors are reported per line without echoing the file's contents (for example line 2: key cannot contain a space).
Multiple env files
Repeat --env-file (or list several files in DBMCP_ENV_FILE) to layer env files, the way docker compose --env-file a --env-file b does:
dbmcp --env-file /srv/dbmcp/base.env --env-file /srv/dbmcp/local.env
DBMCP_ENV_FILE=/srv/dbmcp/base.env,/srv/dbmcp/local.env dbmcp- Files are read in list order, and a later file wins over an earlier one.
- A later file's
${}sees the keys of earlier files (after the process environment and its own earlier lines). - The files fold into one set of keys. A later
KEY=(empty) overwrites an earlier value with an empty one, so the setting is unset and falls through to the config files or the default, not to the earlier env file. - The process environment beats every env file.
- The last file that sets
DBMCP_CONFIG_FILEnames the config files. - Every non-empty
DBMCP_*value in every file is checked, including values a later file overwrites. - Loading stops at the first file that cannot be read or parsed, reporting all of that file's errors. The same file may be listed twice; each problem is reported once.