# Configuration ## Table of contents * [Introduction](#introduction) * [RPCAPI section](#rpcapi-section) * [enable_batch_create](#enable_batch_create) * [enable_user_create](#enable_user_create) * [enable_add_batch_job](#enable_add_batch_job) * [enable_add_api_user](#enable_add_api_user) * [DB section](#db-section) * [engine](#engine) * [polling_interval](#polling_interval) * [MYSQL section](#mysql-section) * [host](#host) * [port](#port) * [user](#user) * [password](#password) * [database](#database) * [POSTGRESQL section](#postgresql-section) * [host](#host-1) * [port](#port-1) * [user](#user-1) * [password](#password-1) * [database](#database-1) * [SQLITE section](#sqlite-section) * [database_file](#database_file) * [LANGUAGE section](#language-section) * [locale](#locale) * [METRICS section](#metrics-section) * [statsd_host](#statsd_host) * [statsd_port](#statsd_port) * [PUBLIC PROFILES and PRIVATE PROFILES sections](#public-profiles-and-private-profiles-sections) * [ZONEMASTER section](#zonemaster-section) * [max_zonemaster_execution_time](#max_zonemaster_execution_time) * [number_of_processes_for_frontend_testing](#number_of_processes_for_frontend_testing) * [number_of_processes_for_batch_testing](#number_of_processes_for_batch_testing) * [lock_on_queue](#lock_on_queue) * [age_reuse_previous_test](#age_reuse_previous_test) ## Introduction Zonemaster *Backend* is configured in `/etc/zonemaster/backend_config.ini` (Linux) or `/usr/local/etc/zonemaster/backend_config.ini` (FreeBSD). Following [Installation instructions] will create the file with factory settings. Restart the `zm-rpcapi` and `zm-testagent` daemons to load the changes made to the `backend_config.ini` file. The `backend_config.ini` file uses a file format in the INI family that is described in detail [here][File format]. Repeating a key name in one section is forbidden. Each section in `backend_config.ini` is documented below. In addition to the configuration file, some settings can configured using [environment variables][Environment Variables]. ## RPCAPI section Available keys: `enable_batch_create`, `enable_user_create`, `enable_add_batch_job`, `enable_add_api_user`. ### enable_add_batch_job Boolean value to enable the `add_batch_job` and `batch_create` methods of the API. Accepted values: `true` or `false` (or `yes` or `no`), default to `true` (enabled). **Deprecated:** The `yes`/`no` values are deprecated and will be rejected in v2026.2. Use `true`/`false` instead. ### enable_add_api_user Boolean value to enable the `add_api_user` and `user_create` method of the API. Accepted values: `true` or `false` (or `yes` or `no`), default to `false` (disabled). **Deprecated:** The `yes`/`no` values are deprecated and will be rejected in v2026.2. Use `true`/`false` instead. ### enable_batch_create An experimental alias for [enable_add_batch_job][RPCAPI.enable_add_batch_job]. ### enable_user_create An experimental alias for [enable_add_api_user][RPCAPI.enable_add_api_user]. ## DB section Available keys : `engine`, `user`, `password`, `database_name`, `database_host`, `polling_interval`. ### engine Specifies what database engine to use. The value must be one of the following, case-insensitively: `MySQL`, `PostgreSQL` and `SQLite`. This table declares what value to use for each supported database engine. Database Engine | Value ------------------|------ MariaDB | `MySQL` MySQL | `MySQL` PostgreSQL | `PostgreSQL` SQLite | `SQLite` ### polling_interval A strictly positive decimal number. Max 5 and 3 digits in the integer and fraction components respectively. Time in seconds between database lookups by Test Agent. Default value: `0.5`. ## MYSQL section Available keys : `host`, `port`, `user`, `password`, `database`. ### host An [LDH domain name] or IP address. The host name of the machine on which the MySQL server is running. ### port The port the MySQL server is listening on. Default value: `3306`. If [MYSQL.host] is set to `localhost` (but neither `127.0.0.1` nor `::1`), then the value of the [MYSQL.port] property is discarded as the driver connects using a UNIX socket (see the [DBD::mysql documentation]). ### user An ASCII-only [MariaDB unquoted identifier]. Max length [80 characters][MariaDB identifier max lengths]. The name of the user with sufficient permission to access the database. ### password A string of [US ASCII printable characters]. The first character must be neither space nor `<`. Max length 100 characters. The password of the configured user. ### database A US ASCII-only [MariaDB unquoted identifier]. Max length [64 characters][MariaDB identifier max lengths]. The name of the database to use. ## POSTGRESQL section Available keys : `host`, `port`, `user`, `password`, `database`. ### host An [LDH domain name] or IP address. The host name of the machine on which the PostgreSQL server is running. ### port The port the PostgreSQL server is listening on. Default value: `5432`. ### user A US ASCII-only [PostgreSQL identifier]. Max length 63 characters. The name of the user with sufficient permission to access the database. ### password A string of [US ASCII printable characters]. The first character must be neither space nor `<`. Max length 100 characters. The password of the configured user. ### database A US ASCII-only [PostgreSQL identifier]. Max length 63 characters. The name of the database to use. ## SQLITE section Available keys : `database_file`. ### database_file An absolute path. The full path to the SQLite main database file. ## LANGUAGE section The LANGUAGE section has one key, `locale`. ### locale A string representing a space-separated list of one or more `locale tags`. Each tag consists of a two-lowercase-letter language code, an underscore character, and a two-uppercase-letter country code (i.e. it matches the regular expression `/^[a-z]{2}_[A-Z]{2}$/`). Each `locale tag` must have a unique language code. Default value: `en_US`. #### Design The language code of a `locale tag` is intended to be an [ISO 639-1] code. The country code is intended to be an [ISO 3166-1 alpha-2] code. A `locale tag` is a locale setting for the available translation of messages without ".UTF-8", which is implied. #### Usage Removing a language from the configuration file just blocks that language from being allowed. English is the Zonemaster default language, but it can be blocked from being allowed by RPC-API by including some `locale tag` in the configuration, but none starting with language code for English ("en"). #### Out-of-the-box support The default installation and configuration supports the following languages. Language | Locale tag value | Language code | Locale value used ---------|------------------|---------------|------------------ Danish | da_DK | da | da_DK.UTF-8 English | en_US | en | en_US.UTF-8 Spanish | es_ES | es | es_ES.UTF-8 Finnish | fi_FI | fi | fi_FI.UTF-8 French | fr_FR | fr | fr_FR.UTF-8 Norwegian| nb_NO | nb | nb_NO.UTF-8 Slovenian| sl_SI | sl | sl_SI.UTF-8 Swedish | sv_SE | sv | sv_SE.UTF-8 Setting in the default configuration file: ``` locale = da_DK en_US es_ES fi_FI fr_FR nb_NO sl_SI sv_SE ``` #### Installation considerations If a new `locale tag` is added to the configuration then the equivalent MO file should be added to Zonemaster-Engine at the correct place so that gettext can retrieve it, or else the added `locale tag` will not add any actual language support. The MO file should be created for the `language code` of the `locale tag` (see the table above), not the entire `locale tag`. E.g. if the `locale` configuration key includes "sv_SE" then a MO file for "sv" should be included in the installation. Use of MO files based on the entire `locale tag` is *deprecated*. See the [Zonemaster-Engine share directory] for the existing PO files that are converted to MO files during installation. (Here we should have a link to documentation instead.) Each locale set in the configuration file, including the implied ".UTF-8", must also be installed or activate on the system running the RPCAPI daemon for the translation to work correctly. ## METRICS section ### statsd_host An [LDH domain name] or IP address. The host name of the machine on which the StatsD receiver is running. Leave unspecified to disable the metrics. Note that this feature requires the `Net::Statsd` module to be installed. ### statsd_port The port the StatsD receiver is listening on. Default value: `8125`. ## PUBLIC PROFILES and PRIVATE PROFILES sections The PUBLIC PROFILES and PRIVATE PROFILES sections together define the available [profiles]. Keys in both sections are `profile names`, and values are absolute file system paths to [profile JSON files]. The key must conform to the character limitation specified for `profile name` as specified in the API document [Profile name section]. Keys that only differ in case are considered to be equal. Keys must not be duplicated between or within the sections, and the key `default` must not be present in the PRIVATE PROFILES section. There is a `default` profile that is special. It is always available even if not specified. If it is not explicitly mapped to a profile JSON file, it is implicitly mapped to the [Zonemaster Engine default profile]. Each profile JSON file contains a (possibly empty) set of overrides to the *Zonemaster Engine default profile*. Specifying a profile JSON file that contains a complete set of profile data is equivalent to specifying a profile JSON file with only the parts that differ from the *Zonemaster Engine default profile*. Specifying a profile JSON file that contains no profile data is equivalent to specifying a profile JSON file containing the entire *Zonemaster Engine default profile*. ## ZONEMASTER section The ZONEMASTER section has several keys : * max_zonemaster_execution_time * number_of_processes_for_frontend_testing * number_of_processes_for_batch_testing * lock_on_queue * age_reuse_previous_test ### max_zonemaster_execution_time A strictly positive integer. Max length 5 digits. Time in seconds before reporting an unfinished test as failed. Default value: `600`. ### number_of_processes_for_frontend_testing A strictly positive integer. Max length 5 digits. Number of processes allowed to run in parallel (added with `number_of_processes_for_batch_testing`). Default value: `20`. Despite its name, this key does not limit the number of process used by the frontend, but is used in combination of `number_of_processes_for_batch_testing`. ### number_of_processes_for_batch_testing A non-negative integer. Max length 5 digits. Number of processes allowed to run in parallel (added with `number_of_processes_for_frontend_testing`). Default value: `20`. Despite its name, this key does not limit the number of process used by any batch pool of tests, but is used in combination of `number_of_processes_for_frontend_testing`. ### lock_on_queue A non-negative integer. Max length 5 digits. A label to associate a test to a specific Test Agent. Default value: `0`. ### age_reuse_previous_test A strictly positive integer. Max length 5 digits. The shelf life of a test in seconds after its creation. Default value: `600`. If a new test is requested for the same zone name and parameters within the shelf life of a previous test result, that test result is reused. Otherwise a new test request is enqueued. [API documentation]: ../using/backend/api.md [DBD::mysql documentation]: https://metacpan.org/pod/DBD::mysql#host [Default JSON profile file]: https://github.com/zonemaster/zonemaster-engine/blob/master/share/profile.json [Environment Variables]: backend-environment-variables.md [File format]: https://metacpan.org/pod/Config::IniFiles#FILE-FORMAT [ISO 3166-1 alpha-2]: https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2 [ISO 639-1]: https://en.wikipedia.org/wiki/ISO_639-1 [Installation instructions]: ../installation/zonemaster-backend.md [Language tag]: ../using/backend/api.md#language-tag [LDH domain name]: https://datatracker.ietf.org/doc/html/rfc3696#section-2 [MariaDB identifier max lengths]: https://mariadb.com/kb/en/identifier-names/#maximum-length [MariaDB unquoted identifier]: https://mariadb.com/kb/en/identifier-names/#unquoted [MYSQL.host]: #host [MYSQL.port]: #port [PostgreSQL identifier]: https://www.postgresql.org/docs/current/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS [Profile JSON files]: profiles.md [Profile name section]: ../using/backend/rpcapi-reference.md#profile-name [Profiles]: https://github.com/zonemaster/zonemaster-backend/blob/master/docs/Architecture.md#profile [RPCAPI.enable_add_api_user]: #enable_add_api_user [RPCAPI.enable_add_batch_job]: #enable_add_batch_job [RPCAPI.enable_batch_create]: #enable_batch_create [RPCAPI.enable_user_create]: #enable_user_create [SQLITE.database_file]: #database_file [US ASCII printable characters]: https://en.wikipedia.org/wiki/ASCII#Printable_characters [Zonemaster-Engine share directory]: https://github.com/zonemaster/zonemaster-engine/tree/master/share [Zonemaster::Engine::Profile]: https://metacpan.org/pod/Zonemaster::Engine::Profile#PROFILE-PROPERTIES [Zonemaster Engine default profile]: profiles.md#default-profile