Docker tarsgo

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6


目录

​​参考:​​

​​mysql镜像安装​​

​​一、安装镜像​​

​​二、创建mysql容器​​

​​使用 tarscloud/framework 部署框架​​

​​拉取最新版本镜像​​

​​启动镜像(目前只考虑了 linux 上, 时间和本机同步)​​

​​目录说明​​

​​参数解释​​

​​Docker 部署 Tars 应用节点​​

​​开发环境 docker-compose​​

​​go安装​​

​​ubuntu 安装最新版本的 golang,go1.18后不需要配置环境变量,直接默认配置好了,安装完直接就可以go version​​

​​下面是编译安装​​

​​go环境的基础配置​​

​​tarsgo安装和配置TarsGo​​

​​必须安装git​​

​​安装Tars,终端输入,网络得翻墙才行​​

​​编译tars2go协议​​

​​demo实例​​

​​定义接口文件​​

​​编译生成可执行文件,并打包发布包。​​

​​服务部署​​

​​部署成功后编译测试​​

​​备份一个config.conf(报错99%就是配置问题)​​

​​发布操作​​


参考:

​官方在线文档​

​https://www.bookstack.cn/read/Tars-1.8/rumen-kai-fa-huan-jing-bu-shu-tarsgo.md​

​https://doc.tarsyun.com/#/dev/tarsgo/tarsgo.md​

​https://gitee.com/juffson/TarsGo​

Docker安装

mysql镜像安装

一、安装镜像

1.查找Docker Hub上的MySQL5.7 docker镜像

​docker search mysql​

2.拉取标签为5.7的MySQL docker镜像

​docker pull mysql:5.7​

Docker tarsgo_gotars

 

3、查看本地镜像库

​docker images​

Docker tarsgo_运维_02

 

二、创建mysql容器

创建 docker 虚拟网络

为了方便虚拟机、Mac、Linux 主机等各种环境下的 docker 部署,在本示例中先创建虚拟网络,模拟现实中的局域网内网环境(注意 docker 都还是在同一台机器, 只是 docker 的虚拟 ip 不同, 模拟多机)

# 创建一个名为tars的桥接(bridge)虚拟网络,网关172.25.0.1,网段为172.25.0.0 docker network create -d bridge --subnet=172.25.0.0/16 --gateway=172.25.0.1 tars​

启动 MySQL

  • 如果使用 MySQL 8,启动时需要关闭 ssl
docker run -d -p 3306:3306 \
--net=tars \
-e MYSQL_ROOT_PASSWORD="123456" \
--ip="172.25.0.2" \
-v /data/framework-mysql:/var/lib/mysql \
-v /etc/localtime:/etc/localtime \
--name=tars-mysql \
mysql:8.0.27 \
--tls-version=invalid

如果你使用的不是 8.0.27 版本,可以通过 ​​docker logs tars-mysql​​ 查看启动日志,确认是否有警告或者错误,或者可以尝试以下参数



docker run -d -p 3306:3306 \
--net=tars \
-e MYSQL_ROOT_PASSWORD="123456" \
--ip="172.25.0.2" \
-v /data/framework-mysql:/var/lib/mysql \
-v /etc/localtime:/etc/localtime \
--name=tars-mysql \
mysql:8.0.27 \
--ssl=0

由于 MySQL 8 开始,默认的 authentication plugin 从 mysql_native_password 修改为 caching_sha2_password

查看mysql镜像



root@wk-VirtualBox:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8984ad41f0bb mysql:8.0.27 "docker-entrypoint.s…" 53 seconds ago Up 52 seconds 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp tars-mysql
root@wk-VirtualBox:~# docker docker exec -it 8984ad41f0bb bash

进入容器

​root@wk-VirtualBox:~# docker exec -it 8984ad41f0bb bash root@8984ad41f0bb:/#​

开发宿主机连接

​ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456'; FLUSH PRIVILEGES;​

验证

为了验证 MySQL 是否正常启动且能正常连接,可通过 host 中的 mysql 客户端进行登录验证

​#exit退出mysql mysql -h 172.25.0.2 -u root -p #输入密码,登录成功​

使用 tarscloud/framework 部署框架

拉取最新版本镜像

​docker pull tarscloud/framework:latest​

启动镜像(目前只考虑了 linux 上, 时间和本机同步)

启动镜像(目前只考虑了 linux 上, 时间和本机同步)
# 挂载的/etc/localtime是用来设置容器时区的,若没有可以去掉
# 3000端口为web程序端口
# 3001端口为web授权相关服务端口(docker>=v2.4.7可以不暴露该端口)
docker run -d \
--name=tars-framework \
--net=tars \
-e MYSQL_HOST="172.25.0.2" \
-e MYSQL_ROOT_PASSWORD="123456" \
-e MYSQL_USER=root \
-e MYSQL_PORT=3306 \
-e REBUILD=false \
-e INET=eth0 \
-e SLAVE=false \
--ip="172.25.0.3" \
-v /data/framework:/data/tars \
-v /etc/localtime:/etc/localtime \
-p 3000:3000 \
-p 3001:3001 \
tarscloud/framework:latest

安装完毕后, 访问 http://${your_machine_ip}:3000 打开 web 管理平台

目录说明

创建时, 会将 docker 的目录/data/tars 映射到宿主机目录/data/framework, 启动 docker 后, 请检查宿主机目录: /data/tars, 正常情况下会有创建以下几个目录:

  • app_log: tars 服务的日志目录
  • tarsnode-data: tarsnode/data 目录(存放发布到 docker 的业务服务), 保证 docker 重启, 数据不丢失
  • web_log: web 中 tars-node-web 模块的日志(主机才有)
  • demo_log: web 中 tars-user-system 模块的日志(主机才有), (docker>=v2.4.7 这个目录下无内容了)
  • patchs: 上传的发布包(主机才有)

如果这几个目录没有创建, 你可以手工创建, 再重启 docker.

参数解释

MYSQL_IP: mysql 数据库的 ip 地址
MYSQL_ROOT_PASSWORD: mysql 数据库的 root 密码
INET: 网卡的名称(ifconfig 可以看到, 比如 eth0), 表示框架绑定本机 IP, 注意不能是 127.0.0.1
REBUILD: 是否重建数据库,通常为 false, 如果中间装出错, 希望重置数据库, 可以设置为 true
SLAVE: 是否是从节点, 可以部署多台机器, 通常一主多从即可.
MYSQL_USER: mysql 用户, 默认是 root
MYSQL_PORT: mysql 端口

Docker 部署 Tars 应用节点

Tars 应用节点镜像默认为集合环境(Java+GoLang+NodeJs+PHP)的镜像,如果需要可登陆 Docker Hub 查看各语言相关 tag

  1. 拉取镜像最新版本:

​docker pull tarscloud/tars-node:latest​

  1. 启动 Node(目前只考虑了 linux 上, 时间和本机同步)

最新版本:

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/tars:/data/tars \
-v /etc/localtime:/etc/localtime \
-p 9000-9010:9000-9010 \
tarscloud/tars-node:latest
  • 初始开放了 9000~9010 端口供应用使用,若不够可自行添加
  • Node 启动之后会自动向框架 172.25.0.3 进行注册,部署完成之后在框架的 运维管理-》节点管理 中可以看到 IP 为 ​​172.25.0.5​​ 的节点启动

注意, 如果在同一台机器上采用--net=host, 同时启动 framework 和 tars-node 镜像, 是不行的, 因为 framework 中也包含了一个 tars-node, 会导致端口冲突, 启动不了

开发环境 docker-compose

  • 下面是使用 docker-compose 直接拉起开发环境的示例,仅供学习参考
  • ./source/Shanghai 是 linux 时区设置文件,需要自行获取


version: "3"

services:
mysql:
image: mysql:8.0.27
container_name: tars-mysql
ports:
- "3307:3306"
restart: always
environment:
MYSQL_ROOT_PASSWORD: "123456"
volumes:
- ./mysql/data:/var/lib/mysql:rw
- ./source/Shanghai:/etc/localtime
networks:
internal:
ipv4_address: 172.25.1.2
framework:
image: tarscloud/framework:v3.0.10
container_name: tars-framework
ports:
- "3000:3000"
restart: always
networks:
internal:
ipv4_address: 172.25.1.3
environment:
MYSQL_HOST: "172.25.1.2"
MYSQL_ROOT_PASSWORD: "123456"
MYSQL_USER: "root"
MYSQL_PORT: 3306
REBUILD: "false"
INET: eth0
SLAVE: "false"
volumes:
- ./framework/data:/data/tars:rw
- ./source/Shanghai:/etc/localtime
depends_on:
- mysql
node:
image: tarscloud/tars-node:latest
container_name: tars-node
restart: always
networks:
internal:
ipv4_address: 172.25.1.5
volumes:
- ./node/data:/data/tars:rw
- ./source/Shanghai:/etc/localtime
environment:
INET: eth0
WEB_HOST: http://172.25.1.3:3000
ports:
- "9000-9010:9000-9010"
depends_on:
- framework
networks:
internal:
driver: bridge
ipam:
config:
- subnet: 172.25.1.0/16

go安装

ubuntu 安装最新版本的 golang,go1.18后不需要配置环境变量,直接默认配置好了,安装完直接就可以go version



sudo apt install software-properties-common -y

sudo add-apt-repository ppa:longsleep/golang-backports

sudo apt update

sudo apt install golang-go -y
#查看版本
go version

​go version​

下面是编译安装



# 下载安装 我下载的最新的go1.1.9
cd /usr/local/src
wget https://golang.google.cn/dl/go1.18.linux-amd64.tar.gz
tar -zxvf go1.18.linux-amd64.tar.gz -C /usr/local/
# 增加配置文件
vim /etc/profile

export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin
export GOPATH=/opt/go
export PATH=$PATH:$GOPATH/BIN
export GO111MODULE=on
export GOPROXY=https://goproxy.cn
# 应用改变
source /etc/profile
# 查看版本
go version
- go version go1.18 linux/amd64

上面的参考博客的
root@wk-VirtualBox:/www/wwwroot# which go
/usr/bin/go

我自己的
vim /etc/profile
#Added by GO
export PATH=$PATH:/usr/local/src/go/bin
export GOROOT=/usr/local/go
export GOPATH=/www/wwwroot

source ~/.bashrc
//接下来为了验证是否成功安装,可以输入如下
go version
//若显示版本go version go version go1.19.1 linux/amd64则说明安装成功


配置为记得看看是否生效 go env
或者
编辑vim /etc/profile 在尾部插入
/usr/local/src/go/bin go安装目录
/usr/local/src/go/bin/go version
/www/wwwroot gopath工作目录

source /etc/profile 保存配置

go环境的基础配置



#如果在国内, 可以设置go代理:
go env -w GOPROXY=https://goproxy.cn
#另外请设置go模式为:
go env -w GO111MODULE=auto
#进入 GOPATH目录 需要翻墙
#Golang环境准备,tarsgo要求golang版本在1.9.x及以上。
#安装tars:
go get github.com/TarsCloud/TarsGo/tars
#编译tars协议转Golang工具:
cd $GOPATH/src/github.com/TarsCloud/TarsGo/tars/tools/tars2go && go build .

cp tars2go $GOPATH/bin
#检查下GOPATH路径下tars是否安装成功。

#记得给go的权限
[root@localhost tars2go]# which go
/usr/local/src/go/bin/go
sudo chmod -R 777 /usr/local/src/go #安装目录go的权限
sudo chmod -R 777 /www/wwwroot #给gopath权限
要不然报错下面
go: error obtaining buildID for go tool asm: fork/exec /usr/local/src/go/pkg/tool/linux_amd64/asm: permission denied

tarsgo安装和配置TarsGo

必须安装git

​sudo apt-get install git​

安装Tars,终端输入,网络得翻墙才行

​go get -u -v github.com/TarsCloud/TarsGo/tars​

编译tars2go协议

​cd $GOPATH/src/github.com/TarsCloud/TarsGo/tars/tools/tars2go && go build . go install​

安装完成后,终端输入tars2go,看看该命令是否存在

demo实例

参考文档:https://doc.tarsyun.com/#/dev/tarsgo/tarsgo.md

创建服务



cd $GOPATH/src/github.com/TarsCloud/TarsGo/tars/tools
chmod +x create_tars_server.sh
./create_tars_server.sh TestApp HelloGo SayHello

或者
/www/wwwroot/TarsGo/tars/tools/create_tars_server.sh TestApp HelloGo SayHello
cp -r /www/wwwroot/src/TestApp/HelloGo/ /www/wwwroot/bin/HelloGo/



成功终端显示
Great!Done! You can jump in $GOPATH/src/TestApp/HelloGo
这就是生成demo的位置。

定义接口文件



# vim HelloGo/SayHello.tars
module TestApp{
interface SayHello{
int echoHello(string name, out string greeting);
};
};
服务端开发,首先把 tars 协议文件转化为 Golang 语言形式
/www/wwwroot/bin/tars2go -outdir=tars-protocol -module=github.com/Tars/test SayHello.tars
输出 SayHello.tars [SayHello.tars]

编译生成可执行文件,并打包发布包。



编译
cd /www/wwwroot/bin/HelloGo/ && make && make tar
或者
cd $GOPATH/bin/HelloGo/ && make && make tar

[root@localhost HelloGo]# pwd
/www/wwwroot/bin/HelloGo
[root@localhost HelloGo]# ls
client debugtool go.sum HelloGo.20220907192630.tgz main.go SayHello_imp.go scripts tars-protocol
config go.mod HelloGo HelloGo.tgz

服务部署

(1)执行HelloGo目录下的start.sh,开启服务



[root@localhost HelloGo]# pwd
/www/wwwroot/bin/HelloGo
#执行
[root@localhost HelloGo]# ./start.sh
+ make
install /www/wwwroot/bin/tars2go...
#go get github.com/TarsCloud/TarsGo/tars/tools/tars2go && go install github.com/TarsCloud/TarsGo/tars/tools/tars2go
/www/wwwroot/bin/tars2go SayHello.tars ...
/www/wwwroot/bin/tars2go -outdir=tars-protocol -module=github.com/Tars/test SayHello.tars
SayHello.tars [SayHello.tars]
/usr/local/src/go//bin/go mod tidy
/usr/local/src/go//bin/go build -o HelloGo
+ ./HelloGo --config=config/config.conf
listen obj for TestApp.HelloGo.SayHelloObj failed: listen tcp 127.0.0.1:10015: bind: address already in use
#查看端口是否启动成功
netstat -anp | grep 10015
tcp 0 0 127.0.0.1:10015 0.0.0.0:* LISTEN 31512/./HelloGo
#如果被其他应用占用则去cat /www/wwwroot/bin/HelloGo/config/config.conf修改端口或者杀掉kill -9 {PID}

部署成功后编译测试



[root@localhost client]# pwd
/www/wwwroot/bin/HelloGo/client
[root@localhost client]# go build client.go
[root@localhost client]# ls
client client.go
#开启客户端
./client
成功终端显示
ret: 0 resp: hello tars
报链接不是的原因,就是没启动服务成功(执行HelloGo目录下的start.sh,开启服务)
cd /www/wwwroot/bin/HelloGo
./start.sh #启动服务
dial tcp 172.18.0.4:22899: connect: connection refused
[root@localhost client]# go build client.go
[root@localhost client]# ./client
#终端显示hellp tars 恭喜你已经编译成功了
ret: 0 resp: hello tars

备份一个config.conf(报错99%就是配置问题)



[root@localhost HelloGo]# cat config/config.conf 
<tars>
<application>
<server>
app=TestApp
server=HelloGo
local=tcp -h 127.0.0.1 -p 10014 -t 30000
logpath=/tmp
<TestApp.HelloGo.SayHelloObjAdapter>
allow
endpoint=tcp -h 127.0.0.1 -p 10015 -t 60000
handlegroup=TestApp.HelloGo.SayHelloObjAdapter
maxconns=200000
protocol=tars
queuecap=10000
queuetimeout=60000
servant=TestApp.HelloGo.HttpSayHelloObj
shmcap=0
shmkey=0
threads=1
</TestApp.HelloGo.SayHelloObjAdapter>
</server>
</application>
</tars>

发布操作

TarsGo部署

接着上文提到,我们通过make tar生成了tgz包,此时我们只需要在界面上完成服务的创建,既可以发布。

Docker tarsgo_运维_03

 

例如我的配置

Docker tarsgo_tars_04

 

部署完之后,我们回到服务管理模块。

选择刚添加的服务HelloGo,选择发布管理,上传我们刚打出来的tgz包。

Docker tarsgo_gotars_05

 

进入发布管理,选择发布包进行上传,这样服务器上会有所有的发布版本,如果遇到问题也方便快速回滚。。

Docker tarsgo_容器_06

 

上传完成,回到发布界面,点击发布,即可完成本次发布。

Docker tarsgo_容器_07

 

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: goDocker