配置

Frappe 站点可以共享同一个应用服务器,每个站点可以使用不同的数据库解决方案、配置和位置,并可通过 Bench 中的站点配置实现不同粒度的管理。

站点配置存储了所有与站点相关的信息,从站点的数据库详情到指向该站点的自定义域名。通过站点配置,我们可以定义可能改变 Frappe 和您的 Frappe 应用行为的键值对。

站点配置

site_config.json 存储特定站点的全局配置,位于站点目录中。该文件由 Frappe 自动创建并填充。由于这依赖于 Frappe,默认设置或行为也可能因任何更新而改变。

{
  "db_name": "frappe_database_name",
  "db_password": "frappe_database_password",
  "admin_password": "admin_password",
}

注意:此文件被视为包含与站点状态相关的重要信息,如果配置文件丢失或损坏,可能会带来麻烦。在标准设置中,它会与数据库备份一起定期备份。

通用站点配置

common_site_config.json 存储您的 bench 共享的配置。在 Bench 级别执行的操作通常与此配置相关。定义的配置键可用于改变 bench 级别操作的行为,或影响您 bench 上的所有站点,具体取决于配置值的优先级。

此文件由 Bench CLI 自动生成和管理。此文件的更改可能会影响您的 Frappe 设置的行为,具体取决于您的系统设置和 Bench CLI 的版本。

{
  "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
}

可选设置

workers 允许创建自定义 worker。background_workers 参数是可选的,如果未设置,将使用通用的 background_workers。示例:"workers": { "custom_worker1": { "timeout": 5000, "background_workers": 4 } }。重新生成配置并重启进程以生效。
redis_cache_sentinel_enabled 如果设置为 1,则在生产环境中连接到 Redis sentinel
redis_cache_sentinels sentinel 服务器主机/ IP 和端口的数组
redis_cache_sentinel_password 连接到 sentinel 的密码
redis_cache_master_service 要连接的主服务
redis_cache_master_password Redis 主服务器密码
redis_queue_sentinel_enabled 如果设置为 1,则在生产环境中连接到 Redis sentinel
redis_queue_sentinels sentinel 服务器主机/ IP 和端口的数组
redis_queue_sentinel_password 连接到 sentinel 的密码
redis_queue_master_service 要连接的主服务
redis_queue_master_password Redis 主服务器密码

除此之外,您可以设置任何希望对所有站点可用的键。

配置值优先级

site_config.json 中设置的特定键的值将优先于在 common_site_config.json 中定义的值。这意味着通用配置中定义的键值在某些情况下可以用作回退。

假设您想在 bench 上的所有站点上启用 Frappe Web Logger,但 worker.frappe.xyz 除外,因为假设它是一个高活动站点,您不需要同时被大量信息淹没。您可以在 common_site_config.json 中将 enable_frappe_logger 设置为 true,并在 worker.frappe.xyzsite_config.json 中将其设置为 false

$ bench config set-common-config -c enable_frappe_logger true
$ bench --site worker.frappe.xyz set-config enable_frappe_logger false

类似地,可以有一个应用服务器来支持多个站点,每个站点使用不同的数据库解决方案提供商或位置。如果您选择将 bench 上的所有站点迁移到另一个数据库服务器,切换可能只需更新 bench 的 common_site_config.json 中的值即可。

标准配置键

这些是 Frappe Framework 和 Bench 使用的一些标准键。

强制设置

这些键在 site_config.json 中设置,除非在站点创建期间提供了值,否则会自动生成。

db_type 数据库类型。选项包括 “mariadb” 和 “postgres”。
db_name 数据库名称(也用作默认数据库用户名)。
db_password 数据库密码。

可选设置

admin_password 标准 “Administrator” 用户的默认密码。这将用作所有新站点的 Administrator 用户的密码。
allow_tests 设置此项允许在此站点上运行测试。
allow_cors 启用跨站点 HTTP 请求。可以设置为: – 特定来源,例如:"https://example.com" – 来源列表,例如:["https://portal.example.com", "https://shop.example.com"] – 通配符:"*"(不建议用于生产环境)
allowed_referrers 此处提到的域将允许绕过 CSRF,如果它们是请求的来源或引用者
backup_encryption_key 用于加密/解密备份的密钥
data_import_batch_size 数据导入的批量大小
db_user 从 v16 开始,请指定单独的数据库用户名
deny_multiple_logins 阻止用户拥有多个活动会话。
deny_multiple_sessions 拒绝多个会话。
developer_mode 如果设置了开发者模式,DocType 的更改会自动更新到文件中。
disable_async 禁用 socket.io 客户端;客户端将停止轮询 socket.io 服务器。
disable_error_snapshot 禁用错误快照。
disable_global_search 禁用全局搜索。
disable_scheduler 禁用调度器
disable_session_cache 禁用会话缓存。
disable_website_cache 禁用网站缓存。
encryption_key 用于加密密码的密钥。此密码会在新站点上自动创建。在站点恢复时,也需要恢复此密钥才能使用现有密码。
enable_frappe_logger 如果设置,将记录请求的基本信息并保存到 ./sites/{site}/logs/frappe.web.log 下。
error_report_email 设置默认的错误报告电子邮件。
ignore_csrf 忽略 CSRF。
install_apps 在站点 restorereinstallnew 创建时,列出要安装的应用。
host_name 后台任务和打印需要此主机名来正确识别站点 URL。该值应包含协议和端口(如果不是默认端口),末尾不要带斜杠。例如:"https://erp.example.org:2424"
http_port 更改 Frappe 设置的 HTTP 端口。
keep_backups_for_hours frappe.utils.new_backup 中用于传递 frappe.utils.delete_temp_backups。它根据备份文件的年龄(以小时计)来保留备份文件。
local_infile 设置标志以允许 MySQL 连接使用本地 infile 数据。
logging 通过 frappe.log 使用 frappe.debug_log 来启用不同级别的日志记录。在级别 2,显示每次操作运行的查询和结果。
maintenance_mode 启用维护模式。
max_file_size 允许上传的最大文件大小。默认值为 10MiB。
max_reports_per_user 用户可创建的最大自动邮件报告数量,默认为 3。
monitor 如果设置,将记录所有请求并保存到 ./logs/monitor.json.log 下。请参阅调试文档中的监控部分。
mute_emails 如果为 true,则停止发送电子邮件。
pause_scheduler 暂停调度器
rate_limit 使用 frappe.rate_limiter 指定速率限制。请参阅文档中的速率限制参考。
robots_txt 访问 frappe-site.com/robots.txt 时要呈现的 robots.txt 文件路径
root_login 数据库根用户名。
root_password 数据库根密码。
server_script_enabled 启用/禁用服务器脚本。
skip_setup_wizard 跳过设置向导。
socketio_backend 指定 Socket.IO 后端服务器实现。node (default) or python
socketio_port 指定 Socket.IO 端口。
webserver_port 通常用作配置键 http_port 的回退。
app_include_js 通过 URL 在 /app 中注入 JavaScript 脚本。必须是绝对 URL 的列表。
app_include_css 通过 URL 在 /app 中注入 CSS 样式表。必须是绝对 URL 的列表。
disable_transaction_log 禁用为销售发票付款条目创建交易日志ERPNext 区域功能)。

远程数据库主机设置

要使用 SSL 连接到远程数据库服务器,必须先配置数据库主机以接受 SSL 连接。有关如何执行此操作的示例,请参阅 Digital Ocean 的教程。完成配置后,设置以下三个选项。必须设置所有选项,Frappe 才会尝试使用 SSL 连接。

db_host 数据库主机(如果不是 localhost)。
db_port 指定数据库的端口。
db_ssl_ca 用于通过 SSL 连接到数据库主机的 ca.pem 文件的完整路径。示例值为 "/etc/mysql/ssl/ca.pem"
db_ssl_cert 用于通过 SSL 连接到数据库主机的 cert.pem 文件的完整路径。示例值为 "/etc/mysql/ssl/client-cert.pem"
db_ssl_key 用于通过 SSL 连接到数据库主机的 key.pem 文件的完整路径。示例值为 "/etc/mysql/ssl/client-key.pem"
rds_db 在设置站点数据库时,授予某些特定权限而不是全部权限。在 db_manager.py 中使用。

副本只读数据库主机设置

在副本设置中,从辅助 MariaDB 服务器设置读取操作的指南可在用户指南中找到。

read_from_replica 用于启用或禁用从副本读取。可接受的值为 1/0 或 true/false。
different_credentials_for_replica 如果副本上的数据库凭据不同,则设置为 1,否则设置为 0
replica_host 副本的 IP 地址
replica_db_name 副本数据库名称
replica_db_password 副本数据库密码

默认外发邮件设置

以下是 Frappe 邮件模块中一些可用的较低级别配置。

auto_email_id 如果设置,这将是外发邮件的默认发件邮箱。
mail_login 作为第二优先选项使用,”[email protected]” 作为备用选项。
always_use_account_email_id_as_sender 使用账户邮箱 ID 作为发件人。
always_use_account_name_as_sender_name 使用账户名称作为发件人名称
email_sender_name 邮件发件人名称。
mail_server SMTP 服务器主机名。
mail_port SMTP 端口。
mail_login SMTP 服务器登录 ID。
mail_password SMTP 服务器密码。
pop_timeout POP 超时时间。
use_ssl 通过 SSL 连接。
use_tls 通过 TLS 连接。

Bench 配置

这些配置由 Bench 命令行工具使用,并且可以通过公共站点配置为系统上的每个 bench 进行不同设置。

restart_supervisor_on_update 在 bench 更新时重启 supervisord
restart_systemd_on_update 在 bench 更新时重启 systemd
release_bench 如果设置,当前 bench 将仅被视为执行发布的工具。
background_workers 分配给处理后台作业的工作进程数量。
dns_multitenant 如果设置,则为 Bench 开启 DNS 多租户功能。在生成 NGINX 配置时使用。
file_watcher_port 文件监视器的端口号
frappe_user 创建当前 Bench 的用户。
gunicorn_workers Gunicorn 工作进程数量。默认最小值为 2。
gunicorn_max_requests Gunicorn 工作进程重启前处理的请求数。默认值为 5000。
maintenance_mode 如果设置,将使站点离线并停止所有后台进程和计划任务。在站点迁移和 bench 更新操作期间使用。
pause_scheduler 如果设置,将暂停指定站点的调度器。
redis_cache Bench Procfile 中定义的 redis 缓存进程的端口号。
redis_queue Bench Procfile 中定义的 redis 队列进程的端口号。
redis_socketio Bench Procfile 中定义的 redis Socket.IO 进程的端口号。
scheduler_tick_interval 作业调度器运行一个循环,每 scheduler_tick_interval 秒将所有待执行的计划任务加入队列。这使得可以设置调度作业的最小频率。默认为 60。
socketio_port Bench Procfile 中定义的 Socket.IO 进程的端口号。
webserver_port Frappe Web 服务器的端口号。
live_reload 当资源重建时自动重新加载 Desk。

集成

如果您是服务提供商,某些第三方集成可能需要您为 bench 上的所有站点定义较低级别的配置。Frappe 允许您通过站点配置为您的集成定义这些配置设置。

沙盒

sandbox_api_key 沙盒 API 密钥
sandbox_api_secret 沙盒 API 密钥密码
sandbox_api_password 沙盒 API 密码
sandbox_api_username 沙盒 API 用户名
sandbox_publishable_key 沙盒可发布密钥
sandbox_signature 沙盒签名

DropBox

dropbox_access_key Dropbox 访问密钥
dropbox_broker_site Dropbox 代理站点
dropbox_secret_key Dropbox 密钥密码

PayPal

paypal_username PayPal 用户名
paypal_password PayPal 密码
paypal_signature PayPal 签名

其他

google_analytics_id Google Analytics ID
converted_rupee_to_paisa 为 RazorPay 设置将卢比转换为派萨

外部扩展配置

有时,用户可能不希望将数据库密码等配置值直接硬编码在站点配置 JSON 中。在这种情况下,站点正常设置后,您可以安装一个自定义应用,该应用允许通过返回一个字典来扩展站点配置,字典中包含您希望追加或覆盖的任何值。该应用可以按任何所需方式获取这些值,但最好使用低延迟的方式,因为它需要在每次请求站点时运行。

可以按如下方式进行配置(在初始站点设置和安装应用后执行)

{
    "extra_config": "vault.vault.conf_hook"
}

或者如果您有多个

{
    "extra_config": ["vault.vault.conf_hook1", "vault.vault.conf_hook2"]
}

自定义应用中该方法的一个示例是

def conf_hook() -> dict:
    password = get_password()
    return {"db_password": password}

从环境变量覆盖

某些配置值可以通过环境变量进行覆盖。

优先级为:环境变量 -> 站点配置 -> 默认值(如果 Frappe 已配置了默认值)

配置 环境变量
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