Docker tarsgo

2023-05-16

目录

参考:

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

  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包,此时我们只需要在界面上完成服务的创建,既可以发布。

例如我的配置

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

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Docker tarsgo 的相关文章

随机推荐

  • leetcode 1357. 每隔 n 个顾客打折(C++)

    超市里正在举行打折活动 xff0c 每隔 n 个顾客会得到 discount 的折扣 超市里有一些商品 xff0c 第 i 种商品为 products i 且每件单品的价格为 prices i 结账系统会统计顾客的数目 xff0c 每隔 n
  • (Taro篇)如何自定义小程序Swiper面板指示点的样式

    效果图 轮播组件jsx span class token keyword import span span class token punctuation span Component span class token punctuatio
  • 如何使用Docker搭建Heimdall-打造你自己的专属浏览器首页

    一 介绍 Heimdall是一种以简单的方式组织所有指向您最常用的网站和 Web 应用程序的链接的方法 简单是 Heimdall 的关键 它甚至可以使用 Google Bing 或 DuckDuckGo 包含一个搜索栏 二 安装环境 系统
  • CentOS8中使用Libreoffice7.3遇到的问题

    首先借鉴了这篇文章对Libreoffice进行了下载和安装 https blog csdn net UnicornRe article details 119677482 在本地的centos7环境中测试word转pdf是没有问题的 xff
  • UIImageView的基本使用

    UIImageView作为iOS开发里基本控件 xff0c 是我们第四个需要学习的 下面我来为大家介绍一下UIImageView的一些常用属性和它们的用法 这里附上UI控件演示的源码地址 xff1a https github com LOL
  • 如何使用Docker搭建PhotoPrism - 打造基于AI私有化的个人相册系统

    一 简介 PhotoPrism 是一款由人工智能驱动的应用程序 xff0c 用于浏览 组织和分享您的照片集 它利用最新技术自动标记和查找图片 您可以在家里 私人服务器或云端运行它 PhotoPrism对很多设备提供了支持 xff0c 包括M
  • Power Keys - 彻底解放电脑使用效率

    简介 Power Keys 是一款十分强大的 快速启动 系统辅助工具 xff0c 支持 Windows 与 macOS xff0c 它可以利用 F1 F12 43 字母或数字 来启动程序或打开网页等操作 xff0c 还拥有类似 VIM 编辑
  • Windows安装Gradle详细图文教程

    简介 Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具 它使用一种基于Groovy的特定领域语言 DSL 来声明项目设置 xff0c 也增加了基于Kotlin语言的kotlin based D
  • CentOS7防火墙(Firewalld篇)

    一 防火墙设置 1 启用防火墙 systemctl start firewalld 2 关闭防火墙 systemctl stop firewalld 3 查看状态 systemctl status firewalld 4 开机启用防火墙 s
  • 9.图--拓补排序

    1 概念 无环图 xff1a 活动 2 拓补序列 xff1a 3 拓补排序 xff1a 对有向图构造拓补序列的过程 1 1 例子 比如有下表 xff0c 要学习 汇编语言 就需要先学习C1和C13课程 要将表画为AOV网图 xff1a 拓补
  • wxHelper使用教程

    方法介绍 前言1 工具介绍 x1f517 1 1 环境介绍1 2 功能介绍1 3 源码地址 2 使用说明 x1f517 2 1 Server说明2 2 引入jar包 3 方法介绍 x1f517 1 服务器配置 token验证 2 自定义菜单
  • go-mysql-elasticsearch 使用

    文档 github 链接 GitHub go mysql org go mysql elasticsearch Sync MySQL data into elasticsearch 参考博客 注意事项 go mysql elasticsea
  • docker快速搭建zookeeper集群

    一 准备工作 1 拉取zookeeper镜像 docker pull zookeeper docker tag docker io zookeeper zookeeper docker rmi docker io zookeeper 2 安
  • kafka优化配置,Kafka 的消费者客户端详解

    目录 前言 一 消费者与消费者组 1 1 图解消费者模型 1 2 消息投递模式 二 Kafka 消费者的应用 2 1 消费者客户端演示 2 2 必要参数配置 2 3 订阅主题与分区 三 消费位移 3 1 什么是偏移量 3 2 自动提交偏移量
  • php mysql mysqli取出的数据都成了string

    mysqli是可以获取数据库中的数据类型的 xff0c 但是默认并没有开启 需要设置option参数 MYSQLI OPT INT AND FLOAT NATIVE function construct database username
  • centOS7下安装GUI图形界面

    1 如何在centOS7下安装GUI图形界面 当你安装centOS7服务器版本的时候 xff0c 系统默认是不会安装GUI的图形界面程序 xff0c 这个需要手动安装CentOS7 Gnome GUI包 2 在系统下使用命令安装gnome图
  • nginx反向代理配置和文件上传ab压测

    安装nginx apt get install y nginx 配置 nginx 查看自己服务器ip curl ip sb vim etc nginx conf d cdn conf server listen 80 server name
  • docker 日常命令小笔记

    目录 常见命令 启动并启动日志 进入容器 dockerfiles apk 命令 编辑网卡centos 重启网卡 查看防火墙的状态 关闭防火墙 xff1a 查看网络ip 查看端口 杀端口 查找php ini位置 安装bcmath扩展 安装ac
  • Wsl2 ubuntu 配置git 阿里云codeup

    目录 创建一个跟你windows git使用相同的用户名 特别重要 配置git 用户名和邮箱 配置阿里云codeup 拉取仓库提示文件权限问题 给用户目录权限 配置项目文件别名 key load public invalid format
  • Docker tarsgo

    目录 参考 xff1a mysql镜像安装 一 安装镜像 二 创建mysql容器 使用 tarscloud framework 部署框架 拉取最新版本镜像 启动镜像 目前只考虑了 linux 上 时间和本机同步 目录说明 参数解释 Dock