这是我参与「第三届青训营 -后端场」笔记创作活动的的第2篇笔记。昨天刚听了Go语言实战项目的直播课,今天便尝试照着视频即手册里的步骤跑项目代码。高高兴兴的拉取了源码,结果好家伙,不跑不知道,一跑满地都是坑。一趟坑踩过来人都踩麻了,以至于最后仅仅是成功运行了示例项目也让我充满成就感。。。这里记录了踩的坑尝试运行项目过程中的一些关键点,愿之后不在重蹈。
1. DockerDesktop
示例项目用到了几个重要的依赖:MySQL数据库、ETCL做服务注册与发现、Jaeger做分布式追踪。项目目录里直接提供了docker-compose文件,以便我们通过docker快速的获取和搭建以上三个服务。但问题是我这 Windows 系统上面也没有 Docker 呀,于是按照手册上的建议首先下载了 Docker Desktop。
光速下载完,但是下完以后发现这个东西还是要依赖linux系统才能跑的,它需要 WSL!
2. WSL
WSL就是windows平台的linux子系统。用起来像是主机上开了一台linux的虚拟机,但是它共享了windows的文件系统,并且占用资源比起直接开一台虚拟机明显要少得多。 除了上述的Docker Desktop外手册中也提到项目构建的工具kitex也需要在linux环境下使用,因此我们不得不配置WSL啦。。。
我的系统默认是有wsl,但为支持docker desktop 还需要更新为wsl 2,使用指令:wsl --set-default-version 2。
使用wsl -l -v查看已安装的子系统状态,版本已变为2
C:\Users\Tian>wsl -l -v
NAME STATE VERSION
* Ubuntu-20.04 Running 2
docker-desktop-data Stopped 2
docker-desktop Stopped 2
之后因为还要在ubuntu子系统下跑项目,需要先给它装个Go,这个已经装了好几次了都装麻了,需要注意的主要也就是改下环境变量,ubuntu下可以直接在/etc/profile中添加如下代码:
# 加入GO环境变量
export GOROOT=/usr/local/go
export PATH=$GOROOT/bin:$PATH
之后还要注意改下GOPROXY,以免等会儿装kitex报错,还有把GO111MODULE改成on,可以直接在linux下使用如下命令:
> go env -w GO111MODULE=on
> go env -w GOPROXY=https://goproxy.cn,direct
也可以直接添到环境变量里或者修改env文件,都一样。
之后按照官网指示安装kitex:
> go install github.com/cloudwego/kitex/tool/cmd/kitex@latest
> go install github.com/cloudwego/thriftgo@latest
3. 启动项目
首先在linux子系统控制台中切到项目目录下,使用 docker-compose up 指令启动三个docker容器,然后按照手册里面给定的步骤,一步一步build并运行三个服务就可以了。
ps:示例项目中给出了shell脚本用于build和运行,十分的方便快捷,但这里有个坑,就是我通过vscode打开的.sh文件发现其为 CRLF 换行,在ubuntu子系统里运行时会出错。需要手动转换成 LF 行尾才能正常运行。
之后可以使用手册里提到的 postman 工具来发送http请求以测试我们的项目是否运行正常。之后也可以访问jaeger看看demonote、demouser俩服务的跟踪信息哈。