目录
参考:
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
3、查看本地镜像库
docker images
二、创建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
-
拉取镜像最新版本:
docker pull tarscloud/tars-node:latest
-
启动 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包,此时我们只需要在界面上完成服务的创建,既可以发布。
例如我的配置
部署完之后,我们回到服务管理模块。
选择刚添加的服务HelloGo,选择发布管理,上传我们刚打出来的tgz包。
进入发布管理,选择发布包进行上传,这样服务器上会有所有的发布版本,如果遇到问题也方便快速回滚。。
上传完成,回到发布界面,点击发布,即可完成本次发布。