受限于网上资源有限,加上小白一枚,笔者在Tars入门部署时踩了不少的坑,不过最终还是部署成功了,便想记录一下其中过程与心得;
Win10下Docker部署TarsJava(SpringBoot)主要分为这几部分:Docker部署,Tars部署以及测试,说难不难但里边处处埋坑,一不小心陷进去头发没了几斤……
这篇文章将从Docker开始描述笔者掉进去的坑,帮助小伙伴们闭坑。
统一说明:这些坑点问题均在2021年7月12号前发现,之后可能会优化,具体以官方消息为准。
一些参考资料:
TarsdocGitHub在线文档
B站TarsJava入门实战视频
TarsJava GitHub地址
为什么要列出环境版本呢?是因为这里边有坑。
环境 | 对应版本 |
---|---|
系统 | 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) |
大多数Windows操作系统的小伙伴电脑里都会装VMware虚拟机跑Linux操作系统,这时如果想在Windows里安装Docker,你可能会发现:要么安装不了Docker,要么安装完后VMware不能使用了。具体来说是VMware的虚拟化方案与Windows的Hpyer-V冲突,不能共存。如果想要二者共存,可以采用以下方法:
这个问题主要发生在Tars 2.0版本,如果你使用的是2.0版本,你会发现有些依赖标红,无法从Maven中央仓库自动导入,这是因为中央仓库还没有这些依赖。
Docker相关安装网上在资料与资源已经很足了,这里只提一下笔者遇到的问题。
在Win10上安装Docker需要开启Windows本身的虚拟支持,哭具体操作是:
接下来到Docker官网下载Docker即可:Docker For Win
Docker安装无脑一直下一步即可,但它会默认将拉来的镜像保存在C盘(原目录:C:\Users\用户名\AppData\Local\Docker\wsl
),我们可以通过wsl -l -v --all
命令查看:
docker-desktop
用来存放程序,docker-desktop-data
用来存放镜像,如果希望它在其他盘,可以参考以下操作(以移动到新目录:D:\program\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"
ext4.vhdx
文件会被删除:wsl --unregister docker-desktop wsl --unregister docker-desktop-data
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
备份文件可以删除了。使用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来寻址的。
填写完配置信息后,点击获取端口可以自动获取端口,接着点击确认 - 部署,即可完成服务端与客户端的部署。
官方文档的shell命令与笔者上述第五点在MySQL密码上略有不同;
-e MYSQL_ROOT_PASSWORD='root@appinside' \
-e MYSQL_ROOT_PASSWORD="root@appinside" \
笔者使用官方的语句,发生如下错误导致框架起不来:
猜测是win10与Linux命令语法不同导致,因此将单引号改成双引号,与数据库那里的配置统一。
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
,该为服务名即可:笔者在进行部署是经常遇到的这个错误:
这个错误的原因很大概率是因为自己的代码有问题,笔者在这里遇到的问题有:
这个问题需要认真检查代码。
(这里笔者故意将MyServer.Server.ServerObj
改成MyServer.Server.ServerObj1
,以演示错误。)
服务包上传进Tars是否成功,可以通过接口调试是否成功判断。
下面以服务端为例,客户端相同:
首先进入接口调试,点击添加;
接着上传.tars文件,该文件在..\src\main\resources
目录下,客户端上传hello.tars
文件,服务端上传client.tars
文件。
上传完后点击调试:
按照下图进行操作即可查看调试结果。