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.xyz 的 site_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 |
在站点 restore、reinstall 和 new 创建时,列出要安装的应用。 |
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 |