前言
受限於網上資源有限,加上小白一枚,筆者在Tars入門部署時踩了不少的坑,不過最終還是部署成功了,便想記錄一下其中過程與心得;
Win10下Docker部署TarsJava(SpringBoot)主要分為這幾部分:Docker部署,Tars部署以及測試,說難不難但里邊處處埋坑,一不小心陷進去頭發沒了幾斤……
這篇文章將從Docker開始描述筆者掉進去的坑,幫助小伙伴們閉坑。
統一說明:這些坑點問題均在2021年7月12號前發現,之后可能會優化,具體以官方消息為准。
一些參考資料:
TarsdocGitHub在線文檔
B站TarsJava入門實戰視頻
TarsJava GitHub地址
1. 相關環境版本:
為什么要列出環境版本呢?是因為這里邊有坑。
環境 | 對應版本 |
---|---|
系統 | Win10 21H1 |
Docker版本 | 20.10.7 |
JDK版本 | 1.8 |
SpringBoot版本 | 2.0.3.RELEASE |
Maven版本 | 3.6.3 |
Tars版本 | 1.7.x(1.7.2) |
坑點一:VMware與Win10 Docker沖突
大多數Windows操作系統的小伙伴電腦里都會裝VMware虛擬機跑Linux操作系統,這時如果想在Windows里安裝Docker,你可能會發現:要么安裝不了Docker,要么安裝完后VMware不能使用了。具體來說是VMware的虛擬化方案與Windows的Hpyer-V沖突,不能共存。如果想要二者共存,可以采用以下方法:
- 將VMware版本升級到15.5.5以上,同時Win10版本升級到20H1以上;
坑點二:20.版本TarsJava(SpringBoot)依賴文件缺失
這個問題主要發生在Tars 2.0版本,如果你使用的是2.0版本,你會發現有些依賴標紅,無法從Maven中央倉庫自動導入,這是因為中央倉庫還沒有這些依賴。
- 解決方法有兩種,一是將Tars2.0版本所需的依賴自己通過install框架到本地,對於mvn來說package&install后可以正常使用;二是返回到1.7.2版本即可從中央倉庫拉取;
2. Docker安裝:
Docker相關安裝網上在資料與資源已經很足了,這里只提一下筆者遇到的問題。
在Win10上安裝Docker需要開啟Windows本身的虛擬支持,哭具體操作是:
- “左下角win圖標” - “設置” - “應用和功能” - 最下方“程序和功能” - “啟用或關閉Windows功能” - 開啟Hyper或相關虛擬功能;
- 或者直接在Windows搜索框中搜索上述相關關鍵字進行后續操作;
- 開啟后會要求重啟,等待重啟即可。
接下來到Docker官網下載Docker即可:Docker For Win
坑點三:Docker的鏡像默認安裝在C盤
Docker安裝無腦一直下一步即可,但它會默認將拉來的鏡像保存在C盤(原目錄:C:\Users\用戶名\AppData\Local\Docker\wsl
),我們可以通過wsl -l -v --all
命令查看:
docker-desktop
用來存放程序,docker-desktop-data
用來存放鏡像,如果希望它在其他盤,可以參考以下操作(以移動到新目錄:D:\program\wsl\
為例);
- 導出wsl子系統鏡像(備份到
D:\program\wsl\
目錄下),生成.tar
壓縮包:
wsl --export docker-desktop "D:\program\wsl\docker-desktop\docker-desktop.tar"
wsl --export docker-desktop-data "D:\program\wsl\docker-desktop-data\docker-desktop-data.tar"
- 刪除現有的wsl子系統,原目錄下的
ext4.vhdx
文件會被刪除:
wsl --unregister docker-desktop
wsl --unregister docker-desktop-data
- 重新創建wsl子系統,在新目錄下生成
ext4.vhdx
文件:
wsl --import docker-desktop "D:\program\wsl\docker-desktop" "D:\program\wsl\docker-desktop\docker-desktop.tar" --version 2
wsl --import docker-desktop-data "D:\program\wsl\docker-desktop-data" "D:\program\wsl\docker-desktop-data\docker-desktop-data.tar" --version 2
以上三步就能將wsl子系統轉移到D盤下的\program\wsl\
目錄了,如果想要驗證是否成功,可以使用docker隨便拉取一個鏡像,看看原目錄C:\Users\用戶名\AppData\Local\Docker\wsl
與新目錄D:\program\wsl
在拉取前后的文件大小,若在拉取后原目錄大小不變,新目錄增大,就成功了。
- 成功后,新目錄下的兩個
.tar
備份文件可以刪除了。
3. Tars部署:
使用docker部署Tars,基本上是一鍵式解決,但這其中也有一些需要注意的點,
1. 先拉取三個鏡像(MySQL、Tars框架、Tars結點):
#拉取最新的鏡像
docker pull tarscloud/framework:latest
#拉取節點鏡像
docker pull tarscloud/tars-node:latest
#拉取數據庫鏡像
docker pull mysql:5.6
2. 創建虛擬網絡:
docker network create -d bridge --subnet=172.25.0.0/16 --gateway=172.25.0.1 tars
3. 啟動數據庫:
docker run -d \
--net=tars \
-e MYSQL_ROOT_PASSWORD="root@appinside" \
--ip="172.25.0.2" \
--name=tars-mysql \
mysql:5.6
4. 等待30s,數據庫啟動需要時間:
可以進到docker里查看MySQL的日志信息,如下則啟動成功:
5. 啟動Tars框架:
docker run -d \
--net=tars \
-e MYSQL_HOST=172.25.0.2 \
-e MYSQL_ROOT_PASSWORD="root@appinside" \
-eREBUILD=false -eSLAVE=false \
-e INET=eth0 \
--ip="172.25.0.4" \
-p 3000-3001:3000-3001 \
tarscloud/framework
6. 等待60s,框架啟動需要時間:
可以進到Docker里查看框架的日志信息,如下則啟動成功:
7. 啟動Tars結點:
啟動web請求
docker run -d --net=tars --ip="172.25.0.3" -eWEB_HOST=http://172.25.0.4:3000 tarscloud/tars-node
8. Docker日志如下則成功:
9. 訪問http:{"你的主機ip"}:3000
,設置登錄密碼,用戶名為admin
若出現如下畫面,恭喜你,Tars部署成功!
10. 點擊運維管理,按照如下圖片進行配置:
需要注意紅框的兩個名字,服務名為將來打成jar包的文件名,OBJ為接口名。Tars是根據應用.服務名稱.OJB來尋址的。
填寫完配置信息后,點擊獲取端口可以自動獲取端口,接着點擊確認 - 部署,即可完成服務端與客戶端的部署。
- 服務端配置:
- 客戶端配置:
坑點四:Tars框架MySQL密碼錯誤
官方文檔的shell命令與筆者上述第五點在MySQL密碼上略有不同;
- 文檔上是:
-e MYSQL_ROOT_PASSWORD='root@appinside' \
- 筆者是:
-e MYSQL_ROOT_PASSWORD="root@appinside" \
筆者使用官方的語句,發生如下錯誤導致框架起不來:
猜測是win10與Linux命令語法不同導致,因此將單引號改成雙引號,與數據庫那里的配置統一。
4. 代碼處理:
Tars部署好后就可以上傳代碼了,可以自己寫也可以使用官方examples,這里筆者使用官方examples作為演示。
1. 首先進入TarsJava GitHub官方地址,點進examples:https://github.com/TarsCloud/TarsJava
2. 在這里我們僅關注以下三個SpringBoot文件:
3. Idea打開server文件(服務端)
對於服務端,需要修改的地方只有一處,即:OJB接口名,這里要與上述服務端配置的OJB名對應。然后打包即可。
打包完后修改打包后的文件夾名為服務名:
回到Tars平台,選擇之前配置好的服務,點擊發布管理,選中服務節點,點擊“發布選中節點”:
點擊上傳包,然后選中我們改好名字的服務包文件。
文件上傳后會生成一個時間戳選項,選擇后發布即可;
當屏幕中顯示三個Active時表明服務上傳成功。
4. Idea打開client文件(客戶端)
客戶端包上傳與服務端類似,只不過需要修改以下兩個地方:
需要注意2.匹配服務名可以從以下地方查看:
選中服務端,點擊服務管理,點擊管理Servant;
復制紅框內的內容,Ctrl CV到代碼里即可;
后續步驟就跟服務端一樣了,這里就不啰嗦了,這里放上一張客戶端成功發布包圖。
坑點五:發布包與服務名不匹配
這個問題是沒有修改發布包名為服務名,這點在官方GitHub文檔上沒有提及,可能是新版本特性吧:
- 將打包名
.jar
,該為服務名即可:
(將Server1改成Server,Server1為筆者故意寫錯做演示用)
坑點六:[alarm] down, server is inactive
筆者在進行部署是經常遇到的這個錯誤:
這個錯誤的原因很大概率是因為自己的代碼有問題,筆者在這里遇到的問題有:
- 打包時文檔檢驗出現錯誤;
- 沒有配置Obj接口;
- SpringBoot依賴文件找不到等;
這個問題需要認真檢查代碼。
(這里筆者故意將
MyServer.Server.ServerObj
改成MyServer.Server.ServerObj1
,以演示錯誤。)
5. 接口調試:
服務包上傳進Tars是否成功,可以通過接口調試是否成功判斷。
下面以服務端為例,客戶端相同:
首先進入接口調試,點擊添加;
接着上傳.tars文件,該文件在..\src\main\resources
目錄下,客戶端上傳hello.tars
文件,服務端上傳client.tars
文件。
上傳完后點擊調試:
按照下圖進行操作即可查看調試結果。
最后
