禅道安装全过程常见报错及解决方法汇总 - zentao报错合集 - 项目管理工具安装 - devops部署指南 - linux服务器部署 - php环境配置 - mariadb数据库问题 - Nginx与Apache兼容

由于我的app即将上线,所以要对于版本的bug进行修改,让上线更完善,所以就准备找个能够迭代项目和bug管理的工具,在国内能想到的,jira禅道这些都被广泛使用,但是jira很多功能都是通过插件扩展的,我也懒得查了,直接奔着禅道去了,但是内心其实也是蛮嫌弃的,毕竟php的,现在谁家好人还用php呀,但是好就好在开源的版本小团队就够用了,于是开始安装。

本来觉得以我现在对于云原生的熟悉,及现在的大语言模型,搞定安装那是手拿把掐了,但是我还是图内屋,很坑逼的一个程序。

首先,如果你使用的是外部的mysql,我使用的就是外部的mysql,所以如果你不在环境变量里声明MYSQL_INTERNAL=false的话,那么,它就是用的内置的mysql,这个点被我解决的很快,本以为一路顺顺利利,马上安装完毕,差点就半场开香槟。

第二个问题出现了,就是始终无法跳到第三步,第二步始终报响应是html,不是有效json结构。这个问题解决可费老劲了,大语言模型出不了半点力,你把问题抛给它,它回答你基本都是什么数据库用户权限的问题,实际这个问题跟禅道的云原生部署及对于项目旧代码的兼容应该有关系,可能是为了不破坏程序目录源码的结构,所以你项目的程序目录和自定义配置文件的目录其实是不一致的,如果你用过国内的一些程序,比如discuz之类的,你应该对于这种模式蛮熟悉的,你想改template的效果,那么,你新建了主题,其实建立默认同名default主题目录下的文件,优先级都高于default目录下的文件,从而样式模板文件之类的都使用你自定义主题的(覆盖default主题),禅道也是这种思想,但是搞的啰里叭嗦极不清晰,/apps/zentao/config目录下的config.php文件实际就是默认系统使用的配置文件,而你需要将扩展的对象属性设置值放在my.php文件,如果你直接做目录绑定zentao_data/config:/apps/zentao/config将属性放在config.php是无效的,因为config.php如果启用$config->framework->filterCSRF = false;,对象还没初始化完毕,会抛出你在null对象上赋值,我尝试放在最后,但是由于my.php是软链接进来的,当时做了本地容器目录映射,所以这里始终通不过,我于是立马停下了安装过程,因为耽误了好多时间,必须仔细思量一番,最终,我还是研究明白了它的意图,并且不要对于/apps/zentao/config进行本地映射。为什么这么说呢?我来说明,能够正常让程序运行的方式(第二步mysql配置跳安装,我从开头就确认的问题,虽未解决,但是抛错是html,不是有效json结构已然明确)就是不做目录映射,但是由于我用的nginx转发,必须开启$config->framework->filterCSRF = false;才能第二步跳第三步,所以你又不得不目录映射,此时,你可能会想,那就目录映射呗,但是如果只对于/apps/zentao/config做目录映射,它下辖的子文件my.php实际是来自于软链接(/data/zentao/config/my.php),如果你不对这个目录也映射的话,实际本地宿主机又没有这个目录,导致未写入配置文件这个新报错,如果你对这个目录映射,会导致软链接的循环引用,想解决循环引用要删除/apps/zentao/config目录下的my.php文件,但是如果你删除了这个文件,由于目录绑定的强制同步关系,又无法有效在项目运行时做my.php文件的软链接,由于这种种问题的产生,最终,找到了解决方案,就是不做/apps/zentao/的任何绑定,因为它就属于程序目录,不需要动,你只要把它关联的覆盖文件my.php文件正确生成并覆盖即可,如下:

    volumes:
    - ./zentao_data/zentao:/data/zentao      # 挂载代码,只读

这样即可将你的设置在对象初始化完毕进行参数指定,即$config->framework->filterCSRF = false;这个放在my.php才会生效,才会解决第二步跳第三步的问题。

你以为坑到这里就结束了,远远没有,接着数据库配置界面跳到初始化入库完成,我以为见到曙光了,没想到它还有被动技能,如果你不配置$config->customSession = true;,它在进入安装界面的时候,实际对于session的检查是完全通过的,但是如果你不配置又无法生成配置文件,所以如果你一直卡在“未写入配置文件”,看到前面安装过程,环境检测又全为绿色,原因就是你必须正确处理了my.php文件,让它形成有效挂载,才能正确软链然后被程序读到,才能进行后续的操作,换言之,声明$config->customSession = true;才会触发session目录的校验,你此时再做目录映射,给session目录设置可写权限,配置文件才会写入。

你以为这就完了吗?还没有,我发现数据库安装完了,未写入配置文件也消失了,向下一步跳的时候,又出现了响应html非有效json结构,又卡住了,我就开始在my.php中做各种测试,看是否它已经被/apps/zentao/config/config.php读到,系统运行是在基于我的配置文件,发现测试结果都有效,过程打印is_installed参数的值是true,但是最终写完配置文件,var_export整个对象,它又变成false,所以依然始终安装不成功,此时我查看config.php对于my.php的引入,发现它实际还要检验以下:

    environment:
      - ZT_INSTALLED=true

否则你程序安装步骤上走完全程,实际已安装,但是最终又被系统变量改回false,你始终安装不成功,而引入上面的环境变量就解决了此问题,至此,终于跳到了成功安装界面,安装结束。

回顾下我的整个安装过程,大家如果参照文档的话,其实是没有这些细节参考的,它给出的可能是基于内置的mysql(那即使基于内置的mysql,如果用docker swarm或者kubernetes方式能顺利安装成功吗?),我由于不是内置的mysql,感觉趟了很多坑,但是感觉即使内置的,如果你来安装,这些坑你估计也要趟一遍,好了,这篇文章就分享到这里,感谢大家阅读!

Avatar

Aisen

Be water,my friend.
扫码关注公众号,可领取以下赠品:
《夯实基础的go语言体系建设》645页涵盖golang各大厂全部面试题,针对云原生领域更是面面俱到;
扫码加微信,可领取以下赠品:
【完整版】本人所著,原价1299元的《爱情困惑者必学的七堂课》;
100个搞定正妹完整聊天记录列表详情点这里
【完整版】时长7小时,原价699元《中国各阶层男性脱单上娶指南》;