Factorizer/Cluster ERP WikiCluster ERP Türkçe
Home / Operations

Reference

Configuration reference

Every variable of the node environment template deploy/env.example, by name with a placeholder value, mapped to its field in config/settings.py.

This page lists the variables of the node environment template deploy/env.example and maps each one to its field in src/cluster_erp/config/settings.py. It also lists the variables that the gunicorn configuration and the shell scripts read straight from the environment. Values are never shown: every value cell is the placeholder <value>. Types, defaults, and the readers of every field are in the settings reference.

Scope and source

  • Defined in: deploy/env.example (the template) and src/cluster_erp/config/settings.py (Settings).
  • Count: 88 distinct CLUSTER_ERP_ names in the template, counted with grep -oE "CLUSTER_ERP_[A-Z0-9_]+" deploy/env.example | sort -u. Of these, 77 are value lines, 6 are commented value lines, and 5 appear only inside a comment (the S3 variables). Every one of the 88 maps to a Settings field.

The Template column gives the line in deploy/env.example and whether the line is commented. The Meaning column is one sentence taken from the code comment of the field. The Source column is the field line in settings.py. A variable name is CLUSTER_ERP_ followed by the field name in upper case, read case-insensitively (src/cluster_erp/config/settings.py:64-70).

File format

  • systemd reads the file with EnvironmentFile=. A line that starts with # or ; is a comment; a # after a value becomes part of the value. A value with spaces, #, or double quotes is wrapped in single quotes (deploy/env.example:6-10).
  • The same file works as a .env file for a local run (deploy/env.example:11).
  • install.sh refuses to start the service while any value line still contains a <...> placeholder; comment lines are ignored by this check (deploy/install.sh:176-179).
  • systemd hands the file to the process only at start, so install.sh restarts instead of reloading when the file is newer than the running service (deploy/install.sh:228-243).

Variables of the template

Mode, secrets, and database

Template lines 13 to 38: the run mode, the signing and sealing keys, two optional switches, and the database connection.

Variable Setting Value Template Meaning Source
CLUSTER_ERP_DEBUG debug <value> line 13 Debug mode: reload, API docs pages, verbose logs. src/cluster_erp/config/settings.py:176
CLUSTER_ERP_MULTI_TENANT multi_tenant <value> line 15 Turns on one database per tenant with a control-plane database. src/cluster_erp/config/settings.py:82
CLUSTER_ERP_SECRET_KEY secret_key <value> line 18 Signing secret; must be set, at least 32 characters, and not weak outside debug mode. src/cluster_erp/config/settings.py:186
CLUSTER_ERP_MAIL_ENCRYPTION_KEY mail_encryption_key <value> line 23 Key that seals stored mail account secrets; required in multi-tenant mode. src/cluster_erp/config/settings.py:408
CLUSTER_ERP_CONTROL_ENCRYPTION_KEY control_encryption_key <value> line 24 Seals control-plane secrets that must be read back. src/cluster_erp/config/settings.py:362
CLUSTER_ERP_RFQ_PORTAL_TOKEN_DAYS rfq_portal_token_days <value> line 26, commented Lifetime of supplier-portal invitation links. src/cluster_erp/config/settings.py:364
CLUSTER_ERP_CONSOLE_BACKUP_ENABLED console_backup_enabled <value> line 28, commented Allows on-demand backups from the operator console. src/cluster_erp/config/settings.py:225
CLUSTER_ERP_DB_HOST db_host <value> line 31 Host of the default PostgreSQL server. src/cluster_erp/config/settings.py:72
CLUSTER_ERP_DB_USER db_user <value> line 33 Database role of the application. src/cluster_erp/config/settings.py:75
CLUSTER_ERP_DB_PASSWORD db_password <value> line 34 Password of the database role. src/cluster_erp/config/settings.py:76
CLUSTER_ERP_CONTROL_DB_NAME control_db_name <value> line 35 Name of the control-plane database. src/cluster_erp/config/settings.py:83
CLUSTER_ERP_TENANT_DB_PREFIX tenant_db_prefix <value> line 36 Prefix of tenant database names. src/cluster_erp/config/settings.py:84
CLUSTER_ERP_PUBLIC_BASE_URL public_base_url <value> line 38 Absolute base URL used in verification links; empty means relative links. src/cluster_erp/config/settings.py:292

Files and request size

Template lines 40 to 60: where the node stores files, the S3 alternative, and the request body limit.

Variable Setting Value Template Meaning Source
CLUSTER_ERP_STORAGE_BACKEND storage_backend <value> line 45 File storage: local or s3. src/cluster_erp/config/settings.py:347
CLUSTER_ERP_STORAGE_ENCRYPTION_KEY storage_encryption_key <value> line 51 Key for encryption at rest of stored files; 64 hex characters; required in multi-tenant mode. src/cluster_erp/config/settings.py:359
CLUSTER_ERP_STORAGE_PATH storage_path <value> line 52 Folder of the local storage backend. src/cluster_erp/config/settings.py:348
CLUSTER_ERP_SIGNUP_MAIL_SPOOL_DIR signup_mail_spool_dir <value> line 53 Folder of spooled verification mails. src/cluster_erp/config/settings.py:284
CLUSTER_ERP_S3_BUCKET s3_bucket <value> line 56, comment only S3 bucket; required when storage_backend is s3. src/cluster_erp/config/settings.py:349
CLUSTER_ERP_S3_ENDPOINT_URL s3_endpoint_url <value> line 57, comment only S3 endpoint for S3-compatible stores. src/cluster_erp/config/settings.py:353
CLUSTER_ERP_S3_REGION s3_region <value> line 57, comment only S3 region. src/cluster_erp/config/settings.py:350
CLUSTER_ERP_S3_ACCESS_KEY s3_access_key <value> line 58, comment only S3 access key. src/cluster_erp/config/settings.py:351
CLUSTER_ERP_S3_SECRET_KEY s3_secret_key <value> line 58, comment only S3 secret key. src/cluster_erp/config/settings.py:352
CLUSTER_ERP_MAX_REQUEST_BODY_BYTES max_request_body_bytes <value> line 60 Largest accepted request body; larger bodies get HTTP 413. src/cluster_erp/config/settings.py:345

Signup and domain verification

Template lines 62 to 74: the self-service signup door and the mail that verifies domain ownership.

Variable Setting Value Template Meaning Source
CLUSTER_ERP_SIGNUP_ENABLED signup_enabled <value> line 65 Opens or closes self-service signup on a multi-tenant node. src/cluster_erp/config/settings.py:271
CLUSTER_ERP_SIGNUP_VERIFY_EMAIL signup_verify_email <value> line 68 Requires domain verification by e-mail before provisioning. src/cluster_erp/config/settings.py:277
CLUSTER_ERP_SIGNUP_MAIL_TRANSPORT signup_mail_transport <value> line 69 Transport of verification mail: smtp or spool. src/cluster_erp/config/settings.py:283
CLUSTER_ERP_SIGNUP_SMTP_HOST signup_smtp_host <value> line 70 SMTP host for verification mail. src/cluster_erp/config/settings.py:285
CLUSTER_ERP_SIGNUP_SMTP_PORT signup_smtp_port <value> line 71 SMTP port for verification mail. src/cluster_erp/config/settings.py:286
CLUSTER_ERP_SIGNUP_SMTP_USER signup_smtp_user <value> line 72 SMTP user for verification mail. src/cluster_erp/config/settings.py:287
CLUSTER_ERP_SIGNUP_SMTP_PASSWORD signup_smtp_password <value> line 73 SMTP password for verification mail. src/cluster_erp/config/settings.py:288
CLUSTER_ERP_SIGNUP_MAIL_FROM signup_mail_from <value> line 74 Sender of verification mail. src/cluster_erp/config/settings.py:289

System mailbox

Template lines 76 to 90: the relay for mail that the application itself sends.

Variable Setting Value Template Meaning Source
CLUSTER_ERP_MAIL_RELAY_NONE mail_relay_none <value> line 83 Declares that the node sends no system mail. src/cluster_erp/config/settings.py:384
CLUSTER_ERP_SMTP_HOST smtp_host <value> line 84 SMTP host of the system mailbox; empty means not configured. src/cluster_erp/config/settings.py:394
CLUSTER_ERP_SMTP_PORT smtp_port <value> line 85 SMTP port of the system mailbox. src/cluster_erp/config/settings.py:395
CLUSTER_ERP_SMTP_USER smtp_user <value> line 86 SMTP user of the system mailbox. src/cluster_erp/config/settings.py:396
CLUSTER_ERP_SMTP_PASSWORD smtp_password <value> line 87 SMTP password of the system mailbox. src/cluster_erp/config/settings.py:397
CLUSTER_ERP_SMTP_USE_TLS smtp_use_tls <value> line 88 Uses STARTTLS for the system mailbox. src/cluster_erp/config/settings.py:398
CLUSTER_ERP_SMTP_FROM_EMAIL smtp_from_email <value> line 89 Sender address; required when smtp_host is set. src/cluster_erp/config/settings.py:399
CLUSTER_ERP_SMTP_FROM_NAME smtp_from_name <value> line 90 Sender display name. src/cluster_erp/config/settings.py:400

Backups and archives

Template lines 92 to 128: the backup role, the dump folder, retention, encryption, and the optional archives. See backups and restore.

Variable Setting Value Template Meaning Source
CLUSTER_ERP_BACKUP_DB_USER backup_db_user <value> line 100 Database role of the backup runner. src/cluster_erp/config/settings.py:216
CLUSTER_ERP_BACKUP_DB_PASSWORD_FILE backup_db_password_file <value> line 104, commented File holding the backup role's password. src/cluster_erp/config/settings.py:222
CLUSTER_ERP_BACKUP_DB_PASSWORD backup_db_password <value> line 105 Password of the backup role. src/cluster_erp/config/settings.py:217
CLUSTER_ERP_BACKUP_DIR backup_dir <value> line 106 Folder of database dumps. src/cluster_erp/config/settings.py:226
CLUSTER_ERP_WAL_ARCHIVE_DIR wal_archive_dir <value> line 113, commented Folder of the optional WAL archive. src/cluster_erp/config/settings.py:392
CLUSTER_ERP_COLD_STORAGE_DIR cold_storage_dir <value> line 114, commented Folder of the optional cold CSV export. src/cluster_erp/config/settings.py:393
CLUSTER_ERP_MAIL_RELAY_COUNTRY mail_relay_country <value> line 116, commented Country of the system mail relay. src/cluster_erp/config/settings.py:388
CLUSTER_ERP_BACKUP_KEEP backup_keep <value> line 122 Newest dumps kept per database. src/cluster_erp/config/settings.py:227
CLUSTER_ERP_BACKUP_KEEP_DAYS backup_keep_days <value> line 123 Age guard for pruning dumps; 0 is off. src/cluster_erp/config/settings.py:233
CLUSTER_ERP_BACKUP_ENCRYPTION_KEY backup_encryption_key <value> line 127 Key for encrypted dumps; required in multi-tenant mode. src/cluster_erp/config/settings.py:377
CLUSTER_ERP_PG_BIN_DIR pg_bin_dir <value> line 128 Folder of pg_dump and pg_restore. src/cluster_erp/config/settings.py:234

Processes, pool, and proxy

Template lines 130 to 148: worker count, connection pool, and trust of the reverse proxy. See service and process manager.

Variable Setting Value Template Meaning Source
CLUSTER_ERP_SERVER_WORKERS server_workers <value> line 133 Number of worker processes; clamped to 1 on Windows. src/cluster_erp/config/settings.py:149
CLUSTER_ERP_DB_POOL_SIZE db_pool_size <value> line 135 Pool size of the default engine. src/cluster_erp/config/settings.py:243
CLUSTER_ERP_DB_POOL_MAX_OVERFLOW db_pool_max_overflow <value> line 136 Extra connections the default pool may open. src/cluster_erp/config/settings.py:244
CLUSTER_ERP_DB_POOL_TIMEOUT_SECONDS db_pool_timeout_seconds <value> line 138 Seconds a request waits for a pooled connection. src/cluster_erp/config/settings.py:248
CLUSTER_ERP_TRUST_PROXY_HEADERS trust_proxy_headers <value> line 142 Lets uvicorn interpret forwarded headers from trusted proxies. src/cluster_erp/config/settings.py:158
CLUSTER_ERP_TRUSTED_PROXY_IPS trusted_proxy_ips <value> line 143 Proxies allowed to set forwarded headers; the default is the loopback address. src/cluster_erp/config/settings.py:162
CLUSTER_ERP_SERVER_ACCESS_LOG server_access_log <value> line 145 Turns on uvicorn's own access log. src/cluster_erp/config/settings.py:167
CLUSTER_ERP_SERVER_KEEP_ALIVE_SECONDS server_keep_alive_seconds <value> line 148 Seconds an idle keep-alive connection stays open. src/cluster_erp/config/settings.py:175

Storage limitation and data-subject requests

Template lines 150 to 166: retention windows and the privacy request settings. See scheduled jobs and retention.

Variable Setting Value Template Meaning Source
CLUSTER_ERP_ACTIVITY_LOG_RETENTION_DAYS activity_log_retention_days <value> line 152 Days activity-log rows are kept. src/cluster_erp/config/settings.py:640
CLUSTER_ERP_ERROR_LOG_RETENTION_DAYS error_log_retention_days <value> line 153 Days error-log rows are kept. src/cluster_erp/config/settings.py:641
CLUSTER_ERP_CONTROL_SIGNUP_RETENTION_DAYS control_signup_retention_days <value> line 156 Days an unfinished signup is kept on the control plane. src/cluster_erp/config/settings.py:718
CLUSTER_ERP_CONTROL_RATE_LIMIT_RETENTION_HOURS control_rate_limit_retention_hours <value> line 157 Hours rate-limit rows are kept. src/cluster_erp/config/settings.py:721
CLUSTER_ERP_CONTROL_ACTIONS_RETENTION_YEARS control_actions_retention_years <value> line 158 Years operator action records are kept. src/cluster_erp/config/settings.py:724
CLUSTER_ERP_SIGNUP_MAIL_SPOOL_RETENTION_DAYS signup_mail_spool_retention_days <value> line 159 Days spooled verification mails are kept. src/cluster_erp/config/settings.py:727
CLUSTER_ERP_PRIVACY_RESPONSE_DAYS privacy_response_days <value> line 163 Days within which a data-subject request must be answered. src/cluster_erp/config/settings.py:733
CLUSTER_ERP_PRIVACY_ANONYMISED_MARKER privacy_anonymised_marker <value> line 166 Value written over identifying fields on anonymisation. src/cluster_erp/config/settings.py:737

Sessions

Template lines 168 to 175: session length and the sign-in rate limit.

Variable Setting Value Template Meaning Source
CLUSTER_ERP_JWT_SESSION_HOURS jwt_session_hours <value> line 172 Lifetime of a refresh chain without "remember me". src/cluster_erp/config/settings.py:312
CLUSTER_ERP_LOGIN_RATE_LIMIT_PER_MINUTE login_rate_limit_per_minute <value> line 175 Sign-in attempts per client per minute before HTTP 429. src/cluster_erp/config/settings.py:316

Signup notice and security contact

Template lines 177 to 192: the privacy notice shown at signup and the security.txt document. See security.txt and readiness.

Variable Setting Value Template Meaning Source
CLUSTER_ERP_SIGNUP_NOTICE_DIR signup_notice_dir <value> line 183 Folder of the privacy notice shown before signup. src/cluster_erp/config/settings.py:305
CLUSTER_ERP_SIGNUP_NOTICE_VERSION signup_notice_version <value> line 184 Version recorded with every notice acceptance. src/cluster_erp/config/settings.py:306
CLUSTER_ERP_SECURITY_CONTACT security_contact <value> line 190 Contact of /.well-known/security.txt; empty answers 404. src/cluster_erp/config/settings.py:296
CLUSTER_ERP_SECURITY_POLICY_URL security_policy_url <value> line 191 Policy URL in security.txt. src/cluster_erp/config/settings.py:297
CLUSTER_ERP_SECURITY_EXPIRES_DAYS security_expires_days <value> line 192 Days until the Expires field of security.txt. src/cluster_erp/config/settings.py:298

Request cost and analytics

Template lines 194 to 208: caching of permissions, list counting, and the analytics summary loop.

Variable Setting Value Template Meaning Source
CLUSTER_ERP_AUTH_CACHE_SECONDS auth_cache_seconds <value> line 197 Seconds a request may reuse cached permissions and policies. src/cluster_erp/config/settings.py:320
CLUSTER_ERP_LIST_COUNT_CAP list_count_cap <value> line 201 Lists count matching rows up to this cap; 0 means exact counts. src/cluster_erp/config/settings.py:324
CLUSTER_ERP_ANALYTICS_SUMMARY_REFRESH_SECONDS analytics_summary_refresh_seconds <value> line 207 Interval of the summary-cell refresh; 0 turns it off. src/cluster_erp/config/settings.py:530
CLUSTER_ERP_ANALYTICS_SUMMARY_REBUILD_MINUTES analytics_summary_rebuild_minutes <value> line 208 Interval of a full summary-cell rebuild. src/cluster_erp/config/settings.py:533

First administrator

Template lines 210 to 213: where a generated first password is written.

Variable Setting Value Template Meaning Source
CLUSTER_ERP_BOOTSTRAP_PASSWORD_FILE bootstrap_password_file <value> line 213 File that receives a generated first password. src/cluster_erp/config/settings.py:205

Residency, console origins, and regions

Template lines 215 to 244: the node's country, the country nodes, the console origins, and the data regions. See data residency check.

Variable Setting Value Template Meaning Source
CLUSTER_ERP_NODE_COUNTRY node_country <value> line 221 ISO 3166-1 alpha-2 country this node serves; empty means no residency policy. src/cluster_erp/config/settings.py:111
CLUSTER_ERP_COUNTRY_NODES country_nodes <value> line 225 JSON object mapping countries to their node base URLs. src/cluster_erp/config/settings.py:114
CLUSTER_ERP_CONSOLE_ORIGINS console_origins <value> line 238 Comma list of https origins allowed to read the fleet endpoint from a browser. src/cluster_erp/config/settings.py:122
CLUSTER_ERP_REGIONS regions <value> line 243 Comma list of region codes; the first is the default. src/cluster_erp/config/settings.py:93
CLUSTER_ERP_REGION_DB_URLS region_db_urls <value> line 244 JSON object naming the database server of each non-default region. src/cluster_erp/config/settings.py:94

Licensing and operator console

Template lines 246 to 269: the licence verification key and the first operator account. See operator console.

Variable Setting Value Template Meaning Source
CLUSTER_ERP_LICENSE_PUBLIC_KEY license_public_key <value> line 253 Public key that license files must be signed with; empty disables licensing. src/cluster_erp/config/settings.py:569
CLUSTER_ERP_VENDOR_ADMIN_USERNAME vendor_admin_username <value> line 258 First operator account created at boot when none exists. src/cluster_erp/config/settings.py:126
CLUSTER_ERP_VENDOR_ADMIN_PASSWORD vendor_admin_password <value> line 259 Password of that first operator account. src/cluster_erp/config/settings.py:127
CLUSTER_ERP_VENDOR_REQUIRE_TOTP vendor_require_totp <value> line 264 Requires a second factor for every operator sign-in. src/cluster_erp/config/settings.py:131
CLUSTER_ERP_VENDOR_ALLOWED_IPS vendor_allowed_ips <value> line 269 Addresses allowed to reach the operator console API. src/cluster_erp/config/settings.py:134

Variables read by gunicorn and the scripts

These names are read straight from the environment by deploy/gunicorn.conf.py or by shell scripts. The first five are also Settings fields; the others are not.

Variable Value Reader Meaning Source
CLUSTER_ERP_SERVER_HOST <value> gunicorn Bind address of the gunicorn master. deploy/gunicorn.conf.py:26
CLUSTER_ERP_SERVER_PORT <value> gunicorn Bind port of the gunicorn master. deploy/gunicorn.conf.py:26
CLUSTER_ERP_SERVER_WORKERS <value> gunicorn Worker count; 0 or unset means one per processor core, at most eight. deploy/gunicorn.conf.py:29-30
CLUSTER_ERP_SERVER_KEEP_ALIVE_SECONDS <value> gunicorn Idle keep-alive seconds of the workers. deploy/gunicorn.conf.py:46
CLUSTER_ERP_TRUSTED_PROXY_IPS <value> gunicorn Peers whose forwarded headers gunicorn accepts. deploy/gunicorn.conf.py:48-49
CLUSTER_ERP_BACKUP_ENCRYPTION_KEY_FILE <value> crypto_at_rest, WAL and CSV scripts File holding the backup key for scripts that run outside the service. src/cluster_erp/core/crypto_at_rest.py:155, scripts/backup/pg_wal_archive.sh:28-40
CLUSTER_ERP_COLD_RETENTION_DAYS <value> cold CSV export Days a CSV export folder is kept. scripts/backup/pg_cold_storage_export.sh:44
CLUSTER_ERP_HOME <value> backup scripts Checkout folder the scripts change into. scripts/backup/pg_full_backup.sh:27
CLUSTER_ERP_PYTHON <value> backup scripts Python interpreter that runs the product runner. scripts/backup/pg_full_backup.sh:28
CLUSTER_ERP_REPO_URL <value> install.sh Repository address; otherwise the origin of the existing checkout is used. deploy/install.sh:47-54
CLUSTER_ERP_ADMIN_CIDR <value> bootstrap-node.sh Networks allowed to reach SSH; the --admin-cidr flag overrides it. deploy/bootstrap-node.sh:28-30

Constraints and validation

Settings validates the loaded values and refuses to start when a rule fails (src/cluster_erp/config/settings.py:737-834):

  • Region codes match [a-z0-9-]{2,8}; CLUSTER_ERP_REGION_DB_URLS names only known regions; every non-default region has a server (src/cluster_erp/config/settings.py:748-755).
  • CLUSTER_ERP_NODE_COUNTRY is a two-letter code, and CLUSTER_ERP_COUNTRY_NODES lists the node's own country (src/cluster_erp/config/settings.py:756-767).
  • CLUSTER_ERP_MULTI_TENANT=true together with CLUSTER_ERP_DEBUG=true is refused (src/cluster_erp/config/settings.py:768-772).
  • The secret key must not be the default outside debug mode, must have at least 32 characters, and must not be weak outside debug mode (src/cluster_erp/config/settings.py:773-806).
  • In multi-tenant mode the storage, backup, and mail encryption keys are required (src/cluster_erp/config/settings.py:807-823).
  • The storage and backup keys must parse as 32 bytes of hex (src/cluster_erp/config/settings.py:824-829).
  • CLUSTER_ERP_S3_BUCKET is required with the s3 backend; CLUSTER_ERP_SMTP_FROM_EMAIL is required when CLUSTER_ERP_SMTP_HOST is set (src/cluster_erp/config/settings.py:830-837).
  • CLUSTER_ERP_CONSOLE_ORIGINS entries must be https origins, and CLUSTER_ERP_COUNTRY_NODES must be a JSON object of two-letter codes (src/cluster_erp/config/settings.py:867-898).

Discrepancies

Terms introduced

Term Code identifier Definition Turkish term Source
environment template deploy/env.example The file copied to a new node as its environment file, with every site value as a <...> placeholder. ortam şablonu deploy/install.sh:171-175

Verified against commit 92f8051 on 2026-11-13.

Verified against commit 92f8051 · 2026-11-13