Configuration
Frappe sites can share the same application server, each behind different database solutions, configurations and locations, with different granularities via the Site Config in Bench.
The Site Config stores all site-related information, from the site's Database details to the custom domains that point to it. Through the Site Configuration, we can define the key, value pairs that may change the behaviour of Frappe and your Frappe Apps.
Site Config
site_config.json
stores the global configuration for a particular site and is present in the site directory. The file is created and populated automatically by Frappe. As this depends on Frappe, the default settings or behaviour may also change depending on any updates.
{
"db_name": "frappe_database_name",
"db_password": "frappe_database_password",
"admin_password": "admin_password",
}
Note: This file is considered to contain important information related to a site's state and could prove troublesome in case of loss of config files or corruption. It is backed up periodically along with the database backups in vanilla setups.
Common Site Config
common_site_config.json
stores configuration shared by your bench. Actions performed at the Bench level are generally related to this config. The config keys defined may be used to alter behaviour of bench level operations or impact all the sites on your bench, considering the config value precedence.
This file is automatically generated and managed by the Bench CLI. Changes in this file may affect change in the behaviour of your Frappe setups depending on your system settings and Bench CLI's version.
{
"background_workers": 1,
"developer_mode": true,
"dns_multitenant": true,
"file_watcher_port": 6789,
"frappe_user": "frappe",
"gunicorn_workers": 2,
"maintenance_mode": 0,
"pause_scheduler": 0,
"redis_cache": "redis://localhost:13000",
"redis_cache_sentinel_enabled": 1,
"redis_cache_sentinels": [
"redis-cache-sentinel-1:26379",
"redis-cache-sentinel-2:26379"
],
"redis_cache_sentinel_password": "sentinelpassword",
"redis_cache_master_service": "mymaster",
"redis_cache_master_password": "masterpassword",
"redis_queue": "redis://localhost:11000",
"redis_queue_sentinel_enabled": 1,
"redis_queue_sentinels": [
"redis-queue-sentinel-1:26379",
"redis-queue-sentinel-2:26379"
],
"redis_queue_sentinel_password": "sentinelpassword",
"redis_queue_master_service": "mymaster",
"redis_queue_master_password": "masterpassword",
"redis_socketio": "redis://localhost:12000",
"scheduler_tick_interval": 120,
"serve_default_site": true,
"socketio_port": 9000,
"webserver_port": 8000,
"root_password": "MARIADB_PASSWORD",
"live_reload": true
}
Optional Settings
workers |
Allows creating custom workers. The background_workers param is optional, if not set the general background_workers will be used. Example: "workers": { "custom_worker1": { "timeout": 5000, "background_workers": 4 } } . Regenerate config and restart processes to take effect. |
redis_cache_sentinel_enabled |
If set to 1 connects to Redis sentinel in production setup |
redis_cache_sentinels |
Array of sentinel servers host/ip and ports |
redis_cache_sentinel_password |
Password to connect to sentinels |
redis_cache_master_service |
Master service to connect to |
redis_cache_master_password |
Redis master server password |
redis_queue_sentinel_enabled |
If set to 1 connects to Redis sentinel in production setup |
redis_queue_sentinels |
Array of sentinel servers host/ip and ports |
redis_queue_sentinel_password |
Password to connect to sentinels |
redis_queue_master_service |
Master service to connect to |
redis_queue_master_password |
Redis master server password |
Apart from this, you can set any keys you wish to be available for all sites.
Config Value Precedence
The value for a particular key being set in the site_config.json
will have precedence over the value defined in the common_site_config.json
. This means the key-values defined in the common config may be used as a fallback in some cases.
Imagine you want to enable the Frappe Web Logger on all the sites on your bench, except one worker.frappe.xyz because let's assume it's a very high activity site and you just don't need to be flooded with a lot of information at once. You can set enable_frappe_logger
as true
in the common_site_config.json
and set it to false
in worker.frappe.xyz's site_config.json
.
$ bench config set-common-config -c enable_frappe_logger true
$ bench --site worker.frappe.xyz set-config enable_frappe_logger false
Similarly, it is possible to have a single application server to support a number of sites, each having a different database solutions provider or location. If you choose to move all the sites on your bench to another database server, the switch may be as little as updating the values in the common_site_config.json
of your bench.
Standard Config Keys
These are some of the standard keys utilised by Frappe Framework and Bench.
Mandatory Settings
These keys are set in the site_config.json
and are generated automatically unless the values are provided during site creation.
db_type |
Database Type. Options include "mariadb" and "postgres". |
db_name |
Database Name (also used as the default database user name). |
db_password |
Database password. |
Optional Settings
admin_password |
Default Password for the standard "Administrator" User. This will be used as the password for the Administrator User for all new sites. |
allow_tests |
Setting this allows tests to be run on this site. |
allow_cors |
Enables cross-site HTTP requests. Can be set to: - a specific origin, for example: "https://example.com" - a list of origins, for example: ["https://portal.example.com", "https://shop.example.com"] - a wildcard: "*" (Not recommended for production use) |
allowed_referrers |
The domains mentioned here will be allowed to bypass CSRF if they are the referer or origin for a request |
backup_encryption_key |
Key used to encrypt/decrypt backups |
data_import_batch_size |
Batch Size for Data Import |
db_user |
From v16 onwards, specify a separate DB user name |
deny_multiple_logins |
Stop users from having more than one active session. |
deny_multiple_sessions |
Deny Multiple Sessions. |
developer_mode |
If developer mode is set, DocType changes are automatically updated in files. |
disable_async |
Disables socket.io client; the client stops polling the socket.io server. |
disable_error_snapshot |
Disable Error Snapshot. |
disable_global_search |
Disable Global Search. |
disable_scheduler |
Disable Scheduler |
disable_session_cache |
Disable Session Cache. |
disable_website_cache |
Disable Website Cache. |
encryption_key |
Key used to encrypt Passwords. This password is created automatically on a fresh site. Upon site restore, this key will have to be restored as well to be able to use existing passwords. |
enable_frappe_logger |
If set, logs basic info from the requests and saves them under ./sites/{site}/logs/frappe.web.log . |
error_report_email |
Set the default Error Report Email. |
ignore_csrf |
Ignore CSRF. |
install_apps |
Mention the list of apps to install at site restore , reinstall and on new creations. |
host_name |
The host name his is required for background jobs and print to correctly identify the site URL. The value should include protocol and port (if non-default), without a trailing slash. For example: "https://erp.example.org:2424" |
http_port |
Change the HTTP port for your Frappe Setup. |
keep_backups_for_hours |
Utilized in frappe.utils.new_backup to pass through frappe.utils.delete_temp_backups . It retains the backup files depending on their age in hours. |
local_infile |
Set Flag to allow Data from local infile for MySQL connections. |
logging |
Utilise frappe.debug_log via frappe.log to enable different levels of logging. At level 2, shows queries and results run at every action. |
maintenance_mode |
Enable maintenance mode. |
max_file_size |
Max file size allowed for file uploads. Default is 10MiB. |
max_reports_per_user |
Maximum number of Auto Email Reports which can be created by a user, default is 3. |
monitor |
If set, logs all requests and saves under ./logs/monitor.json.log . Check out monitoring under the Debugging documentation. |
mute_emails |
Stops email sending if true. |
pause_scheduler |
Pause Scheduler |
rate_limit |
Specify Rate Limits using frappe.rate_limiter . Check out the document reference rate limiting. |
robots_txt |
Path to robots.txt file to be rendered when going to frappe-site.com/robots.txt |
root_login |
Database root username. |
root_password |
Database root password. |
server_script_enabled |
Enable/Disable Server Script. |
skip_setup_wizard |
Skip Setup Wizard. |
socketio_port |
Specify Socket.IO Port. |
webserver_port |
Generally used as fallback for conf key http_port . |
app_include_js |
Inject JavaScript script by URL in /app . Must be a list of absolute URLs. |
app_include_css |
Inject CSS Stylesheet by URL in /app . Must be a list of absolute URLs. |
Remote Database Host Settings
To connect to a remote database server using SSL, you must first configure the database host to accept SSL connections. An example of how to do this is available at this tutorial by Digital Ocean. After you do the configuration, set the following three options. All options must be set for Frappe to attempt to connect using SSL.
db_host |
Database host if not localhost . |
db_port |
Specify port for your database. |
db_ssl_ca |
Full path to the ca.pem file used for connecting to a database host using ssl. Example value is "/etc/mysql/ssl/ca.pem" . |
db_ssl_cert |
Full path to the cert.pem file used for connecting to a database host using ssl. Example value is "/etc/mysql/ssl/client-cert.pem" . |
db_ssl_key |
Full path to the key.pem file used for connecting to a database host using ssl. Example value is "/etc/mysql/ssl/client-key.pem" . |
rds_db |
Grant certain privileges instead of all, while setting up a Site's database. Used in db_manager.py . |
Replica Read Only Database Host Settings
Guide to setup read operations from secondary MariaDB server in a replica setup is available at in the user guides.
read_from_replica |
To enable disable read from replica. Acceptable values are 1/0 or true/false. |
different_credentials_for_replica |
If database credentials are different on replica then set 1 else 0 |
replica_host |
IP address for repica |
replica_db_name |
Replica DB name |
replica_db_password |
Replica DB password |
Default Outgoing Email Settings
Some of the available lower level configurations for Frappe's Email module.
auto_email_id |
If set, this will be the default email for outgoing mails. |
mail_login |
is used as the second preference and "notifications@example.com" is used as fallback. |
always_use_account_email_id_as_sender |
Use Account Email ID As Sender. |
always_use_account_name_as_sender_name |
Use Account Name as Sender Name |
email_sender_name |
Email Sender Name. |
mail_server |
SMTP server hostname. |
mail_port |
STMP port. |
mail_login |
Login id for SMTP server. |
mail_password |
Password for SMTP server. |
pop_timeout |
POP Timeout. |
use_ssl |
Connect via SSL. |
use_tls |
Connect via TLS. |
Bench Configuration
These configurations are utilised by the Bench CLI and may be set differently for each bench on your system through the common site configuration.
restart_supervisor_on_update |
Restart supervisord on bench update |
restart_systemd_on_update |
Restart systemd on bench update |
release_bench |
If set, the current bench will be treated purely as a tool for performing releases. |
background_workers |
Number of workers allocated for handling the background jobs. |
dns_multitenant |
If set, turns on DNS multitenany for Bench. Used during NGINX conf generations. |
file_watcher_port |
Port number for the File Watcher |
frappe_user |
The user under which the current Bench was created. |
gunicorn_workers |
Number of Gunicorn workers. Default minimum value is 2. |
gunicorn_max_requests |
Number of requests after gunicorn workers will be restarted. Default value is 5000. |
maintenance_mode |
If set, takes sites offline and stops all background processes and scheduled jobs. Used during site migrations and bench update operations. |
pause_scheduler |
If set, pauses the scheduler for the specified sites. |
redis_cache |
Port number for the redis cache process defined in the Bench Procfile. |
redis_queue |
Port number for the redis queue process defined in the Bench Procfile. |
redis_socketio |
Port number for the redis Socket.IO process defined in the Bench Procfile. |
scheduler_tick_interval |
Job Scheduler runs a loop that enqueues all scheduled jobs pending execution once every scheduler_tick_interval seconds. This makes it possible to set the minimum frequency for scheduling jobs. Defaults to 60. |
socketio_port |
Port number for the Socket.IO process defined in the Bench Procfile. |
webserver_port |
Port number for the Frappe web server. |
live_reload |
Automatically reload Desk when assets are rebuilt. |
Integrations
Some third party integrations may require lower level configurations you may want to define for all the sites on your bench, if you're a service provider. Frappe let's you define these config settings for your integrations via the site config.
Sandbox
sandbox_api_key |
Sandbox API Key |
sandbox_api_secret |
Sandbox API Secret |
sandbox_api_password |
Sandbox API Password |
sandbox_api_username |
Sandbox API Username |
sandbox_publishable_key |
Sandbox Publishable Key |
sandbox_signature |
Sandbox Signature |
DropBox
dropbox_access_key |
Dropbox Access Key |
dropbox_broker_site |
Dropbox Broker Site |
dropbox_secret_key |
Dropbox Secret Key |
PayPal
paypal_username |
Paypal Username |
paypal_password |
PayPal Password |
paypal_signature |
Paypal Signature |
Others
google_analytics_id |
Google Analytics ID |
converted_rupee_to_paisa |
Converted Rupee To Paisa for RazorPay Settings |
Externally extending config
Sometimes people may not want to have the values for configs like db password directly hardcoded in the site config JSON. In this case, after the site is setup normally, you can install a custom app that is allowed to extend the site configuration by returning a dict of whatever values you wish to append/overwrite. The app can fetch these however desired, but something with very low latency is preferred as it'll have to run for every request to the site.
It can be configured as such (to be done after initial site setup + installation of app)
{
"extra_config": "vault.vault.conf_hook"
}
or if you have multiple
{
"extra_config": ["vault.vault.conf_hook1", "vault.vault.conf_hook2"]
}
An example of the method in a custom app would be
def conf_hook() -> dict:
password = get_password()
return {"db_password": password}
Overriding from environment
Certain config values can be overridden via environment variables.
The priority is environment -> site config -> default value (if Frappe has one configured)
Config | Environment Variable |
redis_queue |
FRAPPE_REDIS_QUEUE |
redis_cache |
FRAPPE_REDIS_CACHE |
db_type |
FRAPPE_DB_TYPE |
db_socket |
FRAPPE_DB_SOCKET |
db_host |
FRAPPE_DB_HOST |
db_port |
FRAPPE_DB_PORT |
db_user |
FRAPPE_DB_USER |
db_name |
FRAPPE_DB_NAME |
db_password |
FRAPPE_DB_PASSWORD |