基准迁移

用法

bench migrate [OPTIONS]

说明

migrate 命令会将站点状态更新到当前可用的应用。它
按顺序执行一系列任务:

  • 运行 before_migrate 钩子
  • 运行应用补丁
  • 同步数据库架构和后台任务
  • 同步固定数据
  • 同步仪表盘、桌面图标和网页
  • 更新翻译
  • 为所有路由重建搜索索引
  • 运行 after_migrate 钩子

此操作还会更新相应文件的 touched_tables.json 文件,
并更新“已安装应用”DocType 中的应用版本。

参数

  • --skip-failing 跳过运行失败的补丁
  • --skip-search-index 跳过网页文档的搜索索引

示例

  1. 在现有站点上运行迁移。
bench --site {site} migrate
  1. 运行迁移时跳过为网页文档重建搜索索引
bench --site {site} migrate --skip-search-index
  1. 运行迁移时跳过任何失败的补丁。
bench --site {site} migrate --skip-failing

注意:不建议在生产环境中跳过失败的补丁

备用存放点

用法

bench drop-site [OPTIONS] SITE

说明

删除一个已有的站点。在此操作中,数据库会被删除,并且相应站点的文件夹会从 ./sites 移动到你的 Bench 上的 ./archived_sites (除非另有指定)。在此之前会先对站点进行完整备份。

选项

  • --db-root-username 具有删除数据库权限的 DBMS 用户名。
    默认为 root
  • --db-root-password DBMS 用户的密码
  • --archived-sites-path 指定站点文件夹要移动到的路径

标志

  • --no-backup 在删除站点前跳过备份
  • --force 即使遇到错误也强制删除站点

示例

  1. 通过传入 root 密码来跳过交互式提示。
bench drop-site {site} --db-root-password {db-root-pass}
  1. 在删除站点前跳过备份。
bench drop-site {site} --no-backup
  1. 将站点文件夹移动到其他文件夹,而不是标准的
    ./archived_sites。
bench drop-site {site} --archived-sites-path {path/to/archive}

创建新站点

用法

bench new-site [OPTIONS] SITE

说明

创建一个新的 Frappe 站点。此操作会在 ./sites 下创建一个新文件夹,其中将包含该站点的所有站点信息,同时还会在你的数据库管理系统中创建一个新数据库,并安装 Frappe 的所有模块和 DocType。

站点配置位于 ./sites/{site}/site_config.json 下,用于维护站点的状态信息。如需了解更多相关信息,请查看本指南。

如果站点创建因任何原因失败,系统会提示你是否要回滚所做的更改,包括创建的站点目录,以及创建的数据库和数据库用户。

选项

  • --db-name 设置新站点的数据库名称——如果未单独指定,也会用作数据库用户名
  • --db-user 从 v16 起,选择数据库用户名,或指定一个已有的用户名+密码组合
  • --db-password 设置新站点的数据库密码,或指定已有数据库用户的密码。
  • --db-type 选择新站点的数据库类型,可选值为 “postgres” 或 “mariadb”。默认为 “mariadb”
  • --db-host 设置新站点的数据库主机
  • --db-port 设置新站点的数据库端口
  • --db-root-username 指定 MariaDB 或 Postgres 的 Root 用户名
  • --db-root-password 指定 MariaDB 或 Postgres 的 Root 密码
  • --admin-password 指定新站点的管理员密码
  • --source_sql 使用 SQL 文件初始化数据库
  • --install-app 安装后安装应用

标志

  • --no-mariadb-socket 将 MariaDB 主机设置为 %,并使用 TCP/IP Socket 代替 UNIX Socket
  • --verbose 增加详细输出
  • --force 如果站点或同名数据库已存在,则强制恢复

示例

  1. 创建一个新站点。
bench new-site {site}
  1. 创建一个新的 PostgreSQL 站点。
bench new-site {site} --db-type postgres
  1. 创建一个新站点,同时跳过以下交互式提示:

    • 提交站点的 管理员 密码
    • 提交 MariaDB Root 密码
    bench new-site {site}
       --admin-password {admin-password}
       --db-root-password {mariadb-password}
    
  2. 使用非默认值和自动生成的值创建一个新站点。

bench new-site {site} --db-type {type}
   --db-name {name}
   --db-user {user}
   --db-password {pass}
   --db-host {host}
   --db-port {port}
  1. 使用具有数据库创建权限的 MariaDB 非 root 用户创建一个新站点。
bench new-site {site}
   --db-root-username {user}
   --db-root-password {pass}
  1. 创建一个新站点,并安装一个应用 (在当前 bench 中可用)。
bench new-site {site} --install-app {app}

命令参考

Frappe 和 Bench 下命令的手册,可通过 Bench 命令行界面访问。

站点命令

  1. 新建站点
  2. 删除站点
  3. 迁移
  4. 备份
  5. 重新安装
  6. 列出应用
  7. 安装应用
  8. 卸载应用
  9. 显示配置
  10. 设置配置
  11. 恢复
  12. 部分恢复

Frappe 实用命令

  1. 版本

数据库维护命令

  1. 转换数据库
  2. 精简数据库
  3. 精简数据表

翻译管理

  1. 生成 POT 文件
  2. 将 CSV 迁移为 PO
  3. 更新 PO 文件
  4. 将 PO 编译为 MO

基准 – 扩展命令行界面

除了框架自带的命令之外,Frappe 的 bench_manager 模块还会搜索
你的自定义应用中的任何命令。因此,bench 会与
对应 bench 的 Frappe 进行通信,而 Frappe 又会检查
所有应用中可用的命令。

要让你的自定义命令对 bench 可用,只需在你的父模块下创建一个 commands 模块,
并使用 click 包装器编写命令,同时定义一个
名为 commands 的变量,其中包含一组 click 函数,也就是你自己的
命令。

带有 Frappe 应用 flags 的目录结构可以这样理解:

frappe-bench
|──apps
 |── frappe
 ├── flags
 │ ├── README.md
 │ ├── flags
 │ │ ├── commands <------ commands module
 │ ├── license.txt
 │ ├── requirements.txt
 │ └── setup.py

commands 模块可以是一个单独的文件,比如 commands.py,也可以是一个
包含 __init__.py 文件的目录。对于一个名为 ‘flags’ 的自定义应用,
可以举例如下

# file_path: frappe-bench/apps/flags/flags/commands.py
import click

@click.command('set-flags')
@click.argument('state', type=click.Choice(['on', 'off']))
def set_flags(state):
 from flags.utils import set_flags
 set_flags(state=state)

commands = [
 set_flags
]

并且在当前 bench 的上下文中,这个命令可以简单地这样执行

➜ bench set-flags
Flags are set to state: 'on'

Frappe 命令

Bench CLI 使用模块 frappe.utils.bench_manager 来获取当前 bench 目录中存在的框架以及其他应用程序的命令。

本页面仅涉及 Frappe 项目中存在的、直接属于 CLI 工具一部分的命令。这些命令定义在 frappe/frappe 下。

有关任何 Bench 命令的参考,请查看 Bench 命令。

Frappe 中有四种主要命令类型,在命令执行期间由 Bench 继承。它们可以大致分为

站点命令

用于站点特定操作的一组命令。这些是用于更改站点状态的最常用命令。通过使用 --site 选项以及站点名称(或“all”)来访问这些命令,如果你希望为 bench 上的所有站点运行该操作(如果可能)。这些命令定义在模块 frappe.commands.site 下。

站点创建

在你的 bench 上创建一个新站点。默认情况下,你在 bench 上创建的所有站点都只安装了 Frappe Framework。

bench new-site {site}

有关更多信息和示例,请参阅 bench new-site 参考。

站点备份

你可以使用 Bench CLI 对 bench 上的站点进行备份。你可以管理站点的数据库和文件备份,并对操作有更多控制。

bench --site {site} backup

Bench CLI 还会从你的 bench 目录中删除较旧的备份文件。默认情况下,它会从备份目录中删除超过 24 小时的备份。

有关更多信息和示例,请参阅 bench backup 参考。

站点恢复

Bench CLI 可用于将现有站点恢复到之前的状态。使用 bench restore 命令,可以通过特定的数据库和文件恢复来恢复站点。

bench --site {site} restore {path/to/database/file}

执行恢复操作的最低要求是在本地文件系统上拥有数据库文件。指定的备份文件可以具有 sql.gz 的 sql 扩展名。

有关更多信息和示例,请参阅 bench restore 参考。

部分站点恢复和备份

从版本 13 开始,Frappe 支持进行部分备份并恢复它们。可以直接使用 bench backup 命令进行部分备份。至于部分恢复,可以使用 bench partial-restore 命令将部分备份恢复到现有站点。

有关更多信息和示例,请参阅 bench partial-restore 和 bench backup 参考。

站点应用管理

你可以安装或卸载 Bench 上可用的 Frappe 应用程序。要使用 bench get-app 将应用添加到你的 bench,请查看文档。

应用安装

在你的站点上安装 Frappe 应用程序的最简单方法是通过 Bench CLI。但是,在此之前,该应用程序必须已安装在你的 bench 上。

bench --site {site} install-app {app}

在此操作中,指定站点的应用程序 meta、modules 和 doctypes 会被安装到指定站点上。

应用卸载

卸载站点上已安装的应用。这是一个破坏性操作,包括从站点中删除所有与应用相关的数据。因此,在卸载该应用之前会进行备份。

bench --site {site} uninstall-app {app}

注意:从版本 13 开始,即使未安装在 Bench 上的应用也可以从站点中卸载。

有关更多信息和示例,请参阅 bench uninstall-app 参考。

站点迁移

在特定站点上运行补丁、同步架构并重建文件、翻译和索引。在文档中了解站点迁移的工作原理。

bench --site {site} migrate

有关更多信息和示例,请参阅 bench migrate 参考。

站点删除

删除数据库,并将站点目录从 ./sites 移动到你的 Bench 上的 ./archived_sites (除非另有指定)文件夹。

bench drop-site {site}

有关更多信息和示例,请参阅 bench drop-site 参考。

重置站点数据

从你指定的站点重新安装所有已安装的应用程序。这会完全重置站点。

bench reinstall {site}

有关更多信息和示例,请参阅 bench reinstall 参考。

列出已安装的应用

列出指定站点上安装的所有 Frappe 应用程序。该命令显示的信息来自 已安装应用程序 DocType,它跟踪站点迁移到的应用的最新版本。全局默认 installed_apps 用作回退。

bench --site {site} list-apps

多站点支持已在版本 13 中添加。要查看所有站点的摘要,请将站点的值设为 all 来运行该命令。

有关更多信息和示例,请参阅 bench list-apps 参考。

设置默认站点

有时为每个站点命令输入 --site [sitename] 可能很繁琐。你可以通过设置 FRAPPE_SITE 环境变量来为终端会话设置默认站点。

~/frappe-bench
❯ export FRAPPE_SITE=mysite.localhost

~/frappe-bench
❯ echo $FRAPPE_SITE
mysite.localhost

~/frappe-bench
❯ bench console
Apps in this namespace:
frappe

In [1]: frappe.local.site
Out[1]: 'mysite.localhost'

在浏览器中访问站点

要在浏览器中访问站点,您必须记住 bench 运行的 webserver 端口,然后输入完整的 URL。有一个 bench 命令可以为您完成此操作。

运行以下命令将直接在您的默认浏览器中打开站点 URL。

# open site.local in the browser
$ bench --site site.local browse

# this also works
$ bench browse site.local

您还可以通过传递 --user 选项以用户身份登录。

$ bench --site site.local browse --user [email protected]

$ bench --site site.local browse --user Administrator
Login URL: http://site.local:8000/app?sid=<generated-sid>
</generated-sid>

请注意,此命令:

  • 仅当 developer_mode 设置为 1 时,才允许以任何用户身份登录
  • 无论 developer_mode 如何,都允许以 Administrator 身份登录
  • 仅当用户为 Administrator 时,才打印登录 URL

站点操作、调试和开发

以下是一些您可以通过 Bench CLI 在站点上执行的操作,以更新站点状态。您可能永远不需要使用其中的一些操作,但它们的存在只是为了以防万一。

  • add-system-manager:向站点添加新的系统管理员。
  • add-user:向站点添加具有特定角色的新用户。
  • add-to-hosts:将指定站点添加到您系统的 hosts 文件中。
  • build-search-index:为网站构建搜索索引。有关更多信息,请参阅全文搜索 API 文档。
  • disable-user:禁用站点上的用户。
  • publish-realtime:从 bench 发布实时事件。
  • reload-doc:重新加载特定 Doctype 的架构,并刷新指定的 Document
  • reload-doctype:重新加载特定 DocType 的架构
  • remove-from-installed-apps:从站点的全局值 installed_applications 中移除提到的应用。
  • run-patch:通过 Frappe Patch Handler 运行特定补丁。
    • execute: 这允许运行一次性 Python 语句
        bench --site erpnext.site run-patch 'execute:frappe.db.set_value("User", frappe.session.user, "default_app", "frappe")'
    
  • migrate-to:将您的本地站点迁移到 Frappe Hosting Provider 服务的命令。
  • ngrok:创建一个临时 URL 并与任何人分享,他们可以在浏览器中访问您的本地站点。主要用于协助第三方服务的开发。
  • set-password:为任何用户设置密码。
  • set-admin-password:为 Administrator 用户设置密码。
  • set-last-active-for-user:将用户的最后活跃日期设置为当前日期时间。
  • start-recording:为指定站点启动 Frappe Recorder。
  • stop-recording:终止指定站点的 Frappe Recorder。
  • use:设置 bench 上的默认站点。

数据库维护命令

与数据库管理和维护相关的一组命令。这些命令为您的站点数据库提供了更多控制。您可能希望随着时间的推移微调您的部署,以满足站点的需求。

表转换

transform-database 命令允许您管理站点表的设置。此时,您可以为站点数据库中的选定表切换 engine 和 row_format 设置。

bench --site {site} transform-database --tables {tables}

有关更多信息和示例,请参阅 bench transform-database 参考。

表修剪

从特定 DocType 中移除的 Docfields 可能不会从其数据库表中删除。这是 Frappe 的设计,以防止过早的数据丢失。这在大多数情况下不会造成问题,但是,在某些时候,您可能会因为残留数据而面临问题。

定期进行表修剪的一些好处是:

  • 更小的备份大小
  • 减少备份站点所需的时间
  • 减少站点数据库使用量
  • 在 SELECT * 的情况下优化查询
  • 数据库干净,没有任何隐藏或冗余数据
bench trim-tables [OPTIONS]

有关更多信息和示例,请参阅 bench trim-tables 参考。

数据库修剪

从列表视图中删除 DocTypes 可能不会从数据库中删除其对应的表。迁移有时可能会在您的站点数据库中留下幽灵表。这样做可能是为了冗余、在数据损坏或丢失时进行恢复,或者仅仅是出于人为错误。

bench trim-database [OPTIONS]

有关更多信息和示例,请参阅 bench trim-database 参考。

调度器命令

用于管理和查看 bench 上站点的调度器和后台作业状态的命令。定义在模块 frappe.commands.schedule 下。

  • disable-scheduler:禁用指定站点的调度器。
  • doctor:获取有关所有站点(如果未指定)的调度器状态以及 bench 上活动工作进程的诊断信息。
  • enable-scheduler:为指定站点启用调度器。
  • purge-jobs:清除任何待处理的周期性任务,如果未给出 event 选项,它将清除站点的一切。
  • ready-for-migration:通过检查是否存在任何待处理的后台作业来检查特定站点是否已准备好迁移。
  • scheduler:将任何站点的调度器状态从 pause、resume、disable 或 enable 状态更改。
  • set-maintenance-mode:为指定站点在配置中设置维护模式的值。
  • show-pending-jobs:获取有关后台作业的诊断信息。
  • schedule:为你的 bench 启动调度器进程。该进程管理在 hooks.py 文件中定义的调度事件。你也可以在你的进程管理器的 bench 配置中找到这个命令。
  • worker:在你的 bench 上启动 worker 进程。该进程将管理在此 bench 上启动的所有后台任务。
  • trigger-scheduler-event:为指定的站点触发特定的调度事件。

Frappe 实用命令

Frappe 实用命令既可以针对站点,也可以针对 bench。这些命令定义在 frappe.commands.utils 模块下。

显示站点配置

你站点所应用的配置是 bench 目录下的 common_site_config.json 和站点自身的 site_config.json 组合后生效的。你可以在这里了解更多相关信息。Bench 提供了一个界面来查看你站点所应用的 frappe.conf 值。你可以选择以表格或 JSON 格式访问这些信息。

bench --site {site} show-config

更多信息和示例,请参阅 bench show-config 参考文档。

更新站点配置

Bench 提供了一个包装命令,用于在站点配置文件中插入或更新值。你可以通过同一个命令更新站点 site_config.json 中的值,以及 bench 目录下的 common_site_config.json。

bench --site {site} set-config KEY VALUE

更多信息和示例,请参阅 bench set-config 参考文档。

显示已安装应用的版本

version 命令会显示所有已安装的应用及其版本。

bench version [OPTIONS]

从版本 13 开始,引入了 -f / --format 选项。该选项允许你显示有关分支和最近提交的额外信息。更多信息和示例,请参阅 bench version 参考文档。

更多命令

  • add-to-email-queue:向邮件队列添加一封邮件。
  • build:为 bench 上安装的 Frappe 应用构建资源。
  • bulk-rename:通过 CSV 文件批量重命名多条记录。示例文件格式(不含表头):
旧名称 新名称 合并
HR-EMP-00001 EMP0001 FALSE
HR-EMP-00002 EMP0002 FALSE
HR-EMP-00003 EMP0003 FALSE
HR-EMP-00004 EMP0004 FALSE
HR-EMP-00005 EMP0005 FALSE
HR-EMP-00006 EMP0006 FALSE
  • clear-cache:清除缓存、doctype 缓存和默认值。
  • clear-website-cache:清除网站缓存。
  • console:为站点启动一个 IPython 控制台。配合 --autoreload 标志使用可自动重新加载代码更改。
  • data-import:使用数据导入功能从 CSV 或 XLSX 批量导入文档。
  • destroy-all-sessions:清除所有用户的会话(使其登出)。
  • execute:使用给定的 args 和 kwargs 执行特定的函数或方法。
  • export-csv:导出包含 DocType 数据的导入模板。
  • export-doc:将单个文档导出为 CSV。
  • export-fixtures:将站点中的记录导出为 JSON 文件到你的 Frappe 应用中。Fixtures 在你的应用的 hooks.py 文件中定义。
  • export-json:将文档列表以 JSON 格式导出到指定路径,使用 ‘-‘ 作为 Singles 的名称。
  • import-csv:使用数据导入功能从你的 CSV 文件导入。
  • import-doc:导入(插入/更新)文档列表。如果参数是一个目录,则导入所有以 .json 结尾的文件
  • jupyter:启动一个 Jupyter Notebook 服务器。
  • make-app:创建一个 Frappe 应用模板。
  • db-console:为你的站点启动交互式数据库控制台。此命令是以下命令的别名:mariadb、postgres
  • mariadb:为 mysql 站点启动 MySQL 交互式控制台。
  • postgres:为 postgres 站点启动 PostgreSQL 交互式控制台。
  • rebuild-global-search:在当前站点中设置帮助表(在 migrate 之后调用)。
  • request:以 Administrator 身份向某个路径发起带参数的请求。
  • reset-perms:将所有 DocType 的权限重置为默认设置。
  • run-tests:在指定站点上运行 Python 测试。
  • run-parallel-tests:在 CI 上并行运行 Python 测试。
  • run-ui-tests:运行 Cypress UI 测试。
  • serve:为 bench 启动 Web 服务器。
  • watch:监视并在 JS 和 CSS 文件发生变化时进行合并。

翻译命令

有两种方式管理翻译。在 v15 之前,翻译通常基于 CSV 文件。从 v16 开始,frappe 使用 GNU Gettext 的 .po 文件格式来管理翻译。自定义应用可以继续提供基于 CSV 的翻译,也可以切换到新格式。

CSV 文件

一组用于管理基于 CSV 的翻译文件的命令。这些命令定义在 frappe.commands.translate 模块下。

  • build-message-files:为翻译构建消息文件。
  • get-untranslated:获取指定语言的未翻译字符串。
  • migrate-translations:将目标应用专属的翻译从源应用迁移到目标应用
  • new-language:为指定应用创建一个 [lang].csv 文件。
  • update-translations:在文件之间更新指定语言的翻译。

Gettext / PO 文件

用于管理基于 Gettext 的翻译文件的命令集。这些命令定义在模块 frappe.commands.gettext 下。

  • generate-pot-file:生成一个 POT 文件。这会创建包含你应用中所有可翻译字符串的基础文件,并作为特定语言翻译文件的模板。
  • compile-po-to-mo:将 PO 文件编译为 MO 文件。PO 文件是人类可读的。在生产环境中,翻译是从 MO 文件中读取的,其中翻译被编译为优化的二进制格式。此命令会从你的 PO 文件创建 MO 文件(为方便起见,此命令也会由 bench build 触发)。
  • migrate-csv-to-po:将你应用的翻译从 CSV 文件(旧)迁移到 PO 文件(新)。请先运行 generate-pot-file。
  • update-po-files:将语言的 PO 文件与 POT 文件同步。这样,新的可翻译字符串会被添加到你的 PO 文件中,你可以在那里进行翻译,而过时的字符串则可以被移除。你可能需要先运行 generate-pot-file。
  • create-po-file:为一种新语言创建一个新的(未翻译的)PO 文件。

基准命令

本页面仅涉及 bench 项目中存在的命令,
这些命令是 CLI 工具的直接组成部分。这些命令定义在
frappe/bench 下。

有关任何框架命令的参考,请查看 Frappe 命令。

使用 bench CLI

➜ bench
Usage: bench [OPTIONS] COMMAND [ARGS]...

 Bench manager for Frappe

Options:
 --version
 --help Show this message and exit.

Commands:
 backup Backup single site
 backup-all-sites Backup all sites in current bench
 config Change bench configuration
 disable-production Disables production environment for the bench.
 download-translations Download latest translations
 exclude-app Exclude app from updating
 find Finds benches recursively from location
 get-app Clone an app from the internet or filesystem and...

同样,可以通过使用 --help 标志单独执行命令来检查所有可用的标志和选项。例如 init 命令:

➜ bench init --help
Usage: bench init [OPTIONS] PATH

 Initialize a new bench instance in the specified path

Options:
 --python TEXT Path to Python Executable.
 --ignore-exist Ignore if Bench instance exists.
 --apps_path TEXT path to json files with apps to install
 after init

命令

在 Click 的结构下,bench 是主命令组,目前 bench 下有三个主要的命令组,分别是

通用命令

一组不能广泛归类到其他命令中的命令。诸如 init、get-app、find 等命令属于此类别。这些命令直接属于 bench 组,因此可以在 shell 中直接以 bench 为前缀调用。因此,这些命令的用法如下

➜ bench COMMAND [ARGS]...

常用命令

  • init:在指定路径初始化一个新的 bench 实例。这会创建一个完整的 bench 文件夹,其中包含一个 apps 文件夹(包含当前 bench 中所有可用的 Frappe 应用)、一个 sites 文件夹(按各个站点文件夹存储所有站点数据)、一个 config 文件夹(包含你的 redis、NGINX 和 supervisor 配置文件)。env 文件夹包含当前 bench 的所有 Python 依赖以及已安装的 Frappe 应用所具有的依赖。

  • restart:重启 web、supervisor、systemd 进程单元。用于生产环境设置。

  • update:如果在 bench 目录中执行且不带任何标志,将执行备份、拉取、设置依赖、构建、运行补丁并重启 bench。使用特定标志则只执行某些任务而非全部。

  • migrate-env:将虚拟环境迁移到所需的 Python 版本。这会使用指定的 Python 版本重新生成 env 文件夹。

  • retry-upgrade:重试失败的升级

  • disable-production:禁用 bench 的生产环境。

  • renew-lets-encrypt:为站点 SSL 续期 Let’s Encrypt 证书。

  • backup:备份单个站点数据。也可用于备份文件。

  • backup-all-sites:备份当前 bench 中的所有站点。

  • get-app:从互联网或文件系统下载应用并在你的 bench 中进行设置。这会克隆 Frappe 项目的 git 仓库并将其安装到 bench 环境中。

  • remove-app:从当前 bench 中完全移除指定的 Frappe 应用,如果该应用未安装在任何站点上,则重新构建资源。

  • exclude-app:在 bench update 期间排除应用不进行更新

  • include-app:包含应用以进行更新。所有 Frappe 应用在安装时默认都会被包含。

  • remote-set-url:设置应用远程 URL

  • remote-reset-url:将应用远程 URL 重置为 frappe 官方地址

  • remote-urls:显示应用的远程 URL

  • switch-to-branch:将所有应用切换到指定分支,或用空格分隔指定多个应用

  • switch-to-develop:将 Frappe 和 ERPNext 切换到 develop 分支

高级设置相关

  • set-nginx-port:设置站点的 NGINX 端口
  • set-ssl-certificate:设置站点的 SSL 证书路径
  • set-ssl-key:设置站点的 SSL 证书私钥路径
  • set-url-root:设置站点的 URL 根路径
  • set-mariadb-host:设置 bench 的 MariaDB 主机
  • set-redis-cache-host:设置 bench 的 Redis 缓存主机
  • set-redis-queue-host:设置 bench 的 Redis 队列主机
  • set-redis-socketio-host:设置 bench 的 Redis socketio 主机
  • use:设置 bench 的默认站点
  • download-translations:下载最新翻译

开发

  • start:启动 Frappe 开发进程。使用 Procfile 启动 Frappe 开发环境。
  • src:打印 bench 源文件夹路径,可通过 cd $(bench src) 用于 cd 进入 bench 安装仓库。
  • find:从当前位置或指定路径递归查找 bench。
  • pip:使用当前 bench 的 pip 来管理 Python 包。有关 pip 用法的帮助:bench pip help [COMMAND] 或 bench pip [COMMAND] -h。
  • new-app:在 apps 文件夹下创建一个新的 Frappe 应用。

发布 bench

  • release:创建 Frappe 应用的发布版本
  • prepare-beta-release:从 develop 分支准备主要 beta 版本

设置命令

此命令组包含用于操作 Frappe 环境所需的要求和环境的命令。用于在当前 bench 上下文中设置 Frappe 环境的设置命令需要使用 bench setup 作为前缀来执行。因此,这些命令的一般用法是

➜ bench setup COMMAND [ARGS]...
  • sudoers:将命令添加到 sudoers 列表,以允许无需 root 密码执行 bench 命令

  • env:为您的 bench 设置 Python 虚拟环境。这会在 bench 目录根下设置一个 env 文件夹。

  • redis:生成 Redis 的配置

  • fonts:将 Frappe 字体添加到系统

  • config:生成或覆盖 sites/common_site_config.json

  • backups:为 bench 备份添加 cronjob

  • socketio:为 socketio 服务器设置 node 依赖

  • requirements:设置 Python 和 Node 依赖

  • manager:使用 Bench Manager 应用设置 bench-manager.local 站点,这是一个安装在它上面的 bench GUI。

  • procfile:为 bench start 生成 Procfile

  • production:为指定用户设置 Frappe 生产环境。这会安装 ansible、NGINX、supervisor、fail2ban 并生成相应的配置文件。

  • nginx:为 NGINX 生成配置文件

  • fail2ban:设置 fail2ban,这是一个入侵预防软件框架,保护计算机服务器免受暴力攻击

  • systemd:为 systemd 生成配置

  • firewall:为系统设置防火墙

  • ssh-port:设置系统的 SSH 端口

  • reload-nginx:检查 NGINX 配置文件并重新加载服务

  • supervisor:为 supervisor 生成配置

  • lets-encrypt:为站点设置 lets-encrypt SSL

  • wildcard-ssl:为多租户 bench 设置通配符 SSL 证书

  • add-domain:为特定站点添加自定义域名

  • remove-domain:从站点移除自定义域名

  • sync-domains:检查域名是否有变化。如果有,更新域名列表。

  • role:通过 ansible 角色安装依赖

配置命令

配置命令组处理当前 bench(不是 CLI 工具)配置的更改。配置组命令用于在当前 bench 上下文中操作配置。这些命令的用法是

➜ bench config COMMAND [ARGS]...
  • set-common-config:在通用配置中设置值,参数为 -c、configs 或 –config
  • remove-common-config:从当前 bench 的通用配置中移除特定键
  • update_bench_on_update:在运行 bench update 时启用/禁用 bench 更新
  • restart_supervisor_on_update:启用/禁用 supervisor 进程的自动重启
  • restart_systemd_on_update:启用/禁用 systemd 单元的自动重启
  • dns_multitenant:在运行 bench update 时启用/禁用 bench 多租户
  • serve_default_site:配置 nginx 在端口 80 上服务默认站点
  • http_timeout:设置 HTTP 超时

安装命令

安装命令组处理用于安装系统依赖以设置 Frappe 环境的命令。这些命令的用法是

 bench install COMMAND [ARGS]...
  • prerequisites:安装先决条件库、基本工具如 b2zip、htop、screen、vim、x11-fonts、python 库、cups 和 Redis
  • nodejs:安装 Node.js v8
  • nginx:安装 NGINX。如果指定了用户,则为该用户设置 sudoers
  • packer:安装 Oracle virtualbox 和 packer 1.2.1
  • psutil:通过 pip 安装 psutil
  • mariadb:安装并设置指定版本的 MariaDB 和 root 密码
  • wkhtmltopdf:为 linux 安装 wkhtmltopdf v0.12.3
  • supervisor:安装 supervisor。如果指定了用户,则为该用户设置 sudoers
  • fail2ban:安装 fail2ban,这是一个入侵预防软件框架,保护计算机服务器免受暴力攻击
  • virtualbox:安装 virtualbox。

一般用法

本节涵盖 Bench CLI 的一般用法,足以让您熟悉基本用法。

创建一个新 bench

init 命令将创建一个安装了 frappe 框架的 bench 目录。它将设置为定期备份。

➜ bench init frappe-bench && cd frappe-bench

添加站点

Frappe 应用由 frappe 站点运行,您必须至少创建一个站点。new-site 命令允许您这样做。

➜ bench new-site site1.local

添加应用

get-app 命令会从远程 git 仓库获取远程 frappe 应用并
安装它们。例如:erpnext

➜ bench get-app erpnext https://github.com/frappe/erpnext

安装应用

要在新站点上安装应用,请使用 bench install-app 命令。

➜ bench --site site1.local install-app erpnext

启动 bench

要开始使用 bench,请使用 bench start 命令

➜ bench start

要登录 Frappe / ERPNext,请打开浏览器并访问
[your-external-ip]:8000,可能是 localhost:8000

默认用户名是“Administrator”,密码是你在
创建新站点时设置的密码。

更新 bench

从你的 bench 目录更新所有应用和站点。此操作会为你执行
备份、设置依赖、构建资源、运行迁移并重启你的
进程管理器。

➜ bench update

更新 Bench 配置

要更新你的 bench 的通用站点配置,你可以使用
config 命令组下的 set-common-config 和 remove-common-config 命令。
要了解更多可用的 Frappe 站点配置,
请查看 Site Config 和 Bench Config 文档。

要添加或更新现有的配置键,你可以运行类似这样的命令

➜ bench config set-common-config -c enable_frappe_logger true

要删除现有的配置键,你可以运行类似这样的命令

➜ bench config remove-common-config enable_frappe_logger

Bench Manager

如需基于 UI 的方式来管理你的部署,请查看 Bench Manager。

➜ bench setup manager

你可以通过在任意现有 bench 上运行上述命令来轻松设置它。

这会做什么?

  1. 创建一个新站点 bench-manager.local
  2. 获取 bench_manager 应用
  3. 在站点 bench-manager.local 上安装 Bench Manager 应用

你可以使用这个站点通过
bench-manager.local 的 /desk 视图来管理你的 bench 操作。

工作台

Bench 是一个用于管理 Frappe 部署的命令行工具。它提供了一个简便的界面,帮助你轻松设置和管理基于 Frappe 框架的多个站点和应用。

不过,“bench”这个词在不同语境下含义可能不同。我们既用它指代命令行工具,也用它指代目录,这经常会造成混淆。

“你更新 bench 了吗?”

“更新了,这次最新版本的迁移顺利多了。”

“什么?!我是让你更新命令行工具!”

“但愿客户会喜欢第 13 版。”

为了避免这类情况,我们用 “Bench” 指代 bench 目录,用 “Bench CLI” 指代命令行工具。

要安装 Bench CLI 并搭建 Frappe 环境,请按照安装说明操作。

你可能会惊讶地发现,很多 bench 命令其实是由 Frappe 框架提供的,而不是 Bench CLI 本身。一般来说,这些命令都是针对特定站点运行的(可以使用 --site 参数)。即使是像 bench update 这样的命令,也只是对 Frappe 框架命令(如 backup 和 migrate)的简单封装,再加上一些必要的 bench 和系统级操作。

参考资料

  1. Bench 命令
  2. Frappe 命令
  3. 命令参考
  4. 扩展 CLI

OAuth2

Frappe 框架使用 oauthlib 来管理 OAuth2 相关需求。一个 Frappe 实例可以同时充当以下所有角色:

  1. 资源服务器:存放资源,例如你 DocType 中的数据。
  2. 授权服务器:颁发令牌以访问某些资源的服务器。
  3. 客户端:需要访问资源服务器上某些资源的应用。

与上述角色相关的 DocType:

  1. 通用
    • OAuth 设置:用于配置与这三种角色相关的某些 OAuth 功能。
  2. 授权服务器
    • OAuth 客户端:记录在 Frappe 实例中注册的客户端。
    • OAuth 持有者令牌:在此维护发放给已注册客户端的令牌。
    • OAuth 授权码:跟踪客户端用于换取令牌的 OAuth 授权码。
    • OAuth 提供方设置:允许跳过授权。[DEPRECATED] 请改用 OAuth 设置。
  3. 客户端
    • 已连接应用:记录此 Frappe 实例作为客户端注册到哪些授权服务器,以便访问某些资源。例如用户的 Google Drive 账户。
    • 社交登录密钥:与已连接应用类似,但用于登录 Frappe 实例。例如用户的 Google 账户,用于启用“使用 Google 登录”。
    • 令牌缓存:Frappe 实例访问已连接应用时收到的令牌。

功能特性

框架在 oauthlib 之上额外实现的功能:

  • 动态客户端注册:允许客户端自行注册,无需资源所有者手动配置。RFC7591
  • 授权服务器元数据发现:允许客户端查看实例的授权服务器(即自身)元数据,例如授权端点。RFC8414
  • 资源服务器元数据发现:允许客户端查看实例的资源服务器元数据,例如文档、授权服务器等。RFC9728

其他文档

各种 OAuth2 功能的文档:

  1. 如何设置 OAuth 2?
  2. OAuth 2
  3. 基于令牌的身份验证
  4. 将 Frappe 用作 OAuth 服务
  5. 社交登录密钥
  6. 已连接应用

警告

其中一些页面可能已过时,如有疑问,建议始终查看
代码。

OAuth 设置

一个单一 DocType,用于配置 OAuth2 相关功能。建议
直接打开该 DocType 页面,因为每个字段都有
足够详细的帮助文本。

该设置允许切换以下功能:

  • 通过跳过授权字段,在存在有效令牌时进行授权检查。注意:在生产环境中请保持此项未勾选。
  • 授权服务器元数据发现:通过切换显示授权服务器元数据字段。
  • 动态客户端注册:通过切换启用动态客户端注册字段。
  • 资源服务器元数据发现:通过切换显示受保护资源元数据。

其余字段(在资源部分中)仅在响应 /.well-known/oauth-protected-resource 上的请求时使用

关于公共客户端

公共客户端(例如 SPA)默认具有受限访问权限。此
限制通过 CORS 实现。

若要为某些受信任的客户端绕过此限制,你可以将其
主机名添加到允许的公共客户端来源字段中。

微软Office365邮箱OAuth


本指南帮助你在 Frappe 中验证 Outlook 电子邮件账户。

注意:用户应以其 Frappe 账户中的电子邮件账户用户身份登录。例如,如果电子邮件账户是 [email protected],那么他们应使用站点上的用户 [email protected] 登录。

  1. 前往你的 Frappe 实例,创建一个新的已连接应用并保存(只需输入名称并保存),然后复制重定向 URI 以备后用。


  1. 登录 Microsoft Azure,搜索并选择Microsoft Entra ID(以前称为 Azure Active Directory)。

  1. 点击添加 -> 应用注册

  1. 输入相应的详细信息(应用名称、账户类型),粘贴之前从 Frappe 实例复制的重定向 URI,并将平台选择为“Web”。

要了解有关账户类型的更多信息,请点击此处

  1. 点击注册,你将被重定向到你创建的应用。复制你的应用程序 ID——这是你需要粘贴到 Frappe 实例上已连接应用中的客户端 ID。

  1. 前往应用中的API 权限部分,添加 Microsoft Graph 权限。

  1. 为 IMAP.AccessAsUserAll、SMTP.Send 和 offline_access 选择委派权限,然后点击“添加权限”




  1. 前往证书和密码以创建客户端密码

添加描述并点击添加,即可看到新生成的客户端密码。

复制值——将其粘贴到 Frappe 实例上新已连接应用中的 Client Secret 字段中。

  1. 点击“终结点”并复制“OpenID Connect 元数据文档”。这应粘贴到你的 Frappe 已连接应用的“OpenID 配置”字段中。之后,在已连接应用上点击“获取 OpenID 配置”,这将填充终结点。



然后,添加这些作用域,并保存文档。

  • https://outlook.office.com/IMAP.AccessAsUser.All
  • https://outlook.office.com/SMTP.Send
  • offline_access
  1. 点击右上角的“连接到 {你的已连接应用名称}”按钮,这将启动 Microsoft 的 OAuth 流程。

请确保你正在授权的电子邮件账户与你将在 Frappe 中添加的账户相同。

  1. 如果一切按计划进行,你将被重定向回你的已连接应用页面,并且应该能够看到连接到你的已连接应用的令牌缓存,前往你创建的令牌缓存,检查你是否同时拥有刷新令牌和访问令牌。

  1. 前往电子邮件账户 DocType 并创建一个新的电子邮件账户。选择方法为 OAuth,添加你的已连接应用和创建了令牌缓存的用户,并像往常一样设置你的电子邮件账户。

请确保你的 Microsoft 账户允许 IMAP/POP 连接。你可以在此处找到相关信息以及 Outlook 服务器的设置:https://support.microsoft.com/en-us/office/pop-imap-and-smtp-settings-8361e398-8af4-4e97-b147-6c6c4ac95353

注意:Microsoft 限制从除验证它的电子邮件地址以外的任何其他电子邮件地址发送邮件。为此,你可以在电子邮件账户文档本身中检查这两个选项


如需任何其他信息,请访问 Microsoft 的官方文档:https://learn.microsoft.com/en-us/exchange/client-developer/legacy-protocols/how-to-authenticate-an-imap-pop-smtp-application-by-using-oauth


服务主体身份验证

电子邮件账户需要以用户身份访问。这导致无法使用专用于 Frappe 的共享邮箱,因为需要向登录 Frappe 的用户授予完全访问权限。

此功能允许 Frappe 向例如 Exchange Online 验证自身身份,以便它可以从共享邮箱发送和接收电子邮件,而无需向访问 Frappe 的每个用户委派完全访问权限。

如果你希望使用此方法进行身份验证,Email Account 中有一个可用的复选框