升级禅道新版本

旧版Docker镜像升级说明 分享链接 /book/zentaopms/1059.html?releaseID=17

作者:zhouyq 最后编辑:禅道-李锡碧 于 2024-04-01 09:39:46 浏览量:23751

一、为什么要升级?

  • 优化更新流程,不需要下载安装包,直接拉取新版镜像即可
  • 新版可以通过环境变量选择是否启用内置MySQL,方便对接外部MySQL
  • 新版原生支持Kubernetes部署
  • 旧版镜像2023年8月底停止更新

二、新旧版本对比

对比项 旧版 新版 说明
镜像大小 342Mb 204Mb 压缩后镜像大小
针对容器优化 新版优化了持久化目录、配置与安装流程
渠成应用市场 通过渠成应用市场安装
集成MySQL 新版可通过环境变量控制是否使用内置MySQL
对接外部MySQL 是,手动修改my.php 是,通过环境变量  
持久化目录 禅道代码+MySQL数据 禅道配置+用户数据 或 MySQL数据 新版镜像只需要挂载容器内 /data 目录
禅道升级 下载源码包覆盖程序 拉取新版本镜像  
Dockerfile开源 新版Dockerfile源码
docker-compose编排  
Kubernetes运行  
高可用部署  
PHP配置修改 手动 环境变量 新版通过环境变量设置PHP参数
Session存储 文件 文件 或 Redis 新版通过环境变量设置
PHP配置修改 手动 环境变量 新版通过环境变量设置PHP参数
配置SMTP 手动 环境变量  
配置LDAP 手动 环境变量 企业版、旗舰版支持
配置CI 手动 环境变量  
配置Git服务 手动 环境变量  

三、旧版升级流程

旧版升级流程.svg

3.1 备份数据

  • 命令行进入到旧版容器内执行
# 查找禅道容器ID,默认容器名为 zentao,请根据实际情况填写禅道容器名
cid=$(docker ps -q --filter name=zentao)
# 查看旧版禅道服务的持久化目录位置
docker inspect $cid | grep -B 1 "/www/zentaopms"                                                                                    
                "/tmp/zentao-db:/var/lib/mysql",
                "/tmp/zentao-files:/www/zentaopms"
--
                "Source": "/tmp/zentao-files",
                "Destination": "/www/zentaopms",
# 本示例的宿主机目录分配是:
# MySQL目录:/tmp/zentao-db
# 禅道目录:/tmp/zentao-files
# 进入到禅道容器内
docker exec -it $cid bash
# 查看当前运行的禅道版本
cat /www/zentaopms/VERSION
max4.1    # 记住这个版本号,升级新版镜像时要用到
# 通过命令行备份禅道数据
# 切换到禅道工作目录的bin目录
cd /www/zentaopms/bin
# 根据当前配置生成备份脚本
bash init.sh
Please input your php path:(example: /usr/bin/php)
/usr/bin/php
Please input zentao url:(example: http://localhost:88/zentao or http://localhost)
http://localhost
ztcli.sh ok
backup.sh ok
computeburn.sh ok
computetaskeffort.sh ok
dailyreminder.sh ok
checkdb.sh ok
syncsvn.sh ok
syncgit.sh ok
sendmail.sh ok
sendwebhook.sh ok
createcycle.sh ok
initqueue.sh ok
checkbuildstatus.sh ok
execcompile.sh ok
deletelog.sh ok
encrypt.sh ok
cron.sh ok
# 通过backup.sh脚本备份禅道
bash backup.sh
备份成功!
# 备份文件存在 /www/zentaopms/tmp/backup 目录,本示例文件如下:
ls -1 /www/zentaopms/tmp/backup
202303150937474.code       # 代码备份
202303150937474.file       # /www/zentaopms/www/data 目录备份
202303150937474.sql.php    # 数据库备份
summary                    # 本次备份统计信息 

3.2 启动新版禅道镜像

3.2.1 创建新版禅道数据目录

本示例使用 /data/zentao 作为新版禅道得持久化目录,要保证 /data 分区或 / 分区有足够的剩余空间。

mkdir /data/zentao 

3.2.2 下载镜像,启动服务

禅道镜像内包含MySQL服务,默认不启动,如果启动内置的MySQL服务,需要设置环境变量 MYSQL_INTERNAL=true

拉取镜像

docker pull hub.zentao.net/app/zentao:max4.5 

启动禅道

docker run -d \
--name new-zentao \
-v /data/zentao:/data \
-p 8080:80 \
-p 13306:3306 \
-e MYSQL_INTERNAL=true \
hub.zentao.net/app/zentao:max4.5 

注意: 


  • 启动命令设置了 MYSQL_INTERNAL=true 环境变量,会在容器内启动MySQL服务 
  • 请根据实际情况设置容器名称,本示例使用 new-zentao 是为了与旧版的 zentao 名称区分 
  • 请根据实际情况设置端口映射,本示例将容器内的80端口映射为8080,3306映射为13306


查看启动日志

docker logs -f zentao 

日志信息如下:

 14:18:19.19
 14:18:19.20 Welcome to the Easysoft ZenTao max4.5 container
 14:18:19.20 Subscribe to project updates by watching https://www.zentao.net
 14:18:19.20 Submit issues and feature requests at https://www.zentao.net/ask.html
 14:18:19.20
 14:18:19.21 INFO  ==> Prepare persistence directories.
 14:18:19.46 INFO  ==> Render php.ini with environment variables.
 14:18:19.46 INFO  ==> render template php.ini for amd64
 14:18:19.47 INFO  ==> Render apache sites config with envionment variables.
 14:18:19.49 INFO  ==> Copy mysql data to /data/mysql/data
 14:18:19.49 INFO  ==> Check whether the MySQL is available.
 14:18:19.50 WARN  ==> Waiting MySQL 1 seconds
 14:18:19.51 WARN  ==> Please open the browser to complete the installation through the wizard.
 14:18:19.52 INFO  ==> Render mysql config with envionment variables.
230804 14:18:19 mysqld_safe Logging to '/data/mysql/logs/mysql_error.log'.
230804 14:18:19 mysqld_safe Starting mariadbd daemon with databases from /data/mysql/data
 14:18:20.51 INFO  ==> MySQL is ready.
 14:18:20.51 WARN  ==> Please open the browser to complete the installation through the wizard. 

注意:

  • 容器启动时会根据环境变量对PHP、Apache、MySQL等服务进行配置,支持的环境变量
  • 容器启动时,会检查MySQL服务是否可以正常连接,默认情况下等待30秒,如果30秒内不能连接MySQL,容器会自动退出
  • 首次启动容器时,最后会打印输出 Waiting for the installation wizard to complete. 看到这个消息,请打开浏览器,完成禅道安装向导。

3.3 导入备份的数据

在导入备份的数据之前,先要了解新版镜像的持久化目录对应关系:

禅道代码目录 容器持久化目录 说明
/apps/zentao/www/data /data/zentao/www/data 禅道用户上传的文件目录
/apps/zentao/config/my.php /data/zentao/config/my.php 禅道主配置文件
/apps/zentao/config/ext /data/zentao/config/ext 存放禅道插件的目录
/apps/zentao/config/license /data/zentao/config/license 禅道授权目录
/apps/zentao/extension/custom /data/zentao/extension/custom 禅道自定义插件目录
/apps/zentao/module/extension/ext /data/zentao/module/extension/ext 禅道企业版/旗舰版插件目录
/apps/zentao/tmp/backup /data/zentao/tmp/backup 备份目录
/apps/zentao/tmp/log /data/zentao/tmp/log 日志目录
/apps/zentao/tmp/template /data/zentao/tmp/template 模板目录

注意:

  • 为了实现以上目录的持久化存储,新版禅道镜像对需要做持久化的目录做了软连接处理,首次启动时会在 /data 创建目录,并软连接到容器内的禅道代码目录,详情参加:源码:持久化目录处理
  • 将旧版的备份恢复到新版的操作要尽量选用低峰,否则会造成数据不一致。

3.3.1 恢复文件

恢复文件时建议关闭新旧版的禅道服务,上文得到的旧版禅道目录是 /tmp/zentao-files 因此,需要将该目录下需要持久化的目录复制到新版镜像持久化目录即可,不需要将所有文件复制到新版持久化目录。

# 关闭旧版禅道服务
docker stop zentao
# 关闭新版禅道服务
docker stop new-zentao
# 将旧版需要持久化的目录复制到新版目录
# 此步骤在宿主机执行
# www/data             -- 禅道用户上传的文件目录
cp -rp /tmp/zentao-files/www/data /data/zentao/www/
# config/my.php        -- 禅道主配置文件
cp -rp /tmp/zentao-files/config/my.php /data/zentao/config/my.php
# config/ext           -- 存放禅道插件的目录
cp -rp /tmp/zentao-files/config/ext /data/zentao/config/
# config/license       -- 禅道授权目录
cp -rp /tmp/zentao-files/config/license /data/zentao/config/
# extension/custom     -- 禅道自定义插件目录
cp -rp /tmp/zentao-files/extension/custom /data/zentao/extension/
# module/extension/ext -- 禅道企业版/旗舰版插件目录
[ -d /tmp/zentao-files/module/extension/ext ] && cp -rp /tmp/zentao-files/module/extension/ext /data/zentao/module/extension/ 

3.3.2 修改my.php配置

vi /data/zentao/config/my.php
<?php
$config->installed       = true;
$config->debug           = false;
$config->requestType     = 'PATH_INFO';
$config->timezone        = 'Asia/Shanghai';
$config->db->host        = '127.0.0.1';  # 使用内部的MySQL
$config->db->port        = '3306';
$config->db->name        = 'zentao';
$config->db->user        = 'root';
$config->db->encoding    = 'UTF8';
$config->db->password    = '123456';     # 默认密码
$config->db->prefix      = 'zt_';
$config->webRoot         = getWebRoot();
$config->default->lang   = 'zh-cn'; 

注意:

  • 如果你之前使用的就是内置MySQL,且没有修改过默认密码,my.php 可以不用修改。
  • 如果你修改了默认的数据库密码,请将MySQL的密码修改为更新后的密码。
  • 如果你使用的是外部的MySQL,my.php不需要修改。

3.3.3 恢复数据库

启动新版禅道镜像:

# 启动之前,先确认旧版禅道容器是否已经清理
docker rm zentao
# 启动新版禅道
docker run -d \
--name zentao \
-v /data/zentao:/data \
-p 8080:80 \
-p 13306:3306 \
-e MYSQL_INTERNAL=true \
hub.zentao.net/app/zentao:max4.5
# 查看服务状态
docker logs -f zentao 

3.1 备份的数据库导入到新启动的MySQL:

# 删除备份文件的第一行
sed -i '1d' 202303150937474.sql.php
# 将SQL中不符合时间规范的字段替换为 1970-01-01
sed -i 's/0000-00-00/1970-01-01/g' 202303150937474.sql.php
# 修改文件名
mv 202303150937474.sql.php 202303150937474.sql
# 导入数据,宿主机执行  

mysql -uroot -h127.0.0.1 -P13306 -p zentao < 202303150937474.sql

# 导入数据完成后,手动重启zentao容器

docker restart zentao

四、新版禅道镜像的版本升级

从旧版镜像切换到新版镜像,或者直接使用新版镜像后,升级禅道只需要拉取最新的禅道镜像即可。

切记:升级前通过命令行或者禅道后台备份数据

本示例介绍如何从 禅道 旗舰版 4.5 升级到 4.6

# 拉取禅道旗舰版 4.6 的镜像
docker pull hub.zentao.net/app/zentao:max4.6 

4.2 关闭旧版容器,启动新版镜像

# 关闭旧版容器
docker stop zentao
# 启动新版镜像
docker run -d \
--name zentao \
-v /data/zentao:/data \
-p 8080:80 \
-p 13306:3306 \
-e MYSQL_INTERNAL=true \
hub.zentao.net/app/zentao:max4.6 

五、其他

5.1 将Session存储到Redis

新版禅道镜像支持通过环境变量更改Session的存放类型,如下:

变量名 默认值 说明
PHP_SESSION_TYPE files php session 类型,files 或 redis
PHP_SESSION_PATH /data/php/session php session 存储路径

示例:

docker run -d \
--name zentao \
-v /data/zentao:/data \
-p 8080:80 \
-p 13306:3306 \
-e MYSQL_INTERNAL=true \
-e PHP_SESSION_TYPE=redis \
-e PHP_SESSION_PATH=tcp://192.168.1.88:6379 \
hub.zentao.net/app/zentao:max4.6 

5.2 其他功能扩展

新版禅道镜像会针对禅道的功能增加不同的环境变量,通过环境变量开启和变更相关的功能与配置,更多详情参见:支持的环境变量

5.3 其他链接

六、历史记录

V1.0

  • 首版

V2.0

  • 内置MySQL,默认情况下不启动,可以通过设置MYSQL_INTERNAL=true 启用内置MySQL。
  • 降低部署成本,运行方式与旧版保持一致,高级用户可选择docker-compose的方式运行。
  • 18.6 版本禅道镜像会同步更新国内镜像,以后会使用 hub.zentao.net 的域名,方便国内用户拉取镜像。
  • 镜像的运行时(Apache、PHP、MySQL)会按照官方的稳定版一起发布,可及时修复环境安全漏洞。
  • 支持amd64与arm64 架构,满足国产信创需求。
评论列表
🎯
直爽的骆驼 2025-02-19 14:51:22 回复
#11 {main}ERROR: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'column' in 'SELECT' ,the sql is: 'SELECT id,kanban,`column`,lane FROM `zt_kanbancard`' <p>The sql is: SELECT id,kanban,`column`,lane FROM `zt_kanbancard`</p> in lib/base/dao/dao.class.php on line 1856, last called by lib/base/dao/dao.class.php on line 992 through function sqlError.
in /apps/zentao/framework/base/router.class.php on line 3272 when visiting /upgrade.php?m=upgrade&f=execute&fromVersion=12_2
12.2 升级到最新版报错
🎨
星星上的书包 2024-11-25 09:24:28 回复
我的禅道是开源版18.10 docker镜像是旧版的18.5 现在想升级到开源版21.1
现在的问题是备份之后生成的sql脚本有问题,几十万条数据有很多表的字段比如 editedDate reviewedDate 是datetime类型 但生成的sql脚本给的默认值都是空字符传''执行脚本就会报错
回复
可以把数据库的sql_mode设置为空,然后重新还原sql脚本试试。
🍊
神勇威武的柑橘 2024-10-22 17:46:45 回复
您好,我想问一下 我做完上述操作以后 直接访问页面直接302不让进了 看docker logs 说是什么数据库 php 的问题
回复
解决此问题,需要提供更多的信息。
请联系客户经理,邀请您加入技术交流群沟通。
我们在群中沟通更多细节。
🍬
愤怒的牛排 2024-04-28 12:33:32 回复
请问公司现在用的是18.2版本禅道 php是5.4 版本。如果想要升级到20版本 并升级php 8版本需要怎么操作才能保证数据全部导入。求一份详细升级流程。
回复
如果是docker 安装的话,可以参考docker升级文档:https://www.zentao.net/book/zentaopms/586.html。新的镜像中的php是8.1版本。
回复
目前部署在windows 服务器上。用的一键集成环境。
回复
可以参考在另一个页面给您的回复:https://www.zentao.net/download/20.0.beta2-83490.html
🏓
李宏 2024-04-01 00:34:22 回复
在 3.3.1 恢复文件 中,第一个复制文件的命令,应该将原来的 www/data 复制到新目录的 www/data 中,而不是 www 文件夹下(会导致所有文件无法正常被找到)
回复
谢谢反馈,这儿我们调整下。
🌯
禅道5440 2024-01-30 10:03:48 回复
这边数据库导入完后,出现两个问题:
问题1、项目菜单中项目列表未出现,zt_project相关表中均有数据;是否还有其他表
问题2、之前的附件已同步,但是产品的需求列表中图片均未展示;zt_file表有记录,且新建的图片附件存储位置与同步过来的位置相同,但是新建的图片可以展示
回复
问题 1 可以联系下官网顶部商务QQ,邀请加入技术交流群,群里沟通下。
问题 2 chmod -R 777 给附件目录下权限,再看看
回复
问题2的话 应该不是目录权限的问题,因为新建的图片是可以显示的;保存的目录是同一个:/apps/zentao/www/data/upload;是不是库表有什么漏了,目前这张表是有数据的
回复
/apps/zentao/www/data/upload/1/ 应该是这个目录
回复
是这个:/apps/zentao/www/data/upload/1/202401
刚发现去年的需求图片显示正常,今年1月的显示不出来,没找到原因
回复
联系下官网顶部商务QQ,邀请加入技术交流群,群里沟通下。
📦
禅道4207 2024-01-16 16:50:02 回复
3.3.3 恢复数据库
请问这个章节里,mysql -uroot -h127.0.0.1 -P13306 -p zentao < 202303150937474.sql
这个命令不是导入旧版的数据库么,能完成数据库升级的吗???
是导入后,再启动容器,能自动执行升级数据库的脚本?
回复
这还没到升级那一步呢
看了下 ,大体流程是启动一个新容器(不影响旧容器运行), 数据导入这个新容器里面,再升级(正文第四大段)
目前这个倒入流程在第三部分
🚢
禅道7875 2024-01-10 11:23:43 回复
您好,我们是从15.7.1 更新到18.5版本,请问一下旧版的sql文件需要做什么修改么,我看表结构的更改挺大的,旧版的数据可以直接导入么
回复
数据导入需要相同版本的禅道,建议先升级到18.5版本,再进行数据导入。
🚀
Qi 2023-10-17 10:07:37 回复
-v /data/zentao:/data 挂载的是/data/zentao ,复制文件那里写错路径了:
cp -rp /tmp/zentao-files/www/data /data/zentao/www
后边应该是: /data/zentao/zentao/www 其他同理
回复
谢谢反馈,需要根据具体持久化目录判断的。手册加了“本示例的宿主机,目录分配说明”。
🦌
Woo 2023-10-08 13:09:25 回复
您好,升级完成后访问提升升级成功,但是访问一直被302到upgrade.php
回复
目前升级后的版本是多少?
去官网下载这个版本的源码包 (.zip结尾的文件包)
解压文件宝得到zentaopms/www/upgrade.php文件
将这个文件放在zentao/www/目录下,看看再升级到什么版本
回复
升级前18.3升级后18.7
回复
显示 “恭喜您!您的禅道已经成功升级。” 但是点击 “访问禅道” 时候还是一直302,且www下的upgrade.php被删除了
回复
升级完成还是提示升级这个问题,一般是源码包文件覆盖不全导致的问题

可以看下 zentao/VERSION 这个文件的内容和 数据库里面 zt_config 表里面 `key`='version' 的 value 的值 是否一致 ?

或者重现覆盖代码,再升级一遍看看(操作前记得数据库要还原到升级前的状态)

另外咱们进支持群里面看看这个问题吧
回复
显示 “恭喜您!您的禅道已经成功升级。” 但是点击 “访问禅道” 时候还是一直302,且www下的upgrade.php被删除了
回复
升级完成还是提示升级这个问题,一般是源码包文件覆盖不全导致的问题

可以看下 zentao/VERSION 这个文件的内容和 数据库里面 zt_config 表里面 `key`='version' 的 value 的值 是否一致 ?

或者重现覆盖代码,再升级一遍看看(操作前记得数据库要还原到升级前的状态)

另外咱们进支持群里面看看这个问题吧
回复
升级完成还是提示升级这个问题,一般是源码包文件覆盖不全导致的问题

可以看下 zentao/VERSION 这个文件的内容和 数据库里面 zt_config 表里面 `key`='version' 的 value 的值 是否一致 ?

或者重现覆盖代码,再升级一遍看看(操作前记得数据库要还原到升级前的状态)

另外咱们进支持群里面看看这个问题吧
回复
我也遇到过。最后重新导入数据库,重新启动容器,再来一遍升级成功的
张淑钧
高级客户经理
13156280939
2082428410
统一服务热线 4006-8899-23
我要提问提问有任何问题,您都可以在这里提问。 问题反馈反馈点击这里,让我们聆听您的建议与反馈。