ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

使用Docker-compose快速部署TestLink测试管理平台

使用Docker-compose快速部署TestLink测试管理平台

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 网络与端口规划

服务端口映射建议:

容器服务默认端口映射建议用途说明
TestLink808080Web访问端口
MySQL33063307数据库连接
phpMyAdmin808081数据库管理界面

注意:生产环境建议使用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

关键配置解析:

  1. MySQL服务:使用官方5.7版本镜像,这是TestLink官方兼容的稳定版本
  2. TestLink服务:选用Bitnami维护的镜像,已集成Apache和PHP环境
  3. 数据持久化:通过命名卷(mysql-data/testlink-data)保存数据库和应用数据
  4. 网络隔离:所有服务接入自定义的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安装向导

  1. 访问http://localhost:8080/install进入安装界面
  2. 按步骤填写数据库信息:
    • Database host:testlink-db
    • Database user:testlink
    • Database password:TestLink@456
    • Database name:testlink
  3. 设置管理员账号(建议使用复杂密码)
  4. 完成安装后删除install文件夹:
    docker exec testlink-app rm -rf /bitnami/testlink/install

4.3 验证各服务状态

服务访问方式默认凭证
TestLinkhttp://localhost:8080安装时设置的管理员账号
phpMyAdminhttp://localhost:8081root/TestLink@123
MySQL命令行docker exec -it testlink-mysql mysql -utestlink -ptestlink/TestLink@456

5. 常见问题排查指南

5.1 数据库连接失败

现象:安装向导提示"Could not connect to database"排查步骤:

  1. 检查数据库容器是否运行:
    docker ps -f name=testlink-mysql
  2. 测试容器内网络连通性:
    docker exec testlink-app ping testlink-db
  3. 验证数据库用户权限:
    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/testlink

5.3 性能优化建议

  1. 调整PHP内存限制:
    docker exec testlink-app sed -i 's/memory_limit = .*/memory_limit = 512M/' /opt/bitnami/php/etc/php.ini docker-compose restart testlink-web
  2. 启用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.sh

6.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.crt

6.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版本升级步骤

  1. 停止现有服务:
    docker-compose down
  2. 备份数据卷:
    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 .
  3. 修改docker-compose.yml中的镜像版本号
  4. 重新启动服务:
    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

这解决了容器重建时的附件丢失问题,同时便于实施企业级备份策略。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进