搞定測試管理!用 Docker Compose 輕鬆部署 TestLink (優缺點全解析)
在軟體開發流程中,測試管理是確保產品品質不可或缺的一環。一套好的測試管理工具能幫助團隊追蹤測試案例、執行進度、缺陷管理,並清晰地呈現測試報告。而 TestLink 作為一款開源的 Web-based 測試管理系統,因其免費和功能齊全的特性,受到許多團隊的青睞。
今天,我們就來聊聊如何透過 Docker Compose,快速、彈性地在您的環境中架設 TestLink,並深入探討 TestLink 的優點與潛在的挑戰。
為什麼選擇 Docker Compose 部署 TestLink?
傳統上部署像 TestLink 這樣的 LAMP (Linux, Apache, MySQL, PHP) 應用,需要手動安裝和配置多個組件,過程繁瑣且容易出錯。Docker Compose 完美解決了這個問題:
- 環境隔離:每個服務(如資料庫、Web 伺服器)都在獨立的容器中運行,彼此不干擾。
 - 部署一致性:無論在哪台機器上,只要有 Docker 環境,就能透過相同的 
docker-compose.yml文件快速複製部署。 - 版本控制:將部署配置寫入文件,便於版本管理和團隊協作。
 - 簡化管理:透過一個命令就能啟動、停止、重建所有服務。
 
TestLink 的優點 (Why TestLink?)
作為一款老牌的開源測試管理工具,TestLink 有其獨到的優勢:
- 開源免費:這是最大的吸引力!對於預算有限的團隊或個人專案,TestLink 提供了企業級的測試管理功能,無需任何授權費用。
 - 功能全面:
- 測試專案管理:可以建立和管理多個測試專案。
 - **需求追溯 (Requirements Traceability)**:將測試案例與需求關聯,確保所有需求都被充分測試。
 - 測試案例管理:支援詳細的測試案例撰寫,包括預置條件、步驟、預期結果等。
 - 測試計畫與執行:建立測試計畫,分配測試任務給團隊成員,並記錄測試執行結果。
 - 缺陷管理集成:能與 Jira, Bugzilla 等主流缺陷管理工具集成,形成測試-缺陷閉環。
 - 測試報告生成:提供多種圖表和報告,清晰展示測試進度與品質狀況。
 
 - 成熟穩定:經過多年的發展和社區支持,TestLink 的核心功能相對穩定可靠。
 - 社區支援:雖然近年來新的雲端工具層出不窮,TestLink 依然有其活躍的用戶社區,遇到問題時可以尋求幫助。
 
TestLink 的缺點與挑戰 (The Downsides)
當然,沒有一個工具是完美的,TestLink 也有其不足之處:
- 使用者介面老舊:相較於現代化的 SaaS 測試管理工具,TestLink 的介面顯得有些過時,不夠直觀和美觀,學習曲線可能較陡峭。
 - 操作體驗不夠流暢:某些操作可能需要較多的點擊,批量操作能力有時也顯得不足,在處理大量測試案例時效率可能較低。
 - 集成能力有限:雖然能與一些缺陷管理工具集成,但與 CI/CD 工具鏈、自動化測試框架等其他 DevTestOps 工具的深度集成能力,可能不如某些商業工具靈活和豐富。
 - 功能更新迭代較慢:作為開源專案,其功能更新和問題修復的速度可能不如商業產品那麼快。
 - 自行維護成本:儘管工具本身免費,但部署、配置、升級、備份和故障排除等都需要團隊投入時間和人力進行維護。
 - 擴展性與負載能力:在超大規模測試專案或高併發場景下,其性能和擴展性可能需要額外的優化和調整。
 
使用 Docker Compose 部署 TestLink:優化與配置
根據您提供的 docker run 指令,我為您改寫並優化了一個 docker-compose.yml 文件。這個文件將包含兩個核心服務:資料庫 (MySQL/MariaDB) 和 TestLink 應用本身。
為了提供更穩定和官方支援的環境,我會做以下優化:
- 資料庫映像檔:使用官方的 
mariadb映像檔,它通常更受推薦,並且有詳細的文檔支援。 - TestLink 映像檔:使用 
bitnami/testlink或testlink/testlink這類維護較好的第三方或半官方映像檔,它們通常已經包含了 Apache/Nginx 和 PHP 環境,並針對 TestLink 做了預配置,大大簡化部署。 - 環境變數:統一在 
docker-compose.yml中管理。 - 時區設置:資料庫和應用服務都統一設置,避免時間戳問題。
 - 網路設定:利用 Docker Compose 的預設網路讓服務間互相通訊。
 - Jenkins 移除:原始要求是部署 TestLink,您的 
docker run包含了 Jenkins。這裡我會專注於 TestLink 相關服務。若需 Jenkins,可另外建立服務。 
1  | version: '3.8' # 推薦使用較新的版本,提供更多功能和穩定性  | 
使用說明:
- 儲存文件:將上述內容儲存為 
docker-compose.yml在您伺服器的一個目錄中,例如/opt/testlink_deployment/。 - 創建數據目錄:在 
docker-compose.yml所在的目錄下創建data子目錄:1
mkdir -p data/mysql data/testlink_data
 - 修改密碼和郵件配置:非常重要! 請將 
your_root_password、your_testlink_password、your_admin_password和郵件相關的配置修改為您自己的安全密碼和實際郵件服務器資訊。 - 啟動服務:在 
docker-compose.yml所在的目錄下運行:(1
docker compose up -d
docker-compose舊版命令可能為docker-compose up -d) - 訪問 TestLink:服務啟動後,您就可以在瀏覽器中訪問 
http://您的伺服器IP來使用 TestLink 了!首次訪問可能需要幾分鐘初始化。 - 停止服務:
1
docker compose down
 - 查看日誌:
1
docker compose logs -f
優化解釋:
 version: '3.8‘: 使用較新的 Docker Compose 文件格式版本,支援更多功能。db: image: mariadb:10.6:
- 選擇 MariaDB 作為 MySQL 的開源替代品,它與 MySQL 高度兼容,且通常被認為更活躍和穩定。
 - 指定版本 
10.6而非 latest,避免未來版本更新可能帶來的不兼容問題。 
MYSQL_ROOT_PASSWORD,MYSQL_DATABASE,MYSQL_USER,MYSQL_PASSWORD: 這些環境變數是 MariaDB 官方映像檔標準的設定方式,方便初始化資料庫和用戶。TZ: Asia/Taipei: 在所有服務中明確設置時區為「亞洲/台北」,這能確保資料庫和應用程式的時間戳一致,避免因時區差異導致的數據混亂。volumes: ./data/mysql:/var/lib/mysql: 將資料庫數據持久化到主機的相對路徑 data/mysql 中,這樣即使容器被刪除,數據也不會丟失。db.healthcheck: 為資料庫服務添加健康檢查。TestLink 會依賴資料庫,確保資料庫真正準備好接收連接,而不是僅僅啟動。testlink: image: bitnami/testlink:latest:
- 推薦使用 Bitnami 提供的 TestLink 映像檔。Bitnami 專門為開源應用程式打包 Docker 映像檔,它們通常包含預配置的 Web 伺服器 (Apache/Nginx)、PHP 環境,並處理了應用程式與資料庫的連接,極大地簡化了部署和維護。
 latest可以使用最新版本,但生產環境中建議指定具體版本以保持穩定性。
MARIADB_HOST: db: 在 Docker Compose 的預設網路中,您可以直接使用服務名稱 (db) 作為資料庫主機名,而不需要 IP 位址。這是 Docker Compose 內建的 DNS 解析功能。depends_on: db: condition: service_healthy: 這是一個非常重要的優化。它告訴 Docker Compose,只有當db服務的健康檢查通過並處於healthy狀態時,testlink服務才會開始啟動。這避免了testlink嘗試連接一個尚未完全準備好的資料庫而導致啟動失敗。testlink.healthcheck: 為 TestLink 應用添加健康檢查,確認網站首頁可以正常訪問,確保應用服務正常運行。
這個 docker-compose.yml 檔案將提供一個更穩定、更易於管理且具有更好可維護性的 TestLink 部署方案。您可以根據團隊的具體需求進一步調整其中的配置。
using .env file
將 Docker Compose 的環境變數從 docker-compose.yml 檔案中獨立出來,放到 .env 文件裡是一個極佳的最佳實踐!這能大幅提高安全性和靈活性,避免將敏感資訊(如密碼)直接寫死在版本控制的檔案中。
為什麼要使用 .env 檔案?
- 安全性:將密碼等敏感資訊從 
docker-compose.yml中分離,可以避免將其提交到版本控制系統(如 Git),降低資訊洩露的風險。 - 靈活性:您可以針對不同的環境(開發、測試、生產)輕鬆修改 
.env檔案中的變數,而無需改動核心的docker-compose.yml文件。 - 清晰度:讓 
docker-compose.yml專注於服務的結構和配置,而.env專注於環境特定的值。 
如何使用 .env 檔案改寫 Docker Compose 配置
首先,我們要創建兩個文件:
.env檔案:存放所有環境變數。docker-compose.yml檔案:引用.env檔案中的變數。
步驟 1:創建 .env 檔案
在您 docker-compose.yml 檔案所在的目錄下,創建一個名為 .env 的新文件(注意開頭的點號)。
.env 檔案內容範例:
1  | # --- 資料庫配置 ---  | 
重要提示:
- 請務必將所有 
your_..._securely_set的值替換為您自己的強密碼和實際資訊! .env檔案中的變數命名通常使用大寫字母,並且沒有引號,除非值中包含空格或其他特殊字符。
步驟 2:修改 docker-compose.yml 檔案
現在,我們需要修改 docker-compose.yml 文件,讓它引用 .env 檔案中的變數。在 Docker Compose 中,你可以使用 ${VAR_NAME} 的語法來引用環境變數。
docker-compose.yml 檔案內容範例:
1  | version: '3.8'  | 
步驟 3:啟動服務
當您在 docker-compose.yml 所在的目錄下運行 docker compose up -d 時,Docker Compose 會自動尋找並載入該目錄下的 .env 檔案,並將其中的變數應用到您的配置中。
1  | cd /path/to/your/testlink_deployment/ # 進入包含 docker-compose.yml 和 .env 的目錄  | 
.env 檔案的最佳實踐與注意事項:
- 添加到 .gitignore:如果您使用 Git 進行版本控制,務必將 .env 檔案添加到 .gitignore 中,防止敏感資訊被推送到遠端倉庫:
 
1  | # .gitignore  | 
- 安全儲存:即使不提交到 Git,也要確保 
.env檔案本身存儲在安全的位置,並且只有授權用戶才能訪問。 - 命名慣例:
.env檔案中的變數通常以大寫字母命名,並使用下劃線分隔單詞。 - 環境變數優先級:
 
- Shell 環境變數(如果您在命令行中設置了與 
.env中相同的變數,Shell 的會優先)。 .env檔案中的變數。docker-compose.yml檔案中直接environment下定義的變數。 因此,如果你在系統環境變數中定義了MYSQL_ROOT_PASSWORD,它會覆蓋.env和docker-compose.yml中的定義。
- 替代的敏感資料管理:對於生產環境,更高級的敏感資料管理方法包括:
- Docker Secrets:適用於 Docker Swarm 模式。
 - Kubernetes Secrets:適用於 Kubernetes 集群。
 - 環境變數注入工具:如 HashiCorp Vault、AWS Secrets Manager 等。 
.env檔案雖然方便,但其安全級別不如上述專用 Secrets 管理工具高,通常更適合開發、測試或個人小型部署。 
 
透過將環境變數外部化到 .env 檔案中,您的 Docker Compose 部署將變得更加安全、靈活和易於管理!