引言
禅道 是一款国产的开源项目管理软件,主要用于敏捷开发、测试管理和缺陷跟踪。它集成了项目管理、产品管理、质量管理、文档管理、组织管理和事务管理等功能,适合软件开发团队使用。
一、禅道的主要功能:
1.1产品管理:
- 需求管理:收集、整理和跟踪用户需求。
- 产品计划:制定产品发布计划,关联需求与任务。
- 发布管理:记录产品版本历史和功能变更。
1.2项目管理
- 任务分解:将项目拆分为任务,分配给团队成员。
- 进度跟踪:通过燃尽图、甘特图等工具监控项目进度。
- 团队协作:支持任务指派、工时记录和进度反馈。
1.3质量管理
- 测试用例管理:创建、执行和跟踪测试用例。
- 缺陷跟踪:记录、分配和验证Bug,关联到需求或任务。
- 测试报告:生成测试结果和缺陷统计报告。
1.4文档管理
- 存储项目文档、技术资料和会议记录,支持版本控制。
1.5流程自定义
- 支持工作流、权限和字段的自定义,适应不同团队流程。
1.6多工具集成
支持与Git、SVN、Jenkins、钉钉、企业微信等工具集成。
二、禅道的适用场景:
- 敏捷开发团队:支持Scrum、Kanban等敏捷方法论。
- 传统瀑布模型团队:提供项目计划、任务分解和进度跟踪。
- 测试团队:管理测试用例、Bug跟踪和测试报告。
- 产品经理:管理需求、版本规划和发布跟踪。
三、禅道的优势:
- 开源免费:提供社区版,可免费使用和定制。
- 一体化管理:覆盖项目全生命周期,减少工具切换成本。
- 灵活定制:适应不同团队的流程和需求。
- 国产化支持:符合国内团队的使用习惯,提供本地化服务。
四、禅道 Docker Compose 部署方案
1. 目录结构准备
bash
mkdir -p zentao-docker/{mysql,app,backup}
cd zentao-docker
2. docker-compose.yml 配置文件
bash
version: '3.8'
services:
zentao:
image: easysoft/zentao:latest # 官方镜像
container_name: zentao
restart: unless-stopped
environment:
- MYSQL_ROOT_PASSWORD=Zentao123456 # MySQL root密码
- ADMINER_ENABLED=true # 可选:启用phpMyAdmin
- BIND_ADDRESS=false
volumes:
# 持久化禅道数据
- ./app:/www/zentaopms
# 持久化MySQL数据
- ./mysql:/var/lib/mysql
# 时区配置
- /etc/localtime:/etc/localtime:ro
# 自定义配置文件(可选)
# - ./config/my.php:/www/zentaopms/config/my.php
ports:
- "8080:80" # Web访问端口
- "3307:3306" # MySQL访问端口(可选)
networks:
- zentao-network
depends_on:
- zentao-db
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:80"]
interval: 30s
timeout: 10s
retries: 3
zentao-db:
image: mysql:5.7 # 禅道推荐MySQL 5.7
container_name: zentao-db
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: Zentao123456
MYSQL_DATABASE: zentao
MYSQL_USER: zentao
MYSQL_PASSWORD: Zentao123456
TZ: Asia/Shanghai
volumes:
# MySQL数据持久化
- ./mysql:/var/lib/mysql
# 初始化SQL(可选)
# - ./init.sql:/docker-entrypoint-initdb.d/init.sql
# 配置文件
- ./mysql/conf.d:/etc/mysql/conf.d
# 时区
- /etc/localtime:/etc/localtime:ro
command:
--character-set-server=utf8mb4
--collation-server=utf8mb4_unicode_ci
--innodb_buffer_pool_size=256M
--max_connections=1000
networks:
- zentao-network
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p$$MYSQL_ROOT_PASSWORD"]
interval: 30s
timeout: 10s
retries: 5
# 可选:phpMyAdmin(数据库管理)
phpmyadmin:
image: phpmyadmin/phpmyadmin:latest
container_name: zentao-phpmyadmin
restart: unless-stopped
environment:
PMA_HOST: zentao-db
PMA_PORT: 3306
UPLOAD_LIMIT: 512M
ports:
- "8081:80"
networks:
- zentao-network
depends_on:
- zentao-db
networks:
zentao-network:
driver: bridge
ipam:
config:
- subnet: 172.20.0.0/16
3. 环境变量配置文件 (.env)
bash
# 创建环境变量文件
cat > .env << EOF
COMPOSE_PROJECT_NAME=zentao
ZENTAO_VERSION=18.8
MYSQL_ROOT_PASSWORD=Zentao123456
MYSQL_DATABASE=zentao
MYSQL_USER=zentao
MYSQL_PASSWORD=Zentao123456
TZ=Asia/Shanghai
HTTP_PORT=8080
MYSQL_PORT=3307
PHPMYADMIN_PORT=8081
EOF
4. MySQL配置文件
bash
# 创建MySQL配置目录
mkdir -p mysql/conf.d
# 创建MySQL优化配置文件
cat > mysql/conf.d/zentao.cnf << EOF
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
max_connections=1000
innodb_buffer_pool_size=256M
query_cache_type=1
query_cache_size=32M
slow_query_log=1
long_query_time=2
log_queries_not_using_indexes=1
# 时区设置
default-time-zone='+08:00'
[client]
default-character-set=utf8mb4
EOF
5. 启动脚本 (start.sh)
bash
#!/bin/bash
# 禅道Docker部署脚本
set -e
echo "========== 禅道部署开始 =========="
# 检查Docker和Docker Compose
if ! command -v docker &> /dev/null; then
echo "错误: Docker未安装"
exit 1
fi
if ! command -v docker-compose &> /dev/null; then
echo "错误: Docker Compose未安装"
exit 1
fi
# 检查目录权限
echo "检查目录权限..."
mkdir -p ./{mysql,app,backup}
chmod -R 755 ./mysql ./app
chown -R 1000:1000 ./app # 禅道容器内用户UID通常为1000
# 拉取镜像
echo "拉取Docker镜像..."
docker-compose pull
# 启动服务
echo "启动禅道服务..."
docker-compose up -d
# 等待服务启动
echo "等待服务启动..."
sleep 30
# 检查服务状态
echo "检查服务状态..."
docker-compose ps
# 显示访问信息
echo "========== 部署完成 =========="
echo "禅道访问地址: http://服务器IP:8080"
echo "默认账号: admin"
echo "默认密码: 123456"
echo ""
echo "数据库信息:"
echo "- 主机: zentao-db"
echo "- 端口: 3306 (容器内)"
echo "- 数据库: zentao"
echo "- 用户名: zentao"
echo "- 密码: Zentao123456"
echo ""
echo "phpMyAdmin: http://服务器IP:8081"
echo "========== 完成 =========="
6. 备份脚本 (backup.sh)
bash
#!/bin/bash
# 禅道备份脚本
BACKUP_DIR="./backup"
DATE=$(date +%Y%m%d_%H%M%S)
echo "开始备份禅道数据..."
# 创建备份目录
mkdir -p ${BACKUP_DIR}/${DATE}
# 备份MySQL数据库
echo "备份MySQL数据库..."
docker exec zentao-db mysqldump -uroot -pZentao123456 --databases zentao > ${BACKUP_DIR}/${DATE}/zentao_db_${DATE}.sql
# 备份禅道应用文件
echo "备份禅道应用文件..."
tar -czf ${BACKUP_DIR}/${DATE}/zentao_app_${DATE}.tar.gz ./app
# 备份MySQL数据文件
echo "备份MySQL数据文件..."
tar -czf ${BACKUP_DIR}/${DATE}/mysql_data_${DATE}.tar.gz ./mysql
# 创建备份清单
cat > ${BACKUP_DIR}/${DATE}/README.txt << EOF
禅道备份信息
备份时间: ${DATE}
备份内容:
1. 禅道数据库 (zentao_db_${DATE}.sql)
2. 禅道应用文件 (zentao_app_${DATE}.tar.gz)
3. MySQL数据文件 (mysql_data_${DATE}.tar.gz)
恢复说明:
1. 停止服务: docker-compose down
2. 恢复MySQL:
docker exec -i zentao-db mysql -uroot -pZentao123456 < zentao_db_${DATE}.sql
3. 恢复文件:
tar -xzf zentao_app_${DATE}.tar.gz -C ./
tar -xzf mysql_data_${DATE}.tar.gz -C ./
4. 启动服务: docker-compose up -d
EOF
# 删除7天前的备份
find ${BACKUP_DIR} -type d -mtime +7 -exec rm -rf {} \;
echo "备份完成,文件保存在: ${BACKUP_DIR}/${DATE}"
7. 完整的部署流程
bash
# 1. 赋予脚本执行权限
chmod +x start.sh backup.sh
# 2. 启动禅道服务
./start.sh
# 3. 查看日志
docker-compose logs -f zentao
# 4. 停止服务
docker-compose down
# 5. 备份数据
./backup.sh
# 6. 查看容器状态
docker-compose ps
# 7. 进入容器调试
docker exec -it zentao /bin/bash
