阿里云上使用docker-compose安装禅道

引言

禅道 是一款国产的开源项目管理软件,主要用于敏捷开发、测试管理和缺陷跟踪。它集成了项目管理、产品管理、质量管理、文档管理、组织管理和事务管理等功能,适合软件开发团队使用。

一、禅道的主要功能:

1.1产品管理:

  • 需求管理:收集、整理和跟踪用户需求。
  • 产品计划:制定产品发布计划,关联需求与任务。
  • 发布管理:记录产品版本历史和功能变更。

1.2项目管理

  • 任务分解:将项目拆分为任务,分配给团队成员。
  • 进度跟踪:通过燃尽图、甘特图等工具监控项目进度。
  • 团队协作:支持任务指派、工时记录和进度反馈。

1.3质量管理

  • 测试用例管理:创建、执行和跟踪测试用例。
  • 缺陷跟踪:记录、分配和验证Bug,关联到需求或任务。
  • 测试报告:生成测试结果和缺陷统计报告。

1.4文档管理

  • 存储项目文档、技术资料和会议记录,支持版本控制。

1.5流程自定义

  • 支持工作流、权限和字段的自定义,适应不同团队流程。

1.6多工具集成

支持与Git、SVN、Jenkins、钉钉、企业微信等工具集成。

二、禅道的适用场景:

  1. 敏捷开发团队:支持Scrum、Kanban等敏捷方法论。
  2. 传统瀑布模型团队:提供项目计划、任务分解和进度跟踪。
  3. 测试团队:管理测试用例、Bug跟踪和测试报告。
  4. 产品经理:管理需求、版本规划和发布跟踪。

三、禅道的优势:

  • 开源免费:提供社区版,可免费使用和定制。
  • 一体化管理:覆盖项目全生命周期,减少工具切换成本。
  • 灵活定制:适应不同团队的流程和需求。
  • 国产化支持:符合国内团队的使用习惯,提供本地化服务。

四、禅道 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
相关推荐
阿里云云原生2 小时前
阿里云 Serverless 计算 12 月产品动态
阿里云·serverless·云计算
boy快快长大2 小时前
Docker简单服务迁移
运维·docker·容器
刘某的Cloud3 小时前
docker cp 传文件,使用 docker exec 结合 tar 流传输,效率更高且能保留权限
linux·运维·docker·容器·系统
因_果_律3 小时前
无需Mac Mini!使用ClawdBot(Moltbot)& AWS EC2的搭建你的24小时AI搭子
云计算·aws·亚马逊云科技
摸鱼仙人~3 小时前
OpenManus沙箱实现解析:从Docker容器到轻量替代方案
docker·容器·eureka
螺旋小蜗3 小时前
docker-compose文件属性(14)build
java·docker·eureka
ai_xiaogui5 小时前
宝塔FTP备份网站失败?21端口+被动端口39000-40000放行+阿里云安全组配置全攻略
阿里云·云计算·宝塔ftp被动端口放行·安全组21端口·宝塔备份下载中断解决·ftp主动模式连接不上·宝塔面板ftp配置教程
打工的小王13 小时前
docker(三)具体项目的部署
运维·docker·容器
有风听风有雨看雨14 小时前
【Critical】docker unauthorized 2375
docker·容器·eureka