1. 为什么选择Docker-compose部署TestLink?
TestLink作为一款经典的开源测试管理工具,在企业测试流程中扮演着重要角色。传统部署方式需要手动配置Apache、MySQL、PHP环境,耗时且容易出错。而通过Docker-compose编排部署,可以实现:
- 环境隔离:所有服务(Web服务器、数据库等)运行在独立容器中,避免与宿主机环境冲突
- 一键启停:通过
docker-compose up/down命令快速搭建或销毁整套环境 - 版本控制:将
docker-compose.yml纳入Git管理,实现环境配置的版本化 - 资源复用:相同的配置可在开发、测试、生产环境无缝迁移
实测对比:手动部署TestLink平均需要2小时(含依赖解决),而Docker-compose方案首次部署仅需15分钟,后续重建环境只需1分钟。
2. 环境准备与前置检查
2.1 宿主机基础要求
- 操作系统:Linux(推荐Ubuntu 20.04+)或Windows 10/11 with WSL2
- Docker版本:≥20.10.14(验证命令:
docker --version) - Docker-compose版本:≥2.5.1(验证命令:
docker-compose version) - 硬件资源:
- 最低配置:2核CPU/4GB内存/20GB磁盘
- 推荐配置:4核CPU/8GB内存/50GB磁盘(支持并发测试用例执行)
2.2 网络与端口规划
服务端口映射建议:
| 容器服务 | 默认端口 | 映射建议 | 用途说明 |
|---|---|---|---|
| TestLink | 80 | 8080 | Web访问端口 |
| MySQL | 3306 | 3307 | 数据库连接 |
| phpMyAdmin | 80 | 8081 | 数据库管理界面 |
注意:生产环境建议使用Nginx反向代理并配置HTTPS,本文为演示使用HTTP直连
3. 编写docker-compose.yml
创建项目目录并编写配置文件:
mkdir testlink-docker && cd testlink-docker touch docker-compose.yml完整配置示例:
version: '3.8' services: testlink-db: image: mysql:5.7 container_name: testlink-mysql environment: MYSQL_ROOT_PASSWORD: "TestLink@123" MYSQL_DATABASE: testlink MYSQL_USER: testlink MYSQL_PASSWORD: "TestLink@456" volumes: - mysql-data:/var/lib/mysql networks: - testlink-net restart: unless-stopped testlink-web: image: bitnami/testlink:1.9.20 container_name: testlink-app depends_on: - testlink-db environment: - TESTLINK_DATABASE_HOST=testlink-db - TESTLINK_DATABASE_USER=testlink - TESTLINK_DATABASE_PASSWORD=TestLink@456 - TESTLINK_DATABASE_NAME=testlink volumes: - testlink-data:/bitnami/testlink ports: - "8080:80" - "8443:443" networks: - testlink-net restart: unless-stopped phpmyadmin: image: phpmyadmin/phpmyadmin container_name: testlink-pma depends_on: - testlink-db environment: PMA_HOST: testlink-db PMA_PORT: 3306 ports: - "8081:80" networks: - testlink-net restart: unless-stopped volumes: mysql-data: testlink-data: networks: testlink-net: driver: bridge关键配置解析:
- MySQL服务:使用官方5.7版本镜像,这是TestLink官方兼容的稳定版本
- TestLink服务:选用Bitnami维护的镜像,已集成Apache和PHP环境
- 数据持久化:通过命名卷(mysql-data/testlink-data)保存数据库和应用数据
- 网络隔离:所有服务接入自定义的testlink-net网络,保证内部通信安全
4. 启动与初始化配置
4.1 启动服务栈
docker-compose up -d观察日志确认服务状态:
docker-compose logs -f testlink-web当看到以下日志时表示启动成功:
testlink-app | INFO ==> Starting gosu... testlink-app | INFO ==> Starting apache...4.2 完成Web安装向导
- 访问
http://localhost:8080/install进入安装界面 - 按步骤填写数据库信息:
- Database host:
testlink-db - Database user:
testlink - Database password:
TestLink@456 - Database name:
testlink
- Database host:
- 设置管理员账号(建议使用复杂密码)
- 完成安装后删除
install文件夹:docker exec testlink-app rm -rf /bitnami/testlink/install
4.3 验证各服务状态
| 服务 | 访问方式 | 默认凭证 |
|---|---|---|
| TestLink | http://localhost:8080 | 安装时设置的管理员账号 |
| phpMyAdmin | http://localhost:8081 | root/TestLink@123 |
| MySQL命令行 | docker exec -it testlink-mysql mysql -utestlink -p | testlink/TestLink@456 |
5. 常见问题排查指南
5.1 数据库连接失败
现象:安装向导提示"Could not connect to database"排查步骤:
- 检查数据库容器是否运行:
docker ps -f name=testlink-mysql - 测试容器内网络连通性:
docker exec testlink-app ping testlink-db - 验证数据库用户权限:
docker exec -it testlink-mysql mysql -uroot -pTestLink@123 > SHOW GRANTS FOR 'testlink'@'%';
5.2 文件权限问题
现象:页面提示"Directory must be writable"解决方案:
docker exec testlink-app chown -R daemon:daemon /bitnami/testlink docker exec testlink-app chmod -R 775 /bitnami/testlink5.3 性能优化建议
- 调整PHP内存限制:
docker exec testlink-app sed -i 's/memory_limit = .*/memory_limit = 512M/' /opt/bitnami/php/etc/php.ini docker-compose restart testlink-web - 启用OPcache(编辑
/bitnami/testlink/config.inc.php):$tlCfg->config_check_warning_mode = 'SILENT'; ini_set('opcache.enable', 1);
6. 生产环境增强配置
6.1 定期备份方案
创建备份脚本/backup/backup.sh:
#!/bin/bash BACKUP_DIR="/backup/data" DATE=$(date +%Y%m%d) docker exec testlink-mysql mysqldump -utestlink -pTestLink@456 testlink > $BACKUP_DIR/testlink_db_$DATE.sql docker cp testlink-app:/bitnami/testlink $BACKUP_DIR/testlink_app_$DATE设置cron定时任务:
0 2 * * * /backup/backup.sh6.2 HTTPS安全配置
修改docker-compose.yml中testlink-web部分:
ports: - "443:443" environment: - TESTLINK_ENABLE_HTTPS=yes - TESTLINK_HTTPS_CERT_FILE=/certs/server.crt - TESTLINK_HTTPS_KEY_FILE=/certs/server.key volumes: - ./certs:/certs使用Let's Encrypt证书示例:
mkdir certs openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ -keyout certs/server.key -out certs/server.crt6.3 监控集成
在docker-compose.yml中添加Prometheus监控:
monitor: image: prom/prometheus ports: - "9090:9090" volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml networks: - testlink-net示例prometheus.yml配置:
scrape_configs: - job_name: 'testlink' static_configs: - targets: ['testlink-web:80'] - job_name: 'mysql' static_configs: - targets: ['testlink-db:9104']7. 版本升级与维护
7.1 TestLink版本升级步骤
- 停止现有服务:
docker-compose down - 备份数据卷:
docker run --rm -v mysql-data:/source -v $(pwd)/backup:/backup alpine \ tar czf /backup/mysql-data-$(date +%Y%m%d).tar.gz -C /source . - 修改
docker-compose.yml中的镜像版本号 - 重新启动服务:
docker-compose up -d
7.2 日常维护命令速查
| 操作场景 | 命令示例 |
|---|---|
| 查看服务状态 | docker-compose ps |
| 查看实时日志 | docker-compose logs -f |
| 执行数据库备份 | docker exec testlink-mysql mysqldump -u... |
| 修改配置后重载 | docker-compose restart testlink-web |
| 清理无用镜像 | docker image prune -a |
| 查看资源使用情况 | docker stats |
我在实际企业部署中发现,将TestLink的附件存储目录挂载到NAS存储是最佳实践:
volumes: - /nfs/testlink/upload_area:/bitnami/testlink/upload_area这解决了容器重建时的附件丢失问题,同时便于实施企业级备份策略。