尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

DzzOffice二次开发实战:小胡版V1.90.1定制指南

DzzOffice二次开发实战:小胡版V1.90.1定制指南 简介DzzOffice 小胡版 V1.90.1 是一套基于官方 DzzOffice 深度二次开发的开源协同办公套件定位偏向企业、团队与个人网盘 / OA 场景。它在保留官方灵活可定制特性的同时对常用功能做了整合优化适合希望私有化部署、按需组合在线编辑、文件分享与权限管理模块的开发者或管理员使用。压缩包共含 2000 个文件整体约 15.73MB。文件类型以 PHP 后端逻辑、PNG/ICO 界面图标、JS/CSS 前端资源为主同时附带 SQL 数据库脚本、config 配置、Markdown/HTML 说明文档等便于直接解析代码结构与二次开发少量 xlsx/docx/pptx 文件多用于示例或说明。已有 319 人学习/下载该资源。对刚开始接触 DzzOffice 的读者可借助这套精简版本快速理解多应用集成方式、云存储接入流程与权限管理实现对想定制专属办公门户的团队也能在此基础上做功能裁剪或界面调整节省从零搭建的时间。 DzzOffice 这套东西最早我是当私有化网盘用的后来发现它其实是个被低估的协同办公底座。我做的这个小胡版 V1.90.1就是在官方版基础上做的一次深度二次开发说是“小胡版”其实就是我自己的定制分支前后改了大半年把一堆不舒服的地方捋顺了。这篇文章就把这次二次开发的思路、改了什么、怎么改、踩了什么坑一次性说清楚给正在研究 DzzOffice 或者准备拿它做企业内网办公平台的朋友一个参考。1. 项目整体设计与二次开发思路1.1 为什么选 DzzOffice 做底座而不是自己从零写很多团队一提到企业协同办公第一反应是自己搞一套或者直接上付费的云产品。但实际情况是很多单位要求数据必须留在内网又不愿意每年掏几万块的授权费这就逼着你找一个能私有化部署的开源方案。DzzOffice 的优势在于它不只是一个网盘它自带了一套应用生态官方提供了应用市场、机构管理、用户体系、权限控制这些基础模块相当于骨架已经给你搭好了你只需要往里面填肉。我选择基于官方版二次开发而不是从零写原因很直接DzzOffice 的底层架构把“应用”和“存储”拆得很开每个业务模块都是以独立应用的形式挂载在平台上这种设计意味着我可以只改自己需要的部分不动核心。相比从零开发一套 OA省掉的不仅是前端界面还有整个权限模型、用户会话、文件存储抽象层这些吃力不讨好的底层代码。1.2 小胡版 V1.90.1 的核心定位轻量、干净、顺手V1.90.1 这个版本号是跟着官方版本走的官方出到 1.90我就在这个基础上做二次开发打上自己的补丁包。整个版本的核心定位就六个字轻量、干净、顺手。所谓“轻量”是指我去掉了一批企业根本用不上的鸡肋功能比如官方市场里那些娱乐类的挂件还有一堆加载缓慢的社交动态组件只保留文档、表格、网盘、在线编辑、组织架构这些高效办公必需的模块。“干净”是指界面做了大幅精简官方版默认的桌面端一排工具图标很多用户根本分不清是干嘛的小胡版把常用功能收进了一个主工作台多余的入口全部折叠进后台。“顺手”是指对高频操作做了大量细节优化比如文件拖拽上传、批量移动、右键菜单重构、搜索响应提速这些改动单独看都不大但合在一起日常使用的流畅感提升非常明显。1.3 二次开发的边界哪些能改哪些不能碰搞二次开发最重要的一条原则不是“想改什么就改什么”而是“哪些东西碰不得”。DzzOffice 的核心目录结构里core、api、system这三个目录属于底层框架除非你做好了每次官方升级都要手动合并代码的准备否则别乱动。我的做法是把所有定制内容集中在两个地方一个是独立的custom插件目录用来放新增的业务应用另一个是模板覆盖机制通过view目录下的同名文件覆盖默认模板这样官方升级后核心代码可以直接覆盖只是我的定制模板需要重新比对合并。另外要特别注意数据库结构。DzzOffice 的表结构设计得比较规范官方表以dzz_前缀开头二次开发新增表我统一用xh_前缀这样以后做数据迁移、备份恢复一眼就能分清哪些是官方数据、哪些是定制数据。改官方表的字段也要谨慎加字段可以改字段类型、删字段这种操作尽量别做否则升级时大概率出问题。2. 核心细节解析与实操要点2.1 环境搭建与版本选型DzzOffice 跑起来其实很简单它本质上是 PHP MySQL 的应用所以环境选型上不要追求太新稳定压倒一切。我这边用的是 CentOS 7 Nginx 1.20 PHP 7.2 MySQL 5.7 的组合这个搭配看起来老但兼容性最好。官方文档说支持 PHP 7.0 到 8.0我实测下来PHP 7.2 是性能和兼容性最平衡的版本PHP 8.0 虽快但部分老插件会报Deprecated错误反而麻烦。安装过程中最容易出错的是伪静态配置。DzzOffice 默认用的是 PATHINFO 模式Nginx 下必须配置好重写规则否则首页能打开但点任何一个应用都会 404。我当时在这个问题上卡了小半天后来把配置写成了这样location / { if (!-e $request_filename) { rewrite ^(.*)$ /index.php?$1 last; } }注意要点CentOS 上装 PHP 千万别用系统自带的 yum 源那个 PHP 版本老到官方早不维护了。必须用第三方源比如 Webtatic 或 Remi装出来的 PHP 才带全了 DzzOffice 需要的pdo_mysql、curl、gd、mbstring这些扩展。检查扩展有没有装全可以到后台“系统工具 - 环境检测”里看它会列出所有必需扩展是否满足。2.2 界面定制与工作台重构官方版的桌面端是仿 Windows 风格图标铺满整个屏幕对于非技术背景的行政、财务人员来说这种设计反而增加认知负担。小胡版 V1.90.1 做的最明显的一件事就是把桌面式工作台改成了“单页应用式”的顶部导航布局。左侧固定一排主菜单工作台、网盘、文档、通讯录、应用中心点开之后在内容区域加载对应应用页面右侧是个人信息和消息通知入口。这套布局的改动核心在于view/user下的desktop.htm和main.htm两个模板文件。我当时没有直接改官方文件而是把这两个文件复制到custom/view/user/目录下然后修改系统配置里的模板加载路径让系统优先读取custom目录下的同名文件。这样一来官方如果出了新版我的自定义模板不会因为官方文件更新而被覆盖掉。界面定制还有个容易忽略的细节CSS 和 JS 的缓存问题。改完模板后页面样式没变化十有八九是浏览器缓存了旧的静态文件。DzzOffice 在加载 CSS 时会自动带一个版本号参数二次开发时可以直接在后台“系统设置”里把静态资源版本号改一下强制全站刷新缓存省得挨个浏览器清缓存。2.3 应用瘦身与功能取舍官方版的应用市场里有几十个应用很多压根没人用比如那些社交类的动态、分享、说说功能放在企业内网里既占资源又容易引发不必要的讨论氛围。我的做法是后台直接停用了一批应用同时把应用市场的“可安装应用”列表做了过滤只保留与企业办公相关的应用。操作路径在后台“应用管理 - 应用市场”里每个应用有“停用”按钮停用后前端入口会消失但数据不会删除后续想恢复随时可以启用。这里有个细节停用应用不等于卸载数据库里相关表还在如果想彻底卸载得去数据库手动删这个操作风险很大我的建议是只停用不删除反正停用后不占什么性能开销。文件在线预览这个模块我没动因为它默认支持的格式已经覆盖了日常需求office 文档、PDF、图片、音视频都能直接在浏览器里预览。真正需要关注的是预览服务的资源占用问题在内网环境下如果并发预览的人数超过二十人建议把预览服务单独部署到一台独立的服务器上通过修改config/config.php里的预览服务地址来分流不然主服务器 CPU 会被 LibreOffice 的转换进程吃满。3. 实操过程与核心环节实现3.1 从官方版到小胡版的完整升级流程如果你已经装过官方版想直接升级到小胡版 V1.90.1流程是这样的先把官方版升级到 V1.90然后备份数据库和文件再把小胡版的定制文件包解压到根目录覆盖最后访问install/update.php执行数据库升级。整个流程中最容易出问题的是“覆盖”这一步。小胡版的定制包里有几个文件与官方文件重名比如index.php和config/config.php覆盖前务必确认你已经备份了原版文件。我有一个习惯所有覆盖操作都在/tmp目录下先做一次模拟比对用diff命令看看定制文件和原版差的到底是什么确认不涉及核心数据操作再真正执行覆盖。3.2 关键配置参数调整与优化装好之后有几个配置参数不建议用默认值我根据自己的使用经验调过一轮效果比较明显配置项默认值建议值说明上传文件大小限制20M200M内网环境带宽充足默认值太小传大合同、视频素材根本不够用会话超时时间120分钟360分钟行政人员经常开着页面去忙别的超时太短会被频繁踢下线附件存储路径./data/attachment/data/dzzfiles建议把附件单独挂载到独立磁盘或存储挂载点避免和数据盘混在一起方便备份数据库连接池数无50并发高时这个参数很关键默认值在几十人同时在线时会出现连接等待我重点说下附件存储路径这个修改因为很多人不注意。DzzOffice 默认把附件存在网站根目录下的data/attachment里如果网站根目录所在磁盘满了整个系统都会卡死。我把存储路径改到了独立的分区并且在日常运维时用du -sh定期查看附件目录大小一旦超过 80% 容量提前预警。改路径的方法是在后台上传设置里修改“附件保存位置”但改了之后要记得把旧目录里的文件迁移过去否则历史附件会全部失效。3.3 用户体系与企业组织架构的对接小胡版 V1.90.1 在用户管理上做了一个比较大的改动支持通过 CSV 批量导入组织架构和用户信息。官方版只能在后台一条一条手动添加用户几百人的企业光录入人员信息就要半天实在反人类。我写了一个导入脚本放在custom/cli/import_user.php脚本的逻辑很简单读取一个指定格式的 CSV 文件按部门层级创建机构再按行创建用户并分配到对应部门。CSV 的格式是这样的部门,姓名,用户名,密码,手机号,邮箱 技术部/后端组,张三,zhangsan,初始密码123456,13800000000,zhangsanexample.com 技术部/前端组,李四,lisi,初始密码123456,13900000000,lisiexample.com运行方式是在命令行执行php custom/cli/import_user.php /tmp/users.csv执行完成后会输出导入结果汇总包括成功数、失败数、失败原因。这个脚本我后来也分享给几个朋友用过反馈最集中的问题是 CSV 文件的编码Windows 上编辑的 CSV 默认是 GBK 编码PHP 读取时如果不转成 UTF-8 就会乱码。解决办法是在脚本开头加一行$csv_content mb_convert_encoding(file_get_contents($file), UTF-8, GBK);3.4 数据迁移与备份策略很多人在二次开发完成后忽略了一件事你的数据备份策略也要跟着改。官方版的备份工具只能备份数据库和默认目录下的附件但小胡版把附件迁移到了独立路径还新增了xh_前缀的定制表这些内容官方备份工具根本不认识。我的备份方案是写了一个 shell 脚本每天凌晨 2 点自动执行核心逻辑分三步用mysqldump导出整个 DzzOffice 数据库到备份目录用rsync增量同步附件目录和自定义插件目录到备份磁盘保留最近 30 天的备份更早的自动清理。脚本内容大致是这个样子可以直接抄#!/bin/bash BACKUP_DIR/data/backup/dzz DATE$(date %Y%m%d) mkdir -p $BACKUP_DIR/$DATE mysqldump -uroot -pyourpassword dzzdb $BACKUP_DIR/$DATE/dzz.sql rsync -av --delete /data/dzzfiles/ $BACKUP_DIR/$DATE/files/ rsync -av --delete /www/wwwroot/dzz/custom/ $BACKUP_DIR/$DATE/custom/ find $BACKUP_DIR -type d -mtime 30 -exec rm -rf {} \;恢复的时候有个容易踩的坑直接把 SQL 文件导入新数据库前要确认新库的字符集是utf8mb4否则中文内容乱码。我一般会在导入前加一句SET NAMES utf8mb4;再导入 SQL恢复完成后还要把config/config.php里的数据库连接信息改成新环境的信息。4. 常见问题与排查技巧实录4.1 登录后跳转 404 或空白页怎么定位这个问题在初次部署时出现频率排第一。原因是伪静态规则没生效或者是 nginx 配置里没有把重写规则应用到 DzzOffice 的站点配置中。排查步骤很简单先访问http://你的域名/index.php如果能打开但访问http://你的域名/user/main就 404那基本可以断定是伪静态问题。另一个隐蔽的原因是 PHP 的pathinfo模式默认关闭。国内的主流环境比如宝塔面板PHP 默认是不开pathinfo的需要在 PHP 配置里打开cgi.fix_pathinfo1或者在站点配置里额外加一句include pathinfo.conf;如果你用的是宝塔面板在站点设置里找到“伪静态”一栏选择thinkphp规则模板保存后基本就能解决问题。这个问题我当时排查了两三个小时最后发现就是 PHP 的一个小配置项没开所以建议大家在部署前先检查这一项。4.2 上传大文件失败和超时的处理内网环境下传大文件是高频需求。官方版默认的 PHP 配置只允许上传 20M 以内的文件传到一半还会报Request Entity Too Large。这个报错其实是 Nginx 层抛出来的Nginx 默认的client_max_body_size是 1M比 PHP 的限制还小。需要同时改两个地方Nginx 配置里的client_max_body_size 200m;以及 PHP 配置里的upload_max_filesize和post_max_size。注意post_max_size必须比upload_max_filesize大否则文件一大会被 PHP 直接拒绝。改完后一定要重启 Nginx 和 PHP-FPM这两个服务不重启配置不会生效。4.3 官方升级后定制功能消失的兼容方案前面提到过我坚持用custom目录和模板覆盖机制来承载定制内容就是为了应对官方升级。但即使这样升级后仍可能出现定制模板不生效的情况原因通常是官方版本更新了同名的模板文件而系统优先加载的是官方文件。此时不要慌先到后台看系统版本号确认升级是否成功然后对比官方模板和小胡版定制模板的差异把官方新的改动点手动合并进定制模板里。这个工作比较耗时但它能保证你的定制功能长期可用。我通常的做法是升级后先跑一遍全站的冒烟测试把登录、上传、预览、部门管理这几个核心流程过一遍确认没问题再开放给员工使用。4.4 数据库连接数过高导致页面卡顿运行了半年多之后我发现页面偶尔会出现转圈很久才打开的情况。查了下 MySQL 日志发现是连接数被打满了。DzzOffice 默认没有连接池每个请求都会新建一个数据库连接并发一高就会撞上限。我的解决方案分两步第一步在 MySQL 配置里把max_connections从默认的 151 调到 500第二步在 DzzOffice 配置文件config/config.php里增加数据库持久连接参数dbparams array( persistent true, ),开启持久连接后PHP-FPM 的进程会复用数据库连接而不是每次请求都重新握手这个改动对并发性能的提升非常明显。这几处是我在开发维护过程中亲身验证有效的方案遇到的问题远不止这些但上面这几个属于覆盖面最广、最容易复现的典型。后续如果你在部署小胡版或者基于 DzzOffice 做二次开发时遇到其他问题建议先从 PHP 错误日志和 Nginx 日志入手排查大部分问题都能在日志里找到直接线索。本文还有配套的精品资源点击获取
返回列表