TarsCPP 环境搭建—官方文档补充

前言

全程参照 Tars 官方文档的相关章节,最终搭建出了 TarsCPP 服务端环境和客户端开发环境。其间有些小波折,记录一下。

服务端

参照: 通过 Docker 部署 TarsCPP: https://tarscloud.github.io/TarsDocs_en/installation/docker.html。

调整虚拟机网络连接方式

我在 VirtualBox 里搞了一台 Ubuntu20 的虚拟机做服务器。

虚拟机的网络连接设置默认是 NAT。执行 ifconfig 的话会发现虚拟机不存在跟宿主主机同一网段的网络连接,等 Tars 服务搭建好,也没办法从宿主主机(开发机)访问管理后台。

按下图把网络连接方式改为“桥接网卡”。再执行 ifconfig 就会看到有一个跟宿主主机同局域网的网络连接了。

执行 docker run 命令创建 tars framework 容器时去掉 INET 选项

我的虚拟机里没有 eth0 这个名字的网络连接,直接去掉就好,docker 会自动选择。

创建 tars node 容器时映射 20001 端口

1
2
3
4
5
6
7
8
9
10
11
docker run -d \
--name=tars-node \
--net=tars \
-e INET=eth0 \
-e WEB_HOST="http://172.25.0.3:3000" \
--ip="172.25.0.5" \
-v /data/node:/data/tars \
-v /etc/localtime:/etc/localtime \
-p 9000-9010:9000-9010 \
-p 20001:20001 \
tarscloud/tars-node:latest

文档里只映射了 9000-9010 端口,但是在后边部署示例服务的时候又部署到了 20001 端口。通过客户端测试时会报错:

1
ex:[ServantProxy::invoke errno:-7,info:,servant:TestApp.HelloServer.HelloObj,func:testHello,adapter:tcp -h 172.21.16.111 -p 20001 -t 3000,reqid:1]

即连不上服务。就是因为前边没有映射 20001 端口。

开发环境

参照: 开发环境搭建: https://tarscloud.github.io/TarsDocs_en/env/tarscpp.html。

升级 TarsCPP 仓库里的 gtest 版本

这步不是必需的。我在 WSL 的 Ubuntu18 里按文档直接 make,顺利编译。但是在 Mac 上就会报错,提示 gtest 里有很多类用到了拷贝构造函数,但是只人工实现了拷贝赋值操作符,没有实现拷贝构造。

可以按照 https://github.com/TarsCloud/TarsCpp/issues/239 这里提到的,把 cmake 里对应的 gtest 源升级成 1.11.0 版本,再改掉对应的 md5 就可以了。

QuickStart 示例

参照: QuickStart 示例: https://tarscloud.github.io/TarsDocs_en/demo/tarscpp/tars_cpp_quickstart.html

写客户端时提供正确的服务端 IP 地址

客户端示例代码里有这么一句:

1
comm.stringToProxy("TestApp.HelloServer.HelloObj@tcp -h 10.120.129.226 -p 20001" , prx);

其中 -h 是服务端 IP 地址,不能无脑复制。改成我虚拟机在局域网内的 IP 就好了。

后记

Tars 的英文文档算是很好了,坑很少,仔细点照做,算是比较顺利地把环境搭起来了。

评论