【环境】Rocky8使用gvm配置Go多版本管理的微服务开发环境(go-zero)
文章目录
1、Rocky8介绍
2、Go与GoLand安装
3、Go多版本管理(gvm)
4、go微服务框架介绍(含rpc测试工具,proto协议介绍)
5、go-zero安装(web,rpc)
6、环境变量,brew,git,kubectl,ssh等
Rocky Linux与CentOS一样,提供了适用于服务器的稳定版本,旨在作为CentOS的完全兼容替代版本。
Rocky Linux 是一个 Linux 发行版,由 Rocky Enterprise Software Foundation 开发,这是一家自称”自我约束的非营利性”的私营公益公司。Rocky Linux 的目标是成为一个开放的企业操作系统,100% 兼容 Enterprise Linux,即与 Red Hat Enterprise Linux 完全兼容。总之,Rocky Linux 是一个免费开源、兼容 RHEL 的 Linux 发行版,由社区驱动开发,可以用于服务器、工作站等企业级应用场景。
Rocky Linux 与 CentOS 有着密切的关系。CentOS 原本是 RHEL 的一个免费开源再发行版,由社区维护,广泛用于服务器领域。但 2020 年底,Red Hat 宣布 CentOS 项目重心转移,CentOS 8 提前 EOL。
Rocky Linux 的创始人 Gregory Kurtzer 也是 CentOS 的创始人之一。CentOS 的变故直接促使他创建了 Rocky Linux 项目,目标是代替 CentOS,给用户提供一个免费、稳定、可预测的生产环境。因此,从定位上说,Rocky Linux 是 CentOS 的接替者,很多原 CentOS 用户也转向了 Rocky。从技术上说,Rocky Linux 是 RHEL 源代码的再编译版,而 RHEL 之前就是 CentOS 的上游。
Rocky 8(代号 “Green Obsidian” )的一般支持直到2024年5月1日为止,安全支持直到2029年5月01日为止。 支持的架构是 x86_64 和 aarch64 。
Rocky 9(代号 “Blue Onyx” )的一般支持直到2027年5月31日为止,安全支持直到2032年5月31日为止。 支持的架构是 x86_64-v2、aarch64、ppc64le 和 s390x。
参考资料:1 , 2
可以从 Go 官方页面 下载一个相对较新的 Go 二进制版本,然后解压并安装。注意配置环境变量和GOPATH。
使用下面的命令安装:
curl -O https://dl.google.com/go/go1.18.linux-amd64.tar.gz sudo tar -C /usr/local -xzf go1.18.linux-amd64.tar.gz 将 Go 添加到系统路径中:
export PATH=$PATH:/usr/local/go/bin echo "export PATH=$PATH:/usr/local/go/bin" >> ~/.profile source ~/.profile 验证 Go 是否安装成功:
go version 查看go的配置(注意修改)
go env go env -w GOPROXY=“xxxx" go env -w GONOSUMDB=“xxxx" go构建服务
本地运行: go run xxx.go go build xxx.go 指定系统: cat /etc/os-release GOOS=linux GOARCH=amd64 go build -o xxx-servers Jetbrains GoLand安装
本地有环境的情况下 使用远程开发-ssh,服务端会自动安装(配置要求,最低4H8G) 因为 GVM 需要一个现有的 Go 版本来引导编译另一个 Go 版本,建议先安装一个二进制版本的 Go 来引导 GVM 的工作。
官方开源项目:github地址
1、gvm安装要先有go
否则会出现以下报错
gvm install go1.18 Installing go1.18... * Compiling... /root/.gvm/scripts/install: line 93: go: command not found ERROR: Failed to compile. Check the logs at /root/.gvm/logs/go-go1.17.7-compile.log ERROR: Failed to use installed version 2、其他依赖安装(Redhat/Centos)
其他系统的依赖可以参考gvm官方项目
sudo yum install curl sudo yum install git sudo yum install make sudo yum install bison sudo yum install gcc sudo yum install glibc-devel 3、安装gvm
安装命令: bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer) 更新配置: Please restart your terminal session or to get started right away run source /root/.gvm/scripts/gvm 4、使用不同版本的go
gvm listall gvm install go1.21 gvm list gvm use go1.21 5、卸载gvm:
gvm implode Go:十大主流微服务框架
微服务是什么?
rpc是什么?对比rpc和http
有哪些rpc接口测试工具?
1、grpcurl brew install grpcurl grpcurl -plaintext -d '{"name": "World"}' localhost:50051 helloworld.Greeter/SayHello 这里 -plaintext 表示使用明文通信,-d 选项指定请求的 JSON 数据。 2、BloomRPC CLI 虽然 BloomRPC 本身是一个 GUI 工具,但其也提供了一个命令行版本,可以用于非图形环境中进行测试。 npm install -g @bloomrpc/cli bloomrpc-cli --host localhost:50051 --proto ./path/to/your/service.proto --service ServiceName --call MethodName --data '{"field1": "value1", "field2": "value2"}' 数据序列化协议proto是什么?
.proto文件自动生成数据访问代码,减少手动编写和维护代码的工作量。.proto文件中定义的数据结构是自描述的,可以用于生成API文档。Proto的使用场景非常广泛,包括但不限于:
网络服务:用于定义RPC(远程过程调用)协议。
数据存储:用于存储结构化数据到数据库。
配置文件:用于定义配置数据结构。
消息系统:用于定义消息格式,用于消息传递。
使用Proto的步骤:
1、.proto文件定义数据结构 syntax = "proto3"; message Person { string name = 1; int32 id = 2; string email = 3; } 2、编译生成特定编程语言的数据访问类, 例如,使用以下命令生成Java代码: protoc --java_out=. --proto_path=. your_file.proto 3、 使用生成的类,在程序中使用编译生成的类来序列化和反序列化数据。例如,在Java中: Person person = Person.newBuilder() .setName("John Doe") .setId(1234) .setEmail("john.doe@example.com") .build(); // 序列化 byte[] data = person.toByteArray(); // 反序列化 Person newPerson = Person.parseFrom(data); 参考资料:
go-zero 是一个集成了各种工程实践的 web 和 rpc 框架。通过弹性设计保障了大并发服务端的稳定性,经受了充分的实战检验。其中web是基于RESTful API的,rpc是基于gRPC服务的。
官方文档:地址
web服务(goctl安装)
go版本:go mod tidy -go=1.xx && go mod tidy -go=1.xx go-zero版本:goctl需要与go-zero版本一致,比如当前go.mod中的zero是1.3.2,那么ctl就是1.3.2 查看所有的ctl版本 go list -m -versions github.com/zeromicro/go-zero/tools/goctl 安装,注意这里的v很重要(漏了就找不到了) go install github.com/zeromicro/go-zero/tools/goctl@latest go install github.com/zeromicro/go-zero/tools/goctlv1.3.2 验证: goctl —version 使用: 生成API服务模板:goctl api new myproject 你可以在 myproject.api 文件中定义你的 API 接口。例如,默认情况下可能会有一个简单的 Ping 接口。 修改代码:goctl api go -api myproject.api -dir . 启动服务:go run myproject.go -f etc/myproject-api.yaml rpc服务(protoc安装),手动下载地址
注意: 需要提前将添加 Go 的 bin 目录到系统 PATH: 安装: 通过 goctl 可以一键安装 protoc,protoc-gen-go,protoc-gen-go-grpc 相关组件,你可以执行如下命令 goctl env check --install --verbose —force 手动安装: 解压下载的压缩包,并将其移动到 $GOBIN 目录,查看 $GOBIN 目录: go env GOPATH GOBIN 为 $GOPATH/bin,如果你的 $GOPATH 不在 $PATH 中,你需要将其添加到 $PATH 中。 使用: 生成rpc项目模板:goctl rpc new myrpcservice 打开 myrpcservice.proto 文件,根据需要定义你的 RPC 接口。例如,默认可能包含一个简单的服务。 生成代码:goctl rpc protoc myrpcservice.proto --go_out=. --go-grpc_out=. --zrpc_out=. 启动服务:go run myrpcservice.go -f etc/myrpcservice.yaml linux内核系统环境变量介绍
常见的配置文件及其用途: 1.全局配置文件(对系统中所有用户生效): /etc/profile:系统范围内的环境变量和启动脚本。 /etc/bashrc:系统范围内的bash shell设置。 /etc/environment:用于设置全局环境变量,但不会解析shell语法(例如变量替换)。 2.用户特定的配置文件(只对特定用户生效): ~/.bash_profile:对某个用户生效的登录shell配置。用于用户级别的登录shell配置。 ~/.bashrc:对某个用户生效的非登录shell配置。用于用户级别的非登录shell配置,通常在启动一个新的终端时执行。 ~/.profile:对某个用户生效的登录shell配置,适用于多种shell。 3.配置过程 nano ~/.bash_profile export MY_VARIABLE="my_value" source ~/.bash_profile echo $MY_VARIABLE XS mac 环境变量
export PATH=$PATH:$(go env GOPATH)/bin export PATH=$PATH:/Users/user/go/bin source ~/.bashrc # 或者 source ~/.bash_profile, source ~/.zshrc mac安装homebrew
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" 环境变量: ls /opt/homebrew/bin/brew nano ~/.bash_profile export PATH="/opt/homebrew/bin:$PATH” 保存并退出文件(按 Ctrl + X,然后按 Y,再按 Enter) source ~/.bash_profile brew —version K8S相关
安装相关: 下载本体:curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" 下载验证:curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl.sha256" 验证:echo "$(cat kubectl.sha256) kubectl" | sha256sum --check 安装:sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl 版本:kubectl version --client 配置相关 mkdir .kube scp ~/.kube/config root@xxx:xxx/xxx git安装,官方,
ssh相关(服务器同理) 生成ssh秘钥:ssh-keygen -t rsa -C “xxx.com” 公钥(远程配置):cat ~/.ssh/id_rsa.pub 私钥(本地使用):cat ~/.ssh/id_rsa git配置 git config --global user.name "John Doe” git config --global user.email johndoe@example.com git命令 git pull git fetch git checkout -b feat-xxx-xxx git add . git commit -m feat: xxx" git push origin git branch -d branch_name 删除本地 git push origin --delete branch_name 删除远程 git报错(配置本机ssh服务) Enter passphrase for key '/Users/user/.ssh/id_rsa’: 系统pwd eval "$(ssh-agent -s)” ssh-add ~/.ssh/id_rsa ssh服务管理 # 检查sshd服务状态 sudo systemctl status sshd # 启动sshd服务 sudo systemctl start sshd # 停止sshd服务 sudo systemctl stop sshd # 重启sshd服务 sudo systemctl restart sshd # 使sshd服务在系统启动时自动启动 sudo systemctl enable sshd # 禁止sshd服务在系统启动时自动启动 sudo systemctl disable sshd