准备试试禅道,简单记录一下。
注意,本文提到的禅道,指代禅道 开源版18.11。
安装
禅道有提供Linux下的一键安装包,也有用于Debian和Ubuntu的Deb包。
安装后,apache的配置文件位于:
1 |
|
在该文件内,可以修改监听地址等,比如:
1 |
|
以便于配置nginx作为反向代理。
php配置文件位于
1 |
|
在该文件内,通过log_errors
设置成on,可以启用日志记录。路径在/opt/zbox/logs/php_error_log
.
另外,配置文件/opt/zbox/app/zentao/config/my.php
中 $config->debug
,也用于配置日志。日志目录位于 /opt/zbox/app/zentao/tmp/log
一些命令
- 启动:
/opt/zbox/zbox/start
- 停止:
/opt/zbox/zbox stop
- 重启:
/opt/zbox/zbox restart
- 检查:
/opt/zbox/zbox check
ZBOX是禅道官方在linux下面运行的apache, php, mysql一键安装包。
插件学习
禅道的扩展系统,从16.5版本起,其行了比较大的重构。
感觉上,对插件开发挺不友好的,官方文档似乎很不全,第三方插件少,可能我没找到原因
基本机制
禅道有一个个的模块组成:
- project
- user
- admin
- product
- job
- ...
每个模块又按照mvc进行划分M V C三层和辅助config、lang、css、js:
- control:控制层
- model:模型层
- view:视图层
- config:配置
- lang:语言
- css:样式
- js:脚本
对已有模块扩展(直接在对应ext目录下):
1 2 3 4 5 6 7 8 |
|
对新的模块,都在extension目录下。包含ext外的基本文件,和ext下的的扩展文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
打包规范
需要一个doc目录。不知道怎么回事,越看越看不懂,特别是releases...
doc目录下面包含了插件的配置信息,按照语言进行存储,比如英文版本的,存为en.yaml,中文zh-cn.yaml
插件的配置文件采用yaml格式,里面包含了插件的基本信息以及历次版本的发布信息。
新建模块
按照zentaoPHP框架结构,在插件目录(extension/custom
)下创建子目录,比如ldap,然后,按照预定,分别实现对应的control,model,view,css,js,lang等概念。
比如ldap插件,在extension/custom/ldap
目录下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
对比官网说法,这个插件的config.php位置似乎有问题,应该在 config/config.php 下?,不过官方extension之外的标准模块,config.php都是直接用的。
对model扩展
前面的ldap模块,对user的model层进行了扩展,extension/custom/user
1 2 3 4 5 6 7 |
|
禅道有多种方法扩展model层。此处是通过在 ext/model/ 目录下面建立相应的 以方法为名的文件。
禅道框架在执行的时候,会自动将扩展目录下面的identify.php里面的代码,替换misc/model.php中的identify方法的代码。如果是新增的方法,则会追加到misc/model.php的代码中,最终生成一个合并之后的model类文件。
对语言扩展
语言的扩展文件存放在ext/lang/ 目录下面。按照不同的语言建立相应的目录,比如zh-cn下面,可以有多个文件,zentaoPHP框架会 自动加载该目录下面所有以.php结尾的文件。
比如 Ldap,对admin模块进行扩展,在extension/custom/admin
下:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
对配置扩展
每个模块配置文件的扩展文件存放在 ext/config/ 目录下面,可以有多个文件,zentaoPHP框架会自动加载该目录下面以config开头的.php文件。这样不同的扩展可以有自己的配置项,彼此之间不会冲突。
在前面的 `extension/custom/user``下,可以配置的扩展(文件名无所谓):
1 2 3 4 5 6 7 |
|
配置
nginx 配置
可以使用nginx作为反向代理,以便于引入ssl支持等,简单配置一下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
|
注意:配置行 proxy_set_header X-Forwarded-Proto $scheme;
很关键,不然用户在https模式下无法登录。
这是因为在文件/opt/zbox/zbox/app/zentao/framework/base/router.class.php
中,有如下处理CSRF的代码。网上不少人遇到的https无法登录的问题,给出的方案就是:直接注释掉它们。这也...太简单粗暴了。
1 2 3 4 5 6 7 8 9 10 11 |
|
另外location = /
配置行,只为了直接跳转到登录页面,而不是停留在默认的广告界面,在手动点击登录开源版本。
除此之外,在局域网内,可以设置根据主机名或者非ssl端口,直接进行跳转到ssl端口(配置文件加入如下若干行):
1 2 3 4 5 6 7 8 9 10 |
|
Ldap配置
禅道官方没有给开源版提供Ldap支持。官网有如下一个链接,只支持到禅道7.3版本,早过时了。
在Github有不少用于禅道的LDAP插件:
- twoBxx/zentao-ldap-plugin: Zentaopms LDAP plugin (github.com)
- luzi2000/zentao-ldap: 根据前人总结的ldap工程改编而来,支持17.5版本 (github.com)
- DYSDF/zentao-ldap (github.com)
- iboxpay/ldap: 禅道开源版 LDAP插件 (github.com)
- shynome/zentao-ldap: 禅道 zentao 11.5 可用的 ldap 插件 (github.com)
- Mohamed-ncib19/Zentao-LDAP-plugin (github.com)
- ...
东西最多,但一眼看去,感觉都不太靠谱...,
尝试1
先试试第一个 twoBxx/zentao-ldap-plugin,下载后,做成zip压缩包 ldap.zip (不包含顶层目录)。
插件安装
在界面等登陆后,通过 后台->插件管理
调出插件管理界面。
选中前面的 ldap.zip,强制安装(因为版本不完全匹配)。
安装后到 后台->系统设置->LDAP
页面进行配置
LDAP配置
选项 | 示例值 | 必填 | 默认值 |
---|---|---|---|
基础配置 | |||
协议 | ldap://,ldaps:// | T | ldap:// |
LDAP服务器 | ldap.test.com | T | |
端口 | 389,636 | T | |
searchDN | ou=users,dc=test,dc=com | T | |
BindDN | cn=admin,dc=test,dc=com | T | |
BindDN 密码 | ou=users,dc=test,dc=com | T | |
属性配置 | |||
账号字段 | uid/sAMAccountName | T | uid |
默认用户组 | 下拉选择 | F | 管理员 |
F | |||
姓名字段 | cn | T | cn |
手机号 | mobile | F | mobile |
界面修改的配置,写入到文件extension/custom/ldap/config.php
中。
保存操作位于extension/custom/ldap/control.php
中
注意,由于ldap_get_entries() 返回的数组中所有键名都是小写的,所以uid设置samaccountname也应该都用小写字符。
问题:ldap连接测试不过
找到一个bug
- extension/custom/ldap/control.php 文件内,sssList在lang中而不是config中:
1 2 3 |
|
改为:
1 2 3 |
|
非tsl下的连接测试通过。
问题:任然无法同步账户
使用ldap和389端口,ldap连接没问题。
但是Ldap用户还是无法登录,可能和用的 uid 取的 'sAMAccountName' 有关(改写全小写samaccountname)没有改善。
排查extension/custom/ldap/model.php,由于AD中不是所有用户都配置了email和mobile字段,需要确保这两个字段不为null:
1 2 3 4 5 6 |
|
手动同步账户通过。
问题:LDAP账户依然无法登录
需要排查 extension/custom/user/ext/model/identify.php
...
问题:tls
但是ldaps和 636默认还是不行。可能和证书不受信任有关。用ldapsearch进行测试。
尽管忽略证书校验,使用ldapsearch没问题
1 |
|
尝试2
试试 luzi2000/zentao-ldap
很顺利
插件安装
在界面等登陆后,通过 后台->插件管理
调出插件管理界面。
选中前面的源码对应压缩包 zentao-ldap.zip,强制安装(因为版本不完全匹配)。
安装后到 后台->系统设置->LDAP
页面进行配置
配置
选项 | 示例值 |
---|---|
基础配置 | |
LDAP服务器 | ldap.test.com |
BindDN | cn=admin,dc=test,dc=com |
BindDN 密码 | ou=users,dc=test,dc=com |
属性配置 | |
baseDN | ou=users,dc=test,dc=com |
Serach Filter | - |
账号字段 | samaccountname |
姓名字段 | cn |
没有tls以及端口设置,功能弱一些,但装完作为demo可以用
参考
- zentaoPHP二次开发简介 - 禅道二次开发 - 易软天创开发者中心 (easycorp.cn)
- 禅道扩展机制 - 技术笔记 - 禅道开源项目管理软件 (zentao.net)
- 禅道项目管理软件打包规范1.1版本 - 禅道二次开发手册 - 禅道开源项目管理软件
- https://github.com/easysoft/zentaopms