Backend configuration
The backend reads its configuration from an env file, pointed to by the DATAFEEDER_CONFIG environment variable
(defaults to <datadir>/datafeeder/datafeeder.env when unset), falling back to defaults defined in
src/core/config.py. See apps/backend/datafeeder.env for a starting point.
Precedence
Settings are resolved by Settings.settings_customise_sources in src/core/config.py. For a given setting, the
first source below that provides a value wins — sources further down are only used to fill in what's still
unset:
- geOrchestra
default.properties(<datadir>/default.properties) — flatkey=valuefile managed by ops/deployment tooling. Matched by field name or by the geOrchestra-style aliases noted in the table below (e.g.pgsqlHostforPOSTGRES_DATAFEEDER_HOST). Highest priority: if it sets a value, nothing else can override it. - Environment variables (real process/container env, including the same aliases, e.g.
POSTGRES_HOST). - This
.envfile (DATAFEEDER_CONFIG, or<datadir>/datafeeder/datafeeder.envif unset). - Init/keyword arguments passed directly to
Settings(...)in Python (mainly used in tests). - Secret files (pydantic-settings file-based secrets, e.g. Docker/Kubernetes secrets). Lowest priority; not
currently wired up (no
secrets_dirconfigured), so this source has no effect today.
Once a value is resolved, ${VAR}-style references inside it are expanded against the process environment
(expand_env_vars validator), and any unset POSTGRES_DATA_* setting falls back to its POSTGRES_DATAFEEDER_*
counterpart.
Key settings
| Setting | Purpose |
|---|---|
PROJECT_NAME |
Human readable name of the application |
ENVIRONMENT |
Deployment environment (local, staging, production); controls how strictly secrets are validated |
BACKEND_INTERNAL_URL |
Internal URL of the backend, as reachable by other services (server side) |
DATA_PUBLIC_URL |
Public base URL of the published data service (GeoServer), shown to users |
DATAHUB_PUBLIC_URL |
Public URL template of a dataset in Datahub, with {metadata_id} substituted |
METADATA_PUBLIC_URL |
Public base URL of the metadata catalog (GeoNetwork), shown to users |
DATADIR_PATH |
Path to the geOrchestra datadir used by the application |
POSTGRES_DATAFEEDER_HOST/PORT/USER/PASSWORD/DB |
Datafeeder's own database (the datafeeder schema: IntegrityLink records, schedules, etc.) |
POSTGRES_DATA_HOST/PORT/USER/PASSWORD/DB |
Database used for staging and final tables. Defaults to the same values as above if unset |
SOURCE_DATABASES |
JSON map of {name: SQLAlchemy URI} for the Database source type — see adding a source database |
USE_ORG_SCHEMA |
When true, final tables are written to a schema named after the org's short name instead of the shared data schema |
GEOSERVER_INTERNAL_URL / GEOSERVER_USER / GEOSERVER_PASSWORD |
GeoServer REST endpoint used for layer publication. URL MUST BE THROUGH THE GATEWAY in order to use authentication |
GEONETWORK_INTERNAL_URL / GEONETWORK_USERNAME / GEONETWORK_PASSWORD |
GeoNetwork endpoint used for metadata records URL MUST BE THROUGH THE GATEWAY in order to use authentication |
GEONETWORK_XSRF_TOKEN |
XSRF token sent to GeoNetwork (any UUID is accepted) |
GN_SYNC_MODE |
ORG or ROLE — which geOrchestra group flavor GeoNetwork groups are synced from |
METADATA_DEFAULT_GROUP_NAME |
Default GeoNetwork group name used when publishing metadata |
CONSOLE_INTERNAL_URL |
Internal URL of the geOrchestra console |
METADATA_GROUPS_LABEL_FILTER_REGEX |
Regex used to filter metadata groups shown in the authorization UI |
DATA_GROUPS_LABEL_FILTER_REGEX |
Regex used to filter data groups shown in the GeoServer authorization UI |
AIRFLOW_INTERNAL_URL / AIRFLOW_USERNAME / AIRFLOW_PASSWORD |
Airflow REST API used to trigger and monitor DAG runs |
TASK_EXECUTOR |
Task execution engine. Only AIRFLOW is supported today |
ACCESS_TOKEN_EXPIRE_MINUTES |
Lifetime of issued access tokens, in minutes |
ENCRYPTION_KEY |
Encrypts sensitive data at rest (e.g. HTTP Basic Auth credentials for FTP/URL sources) |
SECRET_KEY |
Signs internal auth tokens used between the backend and Airflow callbacks |
PROJECTIONS |
JSON list of {value, label} projections offered to users in the transformation step |
TMP_UPLOAD_PATH |
Local scratch directory used while a file upload is being staged |
BACKEND_CORS_ORIGINS / FRONTEND_HOST |
CORS configuration for the frontend origin(s) |
RECURRENCE_EXECUTION_HOUR |
Hour of day (0-23) at which daily/weekly/monthly/yearly recurring imports run |
Secrets
SECRET_KEY, POSTGRES_DATAFEEDER_PASSWORD and ENCRYPTION_KEY must not be left at their default/placeholder
value outside of local environment: the backend refuses to start otherwise.
Database migrations
The backend owns its schema through Alembic. On make run-backend, migrations are applied automatically
(uv run alembic upgrade head) before starting the API server.