ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

OpenProject 开发 FAQ 深度解读:数据库变更策略、插件开发入门与 2FA SMS 短信网关

OpenProject 开发 FAQ 深度解读:数据库变更策略、插件开发入门与 2FA SMS 短信网关 OpenProject 开发 FAQ 深度解读数据库变更策略、插件开发入门与 2FA SMS 短信网关【免费下载链接】openprojectOpenProject is the leading open source project management software for product, project and portfolio management. A powerful Jira alternative with agile planning, issue tracking, roadmaps, Gantt charts, time tracking, collaboration features, and more. Available on premises or in the cloud. ⭐ Star us on GitHub项目地址: https://gitcode.com/GitHub_Trending/op/openprojectOpenProject 开发 FAQ 汇集了社区开发者最常问的三个核心问题数据库层面能否直接集成、如何开发自己的插件、以及两步验证2FA的短信网关机制。本文以 docs/development/faq/README.md 为主体骨架结合 OpenProject 仓库中的生成器源码、two_factor_authentication 模块实现与安装配置文档逐条给出解答、原理剖析与可落地的操作指引帮助你快速绕开开发中的常见误区。一、OpenProject 有数据库 ER 图实体关系图吗结论没有官方也不建议从数据库层面做集成。FAQ 明确指出OpenProject 的数据库布局处于持续变化之中即便是从一个补丁版本升级到下一个补丁版本也可能改变数据库结构。因此官方不提供 ER 图官方不建议在数据库层面进行集成例如用于数据仓库 Data Warehousing 或仪表盘 Dashboard 开发。为什么数据库结构如此不稳定从仓库结构可以印证这一结论db/migrate/目录下积累了 269 个迁移文件db/migrateOpenProject 通过 Rails 的 ActiveRecord Migration 机制持续演进表结构。迁移文件会随版本不断新增任何表结构、索引、外键的调整都会直接反映到迁移历史中因此以某个版本的 ER 图为基准做数据库集成几乎必然在下一次升级时失效。开发者应该怎么做官方推荐的集成路径是通过 OpenProject 的 API 层位于 lib/api以API::V3命名空间为主进行数据交互而不是直连数据库。API 提供了稳定的、版本化的契约能够屏蔽底层表结构的持续变化。如果你的需求是数据仓库/BI 集成可以优先评估官方 API 或导出能力而不是解析数据库 schema。二、如何开发自己的 OpenProject 插件FAQ 的答复是插件开发文档目前确实有限官方主要提供两处资源创建 OpenProject 插件原文档中的../create-openproject-plugin目录一个原型插件仓库openproject-proto_plugin其中演示了添加菜单项、挂钩视图、定义项目菜单等基础能力。2.1 插件本质上是什么OpenProject 插件是特殊的 Ruby Gem通过Gemfile.plugins引入与普通 Gem 一样获得版本管理和依赖解析能力。生成插件的命令为bundle exec rails generate open_project:plugin my_plugin ../plugins/该命令会在../plugins/openproject-my_plugin目录下生成一个 Rails Engine 形式的插件骨架。命令背后的实现是 lib/generators/open_project/plugin/plugin_generator.rb从中可以看到生成器的工作方式默认插件名openproject-new-plugin默认输出目录vendor/gemsplugin_generator.rb通过full_name统一拼装为openproject-plugin_name命名plugin_generator.rb会依次生成插件根目录、lib目录和bin目录plugin_generator.rb。生成后建议更新插件根目录下的openproject-my_plugin.gemspec。提示除了生成新插件也可以直接克隆openproject-proto_plugin示例插件并在此基础上改造。2.2 如何把插件接入 OpenProject在根目录的Gemfile.plugins中声明依赖即可参考 创建 OpenProject 插件group :opf_plugins do gem openproject-my_plugin, :path ../plugins/openproject-my_plugin end如果文件中已有opf_plugins组只需把gem行加入该组。随后安装bundle install2.3 生产环境如何部署插件FAQ 链接指向两种生产部署方式Docker 容器在 Docker 安装方式中挂载插件详见 Docker 安装文档DEB/RPM 打包安装详见 添加插件DEB/RPM 包。DEB/RPM 方式的核心步骤如下来自 plugins 配置文档创建自定义 Gemfile例如/etc/openproject/Gemfile.customgroup :opf_plugins do gem openproject-gitlab_integration, git: https://github.com/btey/openproject-gitlab-integration.git end通过配置项告知安装包使用该 Gemfileopenproject config:set CUSTOM_PLUGIN_GEMFILE/etc/openproject/Gemfile.custom若插件涉及 Angular 前端代码还需重新编译前端资源会安装 npm 依赖并显著增加磁盘与内存消耗官方提示 Angular CLI 生产构建至少需要 4GB 内存openproject config:set RECOMPILE_ANGULAR_ASSETStrue重新运行安装器完成重新打包、迁移与资源预编译sudo openproject configure2.4 插件类型与发布流程创建插件文档中还给出了值得注意的类型划分纯后端插件Rails Engine 形式的 Gem前端插件以 npm 模块形式打包需在插件根目录包含package.json自己负责加载图片、样式和 I18n 翻译翻译经 Rails 从config/locales/js-locale.js拾取混合插件Hybrid同时包含Gem::Specification与package.json既扩展 Rails 又扩展前端在Gemfile.plugins的:opf_plugins组中声明后运行bundle install前端构建管线Angular CLI esbuild会自动打包其资源。注意混合插件的 npm 依赖解析目前尚未完善。发布插件的流程要点包括代码审查、解决许可与版权问题可借助rake copyright:authors:show[../Path/to/repository/]与rake copyright:update[path_to_plugin]任务、完善 README 与 gemspec、创建 release 标签如release/1.0.2、gem build name.gemspec后gem push name-version.gem发布到 RubyGems。三、OpenProject 的 2FA 短信网关用的是哪家可以改吗结论OpenProject 使用 MessageBird 作为 SMS 短信网关FAQ 撰写时该配置不可更换。不过从当前仓库的源码来看2FA 模块实际上已经抽象出了可插拔的 Token Strategy 机制存在多个实现——FAQ 的结论需要结合这一现状来理解。3.1 源码证据MessageBird 策略实现MessageBird 策略的实现位于 modules/two_factor_authentication/lib/open_project/two_factor_authentication/token_strategy/message_bird.rb关键信息标识符为:message_bird支持sms和voice两种通道message_bird.rb通过message_bird_client以配置中的apikey创建客户端message_bird.rb发送 SMS 时设置validity: 720720 秒 15 分钟登录令牌有效期减 3 分钟缓冲并检查totalDeliveryFailedCount判断投递是否失败message_bird.rb语音通道通过voice_message_create发送支持多达 26 种语言含zh-cn并利用break标签为 TTS 播报加入停顿message_bird.rb发起方originator固定为OpenProject代码中留有 TODO 提示其长度不能超过 11 个字符message_bird.rb收件人手机号会去除与空格后再传给 MessageBirdmessage_bird.rb。3.2 策略选择机制并非只有一家token_strategy目录下共有 6 个策略文件base.rb、developer.rb、message_bird.rb、sns.rb、totp.rb、webauthn.rb见 token_strategy 目录。其中Sns策略通过 AWS SDKaws-sdk-sns发送短信要求配置access_key_id、secret_access_key、region三项sns.rbDeveloper策略是开发环境专用直接拒绝在生产环境使用见 developer.rb。策略的管理与校验集中在 token_strategy_manager.rb它遍历已注册的活动策略并逐一执行validate!同时保证每种设备类型只被一个策略注册。因此从源码结构看短信/语音网关已经具备可替换的策略抽象——实际可用的网关取决于当前构建中注册并激活的策略。3.3 SMS 设备模型SMS 作为 2FA 设备其模型位于 modules/two_factor_authentication/app/models/two_factor_authentication/device/sms.rb约束包括phone_number必填、对同一用户唯一且必须匹配\A(?:\(?:[0-9][- ]?)[0-9])?\z的国际格式sms.rb默认通道为sms可切换为voicesms.rb界面展示时会脱敏手机号仅保留首尾redacted_identifiersms.rb。3.4 对 FAQ 结论的正确理解综合来看FAQ 中使用 MessageBird、目前无法更换的表述反映的是当时默认/内置网关即为 MessageBird 的现状而从当前代码可以推断网关实现已被抽象为 Token Strategy 并可扩展。若你需要在生产环境使用其他短信服务商应优先查阅当前版本的 2FA 配置文档与策略注册机制确认你所用版本支持哪些策略而不是假设只有 MessageBird 一条路。四、总结三个 FAQ 问题的快速索引问题官方结论仓库依据有没有数据库 ER 图没有数据库结构随升级持续变化不建议数据库层集成db/migrate 下 269 个迁移文件插件开发文档在哪文档有限以 创建 OpenProject 插件 与openproject-proto_plugin示例为主lib/generators/open_project/plugin/plugin_generator.rb2FA 短信网关是哪家MessageBirdFAQ 撰写时不可更改modules/two_factor_authentication 中的 token_strategy 实现开发者在做数据库集成、插件扩展或 2FA 改造前建议先通读上述源码与文档以当前版本的实际实现为准——OpenProject 的演进速度决定了文档结论与代码现状之间可能存在的时差源码才是最终的事实来源。【免费下载链接】openprojectOpenProject is the leading open source project management software for product, project and portfolio management. A powerful Jira alternative with agile planning, issue tracking, roadmaps, Gantt charts, time tracking, collaboration features, and more. Available on premises or in the cloud. ⭐ Star us on GitHub项目地址: https://gitcode.com/GitHub_Trending/op/openproject创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表