OpenDocMan 完整教程:从零搭建自托管 PHP 文档管理系统(DMS)
【免费下载链接】opendocmanOpenDocMan - Free PHP Document Management System DMS项目地址: https://gitcode.com/gh_mirrors/op/opendocman
本文介绍 OpenDocMan——一个免费开源(GPL 2.0)的自托管文档管理系统(DMS):基于 PHP 8.2 + MySQL 实现,可在自己的服务器上完成文档存储、部门级权限管控与版本审批流程,适合个人、实验室及需要符合 ISO 17025 文档规范的小团队。
项目概览:它能做什么
- 文档在线上传与归档:浏览器直接上传,文件按类别、部门组织,支持检索
- 细粒度权限控制:按部门或个人配置谁能看到哪些文档,防止越权访问
- 版本跟踪:每次修订自动留档,可随时查看历史版本与变更记录
- 审批流:新上传的文件可强制走"提交—审核—发布"流程,未通过的文件不会进入正式库
项目结构速览:代码住在哪里
| 目录 | 用途 |
|---|---|
public/ | Web 根目录与静态资源(CSS、JS、图片),请求统一从这里进入 |
application/controllers/ | 页面逻辑层,每个 PHP 文件对应一个 URL 路径(如details.php是文件详情页) |
application/models/ | 数据层,封装用户、部门、文件、权限等数据库表的操作 |
application/installer/ | 安装向导、数据库迁移与快照备份,其中cli.php是免 Web 的命令式入口 |
application/views/ | 页面模板(common/通用模板 +bootstrap5/现代主题),由 Smarty 引擎渲染 |
application/configs/ | 安装完成后生成的config.php及其样例 |
application/includes/ | 多语言包、CSRF 防护、Smarty 模板库等基础设施 |
scripts/ | Docker 环境的密钥生成、配置校验等辅助脚本 |
tests/ | PHPUnit 单元/集成测试,改代码前先跑一遍 |
结构上它遵循"控制器 → 模型 → 视图"的分层思路:URL 决定加载哪个控制器,控制器调用模型读写数据库,最后交给模板输出 HTML。
三步看懂启动链路:从 public/index.php 到页面
部署时把 Web 服务器(如 Nginx/Apache)的文档根目录指向public/,之后所有请求都会先落在这个入口文件里,链路分三步走:
public/index.php引入 Composer 自动加载器,并用ConfigManager检查configs/config.php是否存在;- 存在则建立 PDO 数据库连接、比对数据库结构版本(不一致会强制跳去升级),随后加载
application/odm-init.php——它负责初始化 Smarty 模板、注入 CSRF 令牌、载入语言包并做安全初始化; - 最后按 URL 路径映射到
application/controllers/下的同名文件执行,找不到就返回 404。
入口中最核心的判断如下(摘录自public/index.php):
$configManager = new ConfigManager(); if ($configManager->configExists()) { $configManager->loadConfig(); // 读取 configs/config.php } else { header('Location: /installer/setup-config'); // 未安装 → 进安装向导 exit; }也就是说:配置不存在时整个系统只干一件事——引导你完成安装;配置就绪后,它才把控制权交给业务页面。odm-init.php开头同样有一道保险:如果数据库常量未定义,直接重定向到setup-config,避免"裸奔"运行。
关键配置项清单:安装前要填什么
Docker 部署时先执行./generate-env-secrets.sh生成.env(自动填充安全密码),再make up启动;裸机部署则由安装向导自动生成config.php。核心项一览:
| 配置项 | 作用 | 默认值 | 是否需要修改 |
|---|---|---|---|
APP_DB_HOST | MySQL 地址,可追加端口或 socket 路径 | localhost | 数据库不在本机时才改 |
APP_DB_NAME | 数据库名 | 占位符database_name_here | 是(或用向导/MYSQL_变量指定) |
APP_DB_USER/APP_DB_PASS | 数据库账号与密码 | 占位符 | 是,务必填真实值 |
db_prefix | 数据表前缀,多系统共库时防冲突 | odm_ | 一般保持默认 |
dataDir | 上传文档的实际存储目录 | 安装时指定 | 是,且需 Web 服务可写、不可被直接浏览 |
ADMIN_PASSWORD(Docker.env) | 初始管理员密码 | 脚本生成 | Docker 部署必改 |
Docker 环境下这些define()会优先读取同名环境变量,所以.env里的值会覆盖代码内默认值——生产环境只改.env即可,别动配置文件。
以上配置就绪后,浏览器访问首页即进入登录页(首次为 admin 账号,登录后需改密)。更多细节如备份快照(snapshot:create)、数据库迁移与升级流程,可直接阅读仓库内的 README 与docs/目录下的设计文档。
【免费下载链接】opendocmanOpenDocMan - Free PHP Document Management System DMS项目地址: https://gitcode.com/gh_mirrors/op/opendocman
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考