背景
有一套禅道12.0由其他团队运维,由于组织关系变更需要迁移,但是找不到原来的安装包,查看官方网站,最早只有18.0版本的安装包可以下载,通过DockerHub寻找docker镜像,也没有12.0,最早的只有12.2.stable,但好在是一个大版本,迁移时同时升级应该没有什么大问题。
容器部署
先启动12.2.stable,查看entrypoint脚本,确定禅道的目录为/app/zentaopms,使用apache2作为web服务器,内置MySQL为默认安装,确定需要映射的目录为
/app、/var/log/apache2、/var/log/mysql、/var/lib/mysql
编写compose文件
version: '3.9' services: easysoft: image: 'nexus.scgsdsj.com/easysoft/zentao:12.2.stable' environment: - MYSQL_INTERNAL=true volumes: - '/stash/zentao/data:/app/zentaopms' - '/stash/zentao/logs:/var/log/apache2' - '/stash/zentao/mysql/logs:/var/log/mysql' - '/stash/zentao/mysql/data:/var/lib/mysql' - '' ports: - '8080:80' container_name: zentao
启动容器,访问8080端口并完成初始化
备份老版数据
备份方法:使用管理员账号登录,后台=>数据=>备份;若没有管理员账号,也可以通过文件和MySQL命令进行备份。
备份数据一般如下
目录 | 说明 |
---|---|
202502260030481.code | 禅道的代码,正常不需要,有过自定义或者扩展插件的需要关注 |
202502260030481.file | 上传的附件 |
202502260030481.sql.php | 数据库导出(逻辑导出) |
若没有前两个,可能是设置了不备份代码和附件,修改设置重新备份,或者到数据目录的tmp下手动获取。
恢复数据并升级
复制备份数据到映射目录
## 以下都在宿主机执行 ## 1、复制附件 cp -r 202502260030481.file/upload/1/ /stash/zentao/data/www/data/upload/ ## 2、恢复数据库 # 删除备份文件的第一行 sed -i '1d' 202502260030481.sql.php # 将SQL中不符合时间规范的字段替换为 1970-01-01 sed -i 's/0000-00-00/1970-01-01/g' 202502260030481.sql.php # 修改文件名 mv 202502260030481.sql.php 202502260030481.sql # 导入数据,宿主机执行 docker exec -i zentao mysql -uroot -h127.0.0.1 -P3306 -p123456 zentao < 202502260030481.sql ## 3、复制升级文件 docker exec zentao cp /var/www/zentaopms/www/upgrade.php /app/zentaopms/www/
访问 http://your-ip:8080/upgrade.php 按指示升级即可
解决时间问题
尝试增加环境变量TZ=Asia/Shanghai
来修改时区,然而该镜像不支持,所以只有通过挂载文件了
准备两个文件
echo "Asia/Shanghai" >> /stash/zentao/timezone docker cp zentao:/usr/share/zoneinfo/PRC /stash/zentao/zoneinfo-PRC
修改compose文件
version: '3.9' services: easysoft: image: 'nexus.scgsdsj.com/easysoft/zentao:12.2.stable' environment: - MYSQL_INTERNAL=true volumes: - '/stash/zentao/data:/app/zentaopms' - '/stash/zentao/logs:/var/log/apache2' - '/stash/zentao/mysql/logs:/var/log/mysql' - '/stash/zentao/mysql/data:/var/lib/mysql' - '/stash/zentao/timezone:/etc/timezone' - '/stash/zentao/zoneinfo-PRC:/etc/localtime' ports: - '8080:80' container_name: zentao
重新创建容器并启动
docker compose down docker compose up -d