禪道作為一個開源的項目管理工具,其功能足以滿足日常開發、運維、測試及產品版本迭代,重要的是免費、可定制,好處不用多數,業內用的也比較廣泛(主要是互聯網企業)
關於禪道的部署可以參考官網:https://www.zentao.net/book/zentaopmshelp/405.html
有了docker,使得禪道的部署變得非常簡單,只需如下幾個步驟即可完成禪道的本地化部署:
- 將鏡像pull下來;
- 利用鏡像啟動容器;
- 打開界面做簡單的配置即可使用。
如果你只是測試或小小的應用一下,官網的文檔足以解決我們的問題了,筆者也是根據官網部署的。
這里簡單梳理下部署步驟,做個記錄的同時也分享給各位同學。
1. 運行環境准備
既然是docker部署禪道,首先你的環境要符合docker運行環境,官網推薦docker最好是18版本以上,操作系統也最好是7.x,安裝前最好更新系統到最新版本。docker安裝最新版即可。
查看docker版本
docker -v
2. 禪道鏡像下載
我們可以直接在線下載或導入鏡像兩種方式獲取到禪道的鏡像,根據我們的服務器環境(是否能夠訪問公網)自行選擇適合自己的就好,結果是一樣的,就是把禪道鏡像拉取到本地。
這里以部署開源版禪道12.3.3為例,其他版本類似。
2.1 在線下載鏡像
禪道鏡像已放於Docker Hub上,地址為: https://hub.docker.com/r/easysoft/zentao/tags
拉取禪道開源版12.3.3版本命令如下: docker pull easysoft/zentao:12.3.3
2.2 離線導入鏡像
離線鏡像獲取
# 下載禪道鏡像 wget https://www.zentao.net/dl/docker/zentao_12.3.3.tar.gz # 將鏡像導入到本地 gunzip -c zentao_12.3.3.tar.gz | docker load
導入后,查看本地鏡像
[root@CN-HZ-Zentao ~]# docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE easysoft/zentao 12.3.3 6b51979725b5 10 months ago 633MB
3. 啟動禪道容器
3.1 啟動命令
# 官方給的命令: docker run --name [容器名] -p [主機端口]:80 --network=[網絡驅動名] --ip [容器IP] --mac-address [mac地址] -v [主機禪道目錄]:/www/zentaopms -v [主機mysql目錄]:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=[數據庫密碼] -d easysoft/zentao:[鏡像標簽] ## 啟動參數說明: # 容器名:啟動的容器名字,可隨意指定; # 主機端口:主機端口為web訪問端口; # 網絡驅動名:剛剛創建的網絡驅動名; # 容器IP:在網絡驅動范圍內選擇一個作為該容器的固定ip; # mac地址:指定固定的mac地址,建議范圍為02:42:ac:11:00:00 到 02:42:ac:11:ff:ff; # 主機禪道目錄:必須指定,方便禪道代碼、附件等數據的持久化,非升級情況需指定空目錄; # 主機mysql目錄:必須指定,方便禪道數據持久化,非升級情況需指定空目錄; # 數據庫密碼: 容器內置mysql用戶名為root,默認密碼123456,如果不修改可以不指定該變量,如果想更改密碼可以設置 MYSQL_ROOT_PASSWORD變量來更改密碼; # 鏡像標簽:禪道版本。 # 實際上我們只需要按如下命令啟動容器即可: docker run --name zentao-server --restart always -d -p 80:80 -v /ichint/zentaopms:/www/zentaopms -v /ichint/mysqldata:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 easysoft/zentao:12.3.3 ## 其中 --restart always 意思是在docker容器異常時自動重啟。
3.2 查看是否啟動成功
[root@CN-HZ-Zentao ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8c24dfafdbef easysoft/zentao:12.3.3 "/.docker_init.sh" 6 weeks ago Up 6 weeks 0.0.0.0:80->80/tcp, :::80->80/tcp zentao-server
4. 安裝禪道
瀏覽器直接訪問 http://宿主機ip:宿主機映射端口
然后點擊【登錄禪道管理系統】,輸入帳號密碼,就可以登錄我們的禪道了。
5. 存在的問題及解決
問題1:容器內部的時間和宿主機時間不一致
問題2:如果想在外部連接禪道數據庫是沒辦法的
這就需要我們對鏡像進行定制和修改。
針對問題1,我們只需要在啟動禪道容器的時候,加上參數: -v /etc/localtime:/etc/localtime:ro,即:
docker run --name zentao-server --restart always -d -p 80:80 -v /ichint/zentaopms:/www/zentaopms -v /ichint/mysqldata:/var/lib/mysql -v /etc/localtime:/etc/localtime:ro -e MYSQL_ROOT_PASSWORD=123456 easysoft/zentao:12.3.3
針對問題2,我們需要按如下步驟進行操作:
主要思路是:
- 進入容器
- 修改MySQL默認配置
- 授權登錄
- 提交修改生成新的鏡像
- 刪除之前啟動的容器
- 用新的鏡像重新啟動容器
操作過程中,數據不會丟失,這點不需要擔心,因為我們將數據目錄都映射到宿主機中了。
## 開啟docker部署的禪道數據庫外部登錄 # 進入容器 docker exec -ti zentao-server bash 找到MariaDB的配置文件"/etc/mysql/mariadb.conf.d/50-server.cnf",把"bind-address...."一行注釋掉 接下來還要給賬戶分配權限,進入mysql命令行界面,輸入: mysql -uroot -p 輸入密碼: ## 在容器內的MySQL中執行如下命令: select User, host from mysql.user; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION; FLUSH PRIVILEGES; # 輸入exit,退出MySQL,再次輸入exit退出容器,然后將剛才對容器的修改進行提交,生成我們自己定義的鏡像 docker commit 8c24dfafdbef myzentao:v2 # 然后關閉並刪除舊的容器 docker stop zentao-server docker rm zentao-server # 或者:docker rm -f zentao-server # 最后用我們自定義的鏡像重新啟動一個新的容器,並將數據庫端口也映射出來 docker run --name zentao-server --restart always -d -p 80:80 -p 3306:3306 -v /ichint/zentaopms:/www/zentaopms -v /ichint/mysqldata:/var/lib/mysql -v /etc/localtime:/etc/localtime:ro -e MYSQL_ROOT_PASSWORD=123456 -d newzentao:v2
這樣我們就可以在外部登錄禪道的數據庫了。