
企业应用后端【免费下载链接】dolibarrDolibarr ERP CRM is a modern software package to manage your company or foundations activity (contacts, suppliers, invoices, orders, stocks, agenda, accounting, ...). its an open source Web application (written in PHP) designed for businesses of any sizes, foundations and freelancers.项目地址https://gitcode.com/gh_mirrors/do/dolibarr点击查看免费下载本指南围绕 dev/initdemo/README.md 展开系统讲解 Dolibarr ERP/CRM 仓库中dev/initdemo目录下整套演示数据维护脚本的用途、参数与内部实现如何用initdemo.sh以演示数据重建数据库并同步示例文档如何用updatedemo.php把多年前的示例日期滚动到当前年份以及如何用savedemo.sh把当前库完整导出为可复用的 SQL dump。读完你将能够在本地开发、测试或 CI 环境里安全地重建一套内容新鲜、日期贴近当下的 Dolibarr 演示环境。一、这个目录是做什么的Dolibarr 是一个用 PHP 编写的开源 ERP/CRM 系统。为了便于开发者体验、演示和自动化测试仓库在 dev/initdemo 目录下维护了一套演示数据库维护工具链其定位正如 dev/initdemo/README.md 开头所写The scripts in this directory can be used to reload or save a demo database.核心场景有三个Init demo重建演示环境用initdemo.sh把当前数据库整个擦除灌入dev/initdemo/mysqldump_dolibarr_x.y.z.sql中的演示数据并把documents_demo里的示例文件发票 PDF、合同、产品图片等复制到 Dolibarr 正式文档目录Update demo让示例数据保鲜用updatedemo.php将演示数据里的历史日期整体平移使订单、发票、付款等示例贴近当前日期Save demo回存演示环境用savedemo.sh把当前数据库导出为一个新的 SQL dump 文件供后续重新灌入。目录内实际包含的文件如下文件作用initdemo.sh擦除并重建数据库 复制示例文档对应 README 的 Init demoupdatedemo.php平移演示数据中的日期、处理 blockedlog 签名与历史数据清理对应 Update demosavedemo.sh将当前数据库导出为 dump对应 Save demoREADME 中写作savedemo.sh实际路径为dev/initdemo/savedemo.shinitdemopassword.sh重置演示库中某个登录用户的密码removeconfdemo.sh移除 Dolibarr 的安装配置删conf.php与install.lock不动数据库sftpget_and_loaddump.php通过 SFTP 从远端服务器拉取 dump 文件并灌入本地 MySQLmysqldump_dolibarr_24.0.0.sql/mysqldump_dolibarr_3.5.0.sql两个版本的演示数据库导出文件documents_demo/示例文档目录见第六节README 同时给出了两条重要提示所有脚本都依赖dialog这个终端图形化工具除非使用全命令行参数脚本必须以 root或 UID 1001身份执行这是 initdemo.sh 中id -u校验明确要求的。二、Init demo一键重建演示数据库1. 前置条件一台装有 Linux 的服务器或开发机具备 root 权限已安装mysql/mariadb客户端已安装dialogDebian/Ubuntu 系apt install dialog。不带参数直接运行脚本时initdemo.sh 会先检测dialog不存在则直接报错退出已有一个可用的 MySQL/MariaDB 实例且目标数据库默认dolibarrdemo可被灌入数据PHP CLIphp命令可用供updatedemo.php调用。2. 两种运行方式方式 A交互式GUI按 README 的说明chmod 700 initdemo.sh ./initdemo.sh不带参数运行时脚本会在终端中弹出一系列dialog输入框依次询问使用的 dump 文件默认自动取目录中最新的mysqldump_dolibarr_*.sql即按ls -v排序取最后一个见 initdemo.shMySQL 数据库名默认dolibarrdemoMySQL 端口默认3306MySQL 登录用户默认rootMySQL 密码密码框输入不回显。最后会弹出一个确认框列出 dump 文件、脚本目录、文档目录从htdocs/conf/conf.php中解析出的$dolibarr_main_data_root见 initdemo.sh、数据库名、端口与登录信息按是后才真正开始执行。方式 B全命令行参数# 用法README 与脚本头部注释一致 ./initdemo.sh confirm [mysqldump_dolibarr_x.x.x.sql 数据库名 端口 登录 密码] ./initdemo.sh confirmcleanblockedlog [mysqldump_dolibarr_x.x.x.sql 数据库名 端口 登录 密码]其中第一个参数confirm表示确认重建confirmcleanblockedlog表示在重建之外额外执行清理并重建 blockedlog 链式签名的步骤详见第三节。后面五个可选参数对应 dump 文件、数据库名、端口、登录、密码提供后不会再弹任何dialog窗口适合脚本化调用。3. 脚本执行流水线结合 initdemo.sh 源码整个重建过程依次为校验身份非 root 且非 UID 1001 直接退出参数解析confirm$1、dumpfile$2、base${3:-dolibarrdemo}、port${4:-3306}预先删除会计相关表先执行drop table if exists llx_accounting_account;与drop table if exists llx_accounting_system;initdemo.sh避免旧库残留结构与 dump 冲突灌入 dump执行mysql -P$port -u$admin -p$passwd $base $mydir/$dumpfile失败则中止initdemo.sh刷新日期调用$mydir/updatedemo.php confirm若为confirmcleanblockedlog模式则再调用一次updatedemo.php confirmcleanblockedlog见 initdemo.sh重建文档目录询问确认后清空$dolibarr_main_data_root把documents_demo/下全部示例文件cp -pr复制过去随后补上doctemplates/来自htdocs/install/doctemplates、medias/image/来自htdocs/install/medias、ecm/Administrative documents与ecm/Images来自doc/images等目录最后chmod -R uw并chown -R www-datainitdemo.sh执行后置 SQL若存在initdemopostsql.sql则自动执行该文件不是本仓库固定成员脚本会按需探测。4. 默认登录账号README 明确说明加载演示数据后管理员账号可能是以下两者之一admin / adminadmin / adminadmin灌入完成时脚本还会输出一条重要提示initdemo.shSuccess, file successfully loaded: Note that crypted data need to havedolibarr_main_instance_unique_id11f3c81e86fc9e3b3fd11d81c9a31bd0with this data set to be readable.也就是说演示 dump 中部分数据是加密存储的例如外部密钥、支付凭据等只有把配置常量dolibarr_main_instance_unique_id设为上述值这些加密数据才能被正确解密读取。三、Update demo让演示数据跟上时间1. 为什么要更新日期演示数据库往往在发布时灌入的是当时的示例业务数据。半年、一年后这些订单、发票、付款、银行流水、休假申请的日期都成了历史看起来既不真实也可能在按日期过滤的功能统计报表、到期提醒、对账里产生干扰。updatedemo.php的价值就是把这些日期批量平移到当前年份让演示环境始终像刚搭建好的。2. 三种运行模式脚本用法为php dev/initdemo/updatedemo.php confirm|confirmcleanblockedlog|confirmemptyblockedlogconfirm把示例数据中的日期从 2010 年起逐年平移最终落到当前年份 - 2见 updatedemo.php$year 2010、$lastyear $tmp[year] - 2confirmcleanblockedlog在confirm的日期平移基础上额外清理过旧的发票/付款记录并把 blockedlog 的pos_source归位confirmemptyblockedlog同confirmcleanblockedlog但额外清空整张llx_blockedlog表并删除MAIN_FIRST_REGISTRATION_OK_DATE配置updatedemo.php。此外源码中还保留了一个regenerate分支updatedemo.php用于按链式哈希规则重新计算并回写 blockedlog 签名保证日期平移后防篡改链依然合法。3. 日期平移的实现原理脚本内置了一张表 → 需要平移的日期字段映射表updatedemo.php数据表参与平移的日期字段propal报价datep、fin_validite、date_valid、date_cloturecommande客户订单date_commande、date_valid、date_cloturefacture客户发票datec、datef、date_valid、date_lim_reglementpaiement客户付款datepbank银行流水datev、dateocommande_fournisseur供应商订单date_commande、date_valid、date_creation、date_approve、date_approve2、date_livraisonsupplier_proposal供应商报价datec、date_valid、date_clotureexpensereport费用单date_debut、date_fin、date_create、date_valid、date_approve、date_refuse、date_cancelholiday休假date_debut、date_fin、date_create、date_valid、date_refuse、date_cancelticket工单datec、date_read、date_close核心 SQL 逻辑是updatedemo.php先选出年份在2010-01-01与2010-12-31之间且早于当前时间减 1 年的记录然后对每个日期字段执行UPDATE llx_表 SET 字段 IF( DATE_ADD(字段, INTERVAL delta1 YEAR) NOW(), DATE_ADD(字段, INTERVAL delta2 YEAR), DATE_ADD(字段, INTERVAL delta1 YEAR) ) WHERE rowid 记录其中delta1 目标年份 - 旧年份delta2 delta1 - 1。IF分支的作用是如果直接平移delta1年会越过现在例如把某个date_lim_reglement平移到未来则改用delta2年保证结果日期不会出现在当前时刻之后——演示数据永远是过去发生的业务而不是未来的发票。对每个年份重复该过程直到2010递增到目标年份为止。4. 清理动作在confirmcleanblockedlog/confirmemptyblockedlog模式下脚本还会执行一段数据清理流水updatedemo.php包括借助临时表tmp_delete找出关联已删除发票的付款级联删除llx_paiement_facture、llx_paiement、llx_facturedet、llx_facture中日期早于目标年份-12-31的旧记录删除过早的llx_pos_cash_fence收银台日结记录把llx_blockedlog中module_source takepos的pos_source重置为 1将剩余发票的datef对齐为datec并让付款日期datep对齐其对应发票的datef保证发票—付款时间线自洽。注意这些 SQL 涉及对业务数据的批量删除仅用于演示库维护切勿在生产环境执行。四、Save demo把当前数据库回存为 dump1. 用途与用法savedemo.sh用于把当前数据库导出成一个新的演示 dump 文件比如你在演示环境里手工录入了一批有代表性的数据想把它固化下来供以后重复灌入。命令形式为# 交互式 ./savedemo.sh # 全命令行参数 ./savedemo.sh [mysqldump_dolibarr_x.x.x.sql 数据库名 端口 登录 密码]交互模式下同样依赖dialog依次询问输出 dump 文件名默认自动取最新的mysqldump_dolibarr_*.sql作为建议名、数据库名、端口、root 登录与密码最后确认执行。2. 导出时的表过滤策略与普通mysqldump不同savedemo.sh 预先构造了一份超长的--ignore-table列表将不适合进入演示库的表排除在导出之外。被排除的表包括会员/缴费类llx_abonne、llx_abonnement、llx_abonne_type、llx_abonne_extrafields会计敏感表llx_accountingaccount、llx_accountingsystem、llx_bookkeeping导出的演示库不携带真实会计账目外部托管/云服务相关llx_dolicloud_*、llx_sellyoursaas_*、llx_entity、llx_domain等扩展模块示例表llx_agefodd_*培训、llx_cabinetmed_*医疗、llx_pos_*收银台、llx_scaninvoices_*、llx_ticketsup_*、llx_ultimatepdf、llx_verifactudolibarr_*等临时/脏数据表tmp_llx_accouting_account、tmp_llx_product_batch、tmp_user等。最后执行的命令形如mysqldump -P端口 -u登录 -p***** 一系列 --ignore-table 数据库名 目录/dump文件成功后输出Success, file successfully dumped.失败则输出Error, dump failed.savedemo.sh。从仓库现状可以看到mysqldump_dolibarr_24.0.0.sql 是基于 MariaDB 10.6 导出、库名为dolibarrpreview的完整结构 数据文件而mysqldump_dolibarr_3.5.0.sql则是基于 MySQL 5.5 的历史版本导出可用于验证旧版演示数据与当前代码的兼容性。五、配套脚本1. initdemopassword.sh重置演示管理员密码如果忘记演示账号密码或想把演示登录口令改成团队约定的值可以运行./initdemopassword.sh confirm [数据库名 端口 登录 新密码 密码算法]脚本的核心动作是用 PHP 计算新密码的哈希然后直接UPDATE llx_user SET pass_crypted ... WHERE login ...initdemopassword.sh。密码算法参数支持两种md5默认echo ?php echo MD5(密码); ? | php生成 MD5 哈希password_hashecho ?php echo password_hash(密码, PASSWORD_DEFAULT); ? | php生成 bcrypt 系哈希。提示演示库里管理员密码字段默认是 MD5 存储README 中的admin/admin即对应此格式若改用password_hash需确认当前 Dolibarr 配置的密码算法匹配否则登录校验会失败。2. removeconfdemo.sh移除安装配置用于把当前实例打回未安装状态将htdocs/conf/conf.php备份为conf.sav.php后删除并删除install.lock这样下次访问会重新进入安装向导。脚本头注释明确警告该操作只移除安装配置不删除数据库removeconfdemo.sh。配合initdemo.sh可以实现从零重装 灌入演示数据的完整演练。3. sftpget_and_loaddump.php远端拉取并灌库若演示 dump 托管在远端服务器可以用该脚本经 SSH/SFTP 拉取后直接导入php dev/initdemo/sftpget_and_loaddump.php loginserver:/src/file.(sql|gz|bz2) ssh密码 数据库主机 数据库名 数据库登录 数据库密码实现要点sftpget_and_loaddump.php依赖 PHP 的ssh2_connect/ssh2_auth_password/ssh2_scp_recv扩展文件下载到/tmp后按扩展名决定导入方式.sql直接cat ... | mysql.gz先gzip -d.bz2先bzip2 -c -d再通过管道交给mysql脚本头注释提醒该过程可能耗时较长may take a long time适合在后台执行。六、示例文档目录 documents_demodev/initdemo/documents_demo 是随 dump 一起分发的示例文档树按 Dolibarr 业务对象组织包括adherent/会员卡、blockedlog/、categorie/分类图片、commande/订单 PDF、expedition/发货单、expensereport/费用单、facture/发票 PDF、ficheinter/干预单、fournisseur/供应商文档、medias/、mycompany/公司 Logo/抬头、produit/产品图片、propale/报价单、societe/客户文档、supplier_proposal/、ticket/、users/。initdemo.sh会用cp -pr原样复制这些目录到配置的$dolibarr_main_data_root下这样演示环境打开任意一张发票或产品卡片都能看到真实的 PDF 与图片附件。文档目录的解析方式值得注意脚本从 htdocs/conf/conf.php 中读取$dolibarr_main_data_root常量例如/var/www/dolibarr/documents来确定目标位置若解析失败则跳过复制并在日志中提示Detection of documents directory ... failed so demo files were not copiedinitdemo.sh。七、组合起来一套完整的演示环境维护流程把以上工具串起来可以得到一套可脚本化的完整流程cd dev/initdemo # 1. 可选重置管理员密码避免使用公开默认口令 ./initdemopassword.sh confirm dolibarrdemo 3306 admin MyDemoPass!2026 password_hash # 2. 一键重建数据库 文档目录非交互式 ./initdemo.sh confirm mysqldump_dolibarr_24.0.0.sql dolibarrdemo 3306 root 数据库密码 # 3. 人工在演示环境录入一批有代表性的数据后固化保存 ./savedemo.sh mysqldump_dolibarr_24.1.0.sql dolibarrdemo 3306 root 数据库密码 # 4. 之后任何环境都可以用新 dump 快速重建 ./initdemo.sh confirm mysqldump_dolibarr_24.1.0.sql dolibarrdemo 3306 root 数据库密码这套工具链对以下场景尤其有价值开发调试随时回到一套内容齐全、状态一致的演示数据避免手工造数自动化测试/CIconfirm模式的纯命令行参数调用可以无dialog依赖地嵌入流水线前提是终端可用配合 test/phpunit 等测试目录使用可快速准备干净的数据库基线演示与培训updatedemo.php保证每次演示前数据日期都是新的观众看到的订单、发票、报表与当期时间吻合。最后再次强调 README 与脚本中的两条安全边界initdemo.sh会无条件擦除目标数据库的全部数据运行前务必确认指向的是演示库默认dolibarrdemo而非生产库所有脚本要求以 root或 UID 1001运行这是源码中的硬性校验普通用户直接执行会得到Script must be executed as root的提示并退出。赞分享企业应用后端【免费下载链接】dolibarrDolibarr ERP CRM is a modern software package to manage your company or foundations activity (contacts, suppliers, invoices, orders, stocks, agenda, accounting, ...). its an open source Web application (written in PHP) designed for businesses of any sizes, foundations and freelancers.项目地址https://gitcode.com/gh_mirrors/do/dolibarr点击查看免费下载相关推荐ACI.dev数据库种子示例数据快速初始化ACI.dev数据库种子示例数据快速初始化 为什么需要数据库种子文件 在开发和测试ACI.dev平台时手动配置600工具集成的认证信息和权限设置是一项繁琐后端前端MCP 服务工具调用AI 应用API网关人工智能使用 esbuild 打包 Perspective 数据可视化应用WebAssembly 双实例初始化与实战示例解析使用 esbuild 打包 Perspective 数据可视化应用WebAssembly 双实例初始化与实战示例解析 本篇文章以仓库中的 examples/e数据可视化数据分析流处理WebAssembly图表库Nextcloud AIO实例重置清理数据与重新初始化Nextcloud AIO实例重置清理数据与重新初始化 概述 Nextcloud All in OneAIO是官方推荐的Nextcloud部署方式它通过云原生运维后端容器编排上一篇docker-compose一键部署openvas含Nginx反向代理与SSL证书配置下一篇如何在10分钟内快速搭建传奇游戏服务器OpenMir2终极完整指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考