从本篇开始,深入到harbor的代码层面,以版本harbor1.1.2版本作为蓝本进行展开.尝试了在本地编译启动UI组件,发现该组件依赖组件adminServer.就先以该组件进行展开.
该组件提供了一个系统配置的功能组件,通过对路由层的分析,该组件对外主要提供四个功能接口,这种方式的实现主要为了保证对配置的动态修改.数据存储是以文件的形式存储在本地.同时为了保证存储数据的安全性,通过程序随机生成一个key,通过对称加密的方式,对存储数据做了加密处理.
将应用程序放入到GOPATH环境变量下
$mkdir -p $GOPATH/src/github.com/vmware/
$mv harbor $GOPATH/src/github.com/vmware/.
1. 用goland打开该程序
2. 配置编译参数
3. 编译执行
编译执行后出现如下错误
发现程序在执行的时候,无法对/etc/adminserver这个文件进行read操作.通过对程序的grep,发现程序在获得环境变量JSON_CFG_STORE_PATH时,获得的值为空,读取了程序设置的default值.解决该问题很简单,将该环境变量指向具有rw权限的目录即可.
编译运行后,该报错信息消失,又出现了一个类似的报错信息
同样的解决思路,设置KEY_PATH环境变量即可.这个key文件存储的是对称加密的密钥,在构建时又prepare的python脚本生成.特别说明,该字符长度有着严格的限制,16位长.
以上这三个问题解决了,adminserver就可以正常启动了.
4. 测试
到此为此,已成功的将该服务启动起来.
debug是一个程序猿必备的技能,通过debug可以清晰的分析出程序的逻辑结构以及数据传输,数值变化等.因为之前一直写脚本语言,好久没完IDE工具下的DEBUFG了.go语言让我重新了找到了这种乐趣.
一起看下goland这个IDE怎么debug adminServer这个组件.
记得先打一个断点.
对程序的debug详情就不做展开,有兴趣可以按照以上的操作,实践下.
adminServer的架构图
1. 初始化系统配置
2. 初始化镜像存储
3. 启动http server
详细代码就不做展开了,有兴趣的话,根据划分的模版进行展开.可以多打些debug.
这是深入到代码层面的第一篇,主要对adminServer组件进行展开,编译该组件源码,使用goland的debug功能,最后根据adminServer的源码,画出了该模块的程序结构图.
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。