前言
禅道是国内优秀的开源项目管理软件,支持产品管理、项目管理、质量管理等功能。本文将介绍如何使用Docker Compose快速部署一个完整的禅道系统,包括数据库、缓存和应用服务。
系统架构
本部署方案采用三个容器:
- zentao-db: MariaDB 10.6 数据库服务
- zentao-cache: Redis 6.2 缓存服务
- zentao: 禅道应用服务
环境准备
前置条件
- 安装Docker和Docker Compose
- 确保80端口(映射为80)未被占用
- 具备基本的Linux命令行操作能力
创建项目目录
mkdir zentao-docker
cd zentao-docker
配置详解
数据库服务配置
使用MariaDB作为数据库,关键配置如下:
- 镜像:
bitnami/mariadb:10.6
- 字符集: utf8mb4,支持中文和特殊字符
- 健康检查: 定期检查数据库连接状态
- 数据持久化: 挂载本地目录保证数据不丢失
缓存服务配置
Redis用于session存储和数据缓存:
- 镜像:
bitnami/redis:6.2
- 密码认证: 提供安全访问控制
- 数据持久化: 防止缓存数据丢失
应用服务配置
禅道主应用的核心配置:
- 端口映射: 容器80端口映射到主机80端口
- PHP优化: 调整内存限制、执行时间等参数
- Redis集成: 配置session存储和数据缓存
部署步骤
1. 创建docker-compose.yml文件
将文件内容保存为docker-compose.yml
(完整内容见文末)
2. 创建数据目录
mkdir -p data/zentao/{mariadb,redis,data}
3. 启动服务
# 后台启动所有服务
docker-compose up -d
# 查看服务状态
docker-compose ps
# 查看日志
docker-compose logs -f zentao
4. 验证部署
打开浏览器访问 http://your-server-ip:80
,如果看到禅道初始化页面说明部署成功。
初始化配置
数据库连接配置
- 数据库类型: MySQL
- 服务器: zentao-db
- 端口: 3306
- 数据库名: zentao
- 用户名: root
- 密码: pass4Zentao
Redis配置验证
系统会自动使用Redis进行session存储和数据缓存,无需手动配置。
运维管理
常用命令
# 停止服务
docker-compose down
# 重启特定服务
docker-compose restart zentao
# 查看容器资源使用情况
docker stats
# 备份数据库
docker exec zentao-db mysqldump -u root -ppass4Zentao zentao > zentao_backup.sql
数据备份策略
- 数据库: 定期执行mysqldump备份
- 文件数据: 备份
./data/zentao/data
目录 - 配置文件: 备份docker-compose.yml文件
监控和日志
# 查看特定服务日志
docker-compose logs zentao-db
docker-compose logs zentao-cache
# 实时监控日志
docker-compose logs -f --tail=100
性能优化
PHP性能调优
配置文件中已优化的参数:
PHP_MEMORY_LIMIT=512M
: 内存限制PHP_MAX_EXECUTION_TIME=120
: 脚本执行时间PHP_POST_MAX_SIZE=128M
: POST数据大小限制PHP_UPLOAD_MAX_FILESIZE=128M
: 文件上传限制
Redis缓存优化
- 启用Redis作为session存储提高性能
- 配置私有缓存作用域避免数据污染
- 使用igbinary序列化器提升效率
故障排除
常见问题
- 端口冲突: 修改docker-compose.yml中的端口映射
- 权限问题: 确保data目录有正确的读写权限
- 内存不足: 根据服务器配置调整PHP内存限制
- 数据库连接失败: 检查数据库服务是否正常启动
调试方法
# 进入容器内部调试
docker exec -it zentao bash
docker exec -it zentao-db mysql -u root -p
# 检查网络连接
docker network ls
docker network inspect zentao-docker_zentao-net
安全建议
- 修改默认密码: 更改数据库和Redis的默认密码
- 网络隔离: 使用自定义网络隔离服务
- 定期更新: 保持镜像版本为最新稳定版
- 访问控制: 配置防火墙限制访问端口
扩展功能
使用国内镜像
如果网络环境需要,可以使用注释中的国内镜像地址:
image: hub.zentao.net/app/zentao
image: hub.zentao.net/app/mariadb:10.6-bitnami
image: hub.zentao.net/app/redis:6.2-bitnami
集群部署
对于高并发场景,可以考虑:
- 数据库读写分离
- Redis集群模式
- 多实例负载均衡
总结
通过Docker Compose部署禅道系统具有环境一致性好、部署简单、易于维护等优势。本方案提供了完整的数据库、缓存和应用服务,适合中小型团队快速搭建项目管理平台。
记住定期备份数据,并根据实际使用情况调整性能参数,确保系统稳定运行。
完整配置文件
version: "3.8"
services:
# db service for zentao
zentao-db:
image: bitnami/mariadb:10.6
# 国内镜像
# image: hub.zentao.net/app/mariadb:10.6-bitnami
container_name: zentao-db
pull_policy: if_not_present
restart: always
volumes:
- './data/zentao/mariadb:/bitnami/mariadb'
networks:
- zentao-net
environment:
- MARIADB_USER=my_user
- MARIADB_PASSWORD=my_password
- MARIADB_DATABASE=zentao
- MARIADB_CHARACTER_SET=utf8mb4
- MARIADB_COLLATE=utf8mb4_unicode_ci
- MARIADB_ROOT_PASSWORD=pass4Zentao
healthcheck:
test: ['CMD', '/opt/bitnami/scripts/mariadb/healthcheck.sh']
interval: 15s
timeout: 5s
retries: 6
zentao-cache:
image: bitnami/redis:6.2
# 国内镜像
# image: hub.zentao.net/app/redis:6.2-bitnami
container_name: zentao-cache
pull_policy: if_not_present
restart: always
environment:
- REDIS_PASSWORD=pass4Zentao
volumes:
- './data/zentao/redis:/bitnami/redis/data'
networks:
- zentao-net
# zentao service
zentao:
image: easysoft/zentao
# 国内镜像
# image: hub.zentao.net/app/zentao
container_name: zentao
pull_policy: always
restart: always
ports:
- '80:80'
volumes:
- './data/zentao/data:/data'
depends_on:
- zentao-db
- zentao-cache
environment:
- ZT_MYSQL_HOST=zentao-db
- ZT_MYSQL_PORT=3306
- ZT_MYSQL_USER=root
- ZT_MYSQL_PASSWORD=pass4Zentao
- ZT_MYSQL_DB=zentao
# 从21.3版本开始,如果已经设置了redis相关环境变量自动开启redis session缓存,可不用配置如下环境变量
- PHP_SESSION_TYPE=redis
- PHP_SESSION_PATH=tcp://zentao-cache:6379?auth=pass4Zentao
- PHP_EXT_REDIS=true
- PHP_SESSION_REDIS_DATABASE=6 # 如果session是redis默认使用6, session database和cache database不要复用
# end
- ZT_REDIS_HOST=zentao-cache
- ZT_REDIS_PORT=6379
- ZT_REDIS_PASSWORD=pass4Zentao
- ZT_REDIS_SERIALIZER=igbinary # php, igbinary
# - ZT_REDIS_DATABASE=0 # 默认禅道为0
- ZT_CACHE_ENABLE=true
- ZT_CACHE_TYPE=redis
- ZT_CACHE_SCOPE=private
- ZT_CACHE_LIFETIME=0
- PHP_MAX_EXECUTION_TIME=120
- PHP_MEMORY_LIMIT=512M
- PHP_POST_MAX_SIZE=128M
- PHP_UPLOAD_MAX_FILESIZE=128M
networks:
- zentao-net
# 指定mac地址设置网络如下,需要删除`- zentao-net`
# zentao-net:
# 02:42:ac:11:00:02为示例mac地址
# mac_address: 02:42:ac:11:00:02
networks:
zentao-net:
driver: bridge
# persistence for mysql, cache and zentao
volumes:
zentao_db:
zentao_cache:
zentao_data: