热度 3
Shipyard在本地重新编译源码安装方式
一:说明
1.1:好处
通过将源码下载到本地重新编译安装可以任意的修改源码,修改功能。
1.2:shipyard项目说明
整个项目是通过go语言实现核心逻辑部分,也就是说是通过golang语言调用的Docker Remote API然后使用angular.js+semantic 实现的UI部分。这两部分合起来构成了shipyrad的web管理系统。
基于以上分析,所以整个项目需要的环境如下
1) go环境
2) godep工具
3) nvm
4) bower
5) node.js
这些环境的安装在网上都有很多文章,这里不再赘述,截图说明一下我自己安装的版本,操作系统采用centos7
1.3:项目重新构建流程
1)编译ui部分,具体来说就是编译controller/static部分
2)编译核心代码go语言部分,具体来说就是编译controller目录
3)通过controller目录下的Dockerfile文件构建本地shipyard 镜像
4)运行容器
其中1)2)这两部分内容应该可以互换,也就是说谁先编译,谁后编译都没有问题的。本文中先编译核心代码后编译UI
二:操作过程
2.1:下载源码
https://github.com/shipyard/shipyard
通过以上地址将源码下载到本地。目录结构如下图:
2.2:通过LiteIDE或者其它工具打开源码,进入到controller目录,这个里面有main.go函数,说明整个源码开始构建的第一步在这里。
Main.go函数的部分截图如下:
然后我们开始用LiteIDE调试(F5)会报错,说找不到包。由于这个项目是开源的项目,所有的编译都是在github.com上做的,所以我们下载到本地之后会提示找不到类似github.com/Sirupsen/logrus这样的包。
我们要做的第一步就是通过F5调试吧所有找不到的包都从github.com下载下来放到本地。我这里下载到本地以后命名规则基本没有变,只是将github.com换成了packages文件夹。这样我们在所有go文件中凡是引用了github.com上包的地方,都替换成packages,然后把下载下来的包按照原来的路径放进到packages文件夹即可。假如,main.go文件中原来包路径为:github.com/codegangsta/cli 更改之后就会变成 packages/codegangsta/cli。如果文件中有golang.org开头的包,这个时候不能另起别的包名,得用golang.org这个包名来存放本地的包。通过上面的更改之后go环境的gopath目录的src目录下现在就有三个文件夹了如下图:
其中packages存放的是文件中github.com开头的包
golang.org存放的是文件中golang.org开头的包
shipyard是从github.com下载下来的源码
备注:如果你在本地也建立一个文件夹 github.com这样的话只需要把go文件中需要import的包下载下来放到github.com目录即可。Go文件不需要修改代码。这样的话go环境的gopath目录下的src目录下的三个文件夹分别为:shipyard github.com golang.org
通过以上的修改,在controller目录中应该就可以编译main.go 函数了
2.3:核心代码编译方式(逻辑部分)
Win平台:
如果你的代码放在本机的win平台那么直接在controller目录下通过LiteIDE去编译即可生成controller.exe文件在controller目录下如下图所示
在cmd下运行这个可执行文件,显示如下信息
输出如上信息说明controller目录的文件已经编译成功。其实shipyard整个逻辑部分的核心代码都在这个文件夹中。以后对于这个项目的二次开发基本都是在这个文件夹中做修改。
Linux平台:
所有的包在linux go环境的gopath目录下的src目录下也是同样的结构如下图
/home/mmc/code 为我的gopath目录。因为我这个项目中还有其它的go项目在调试所以会看到多出来的文件夹。但是最主要的关于shipyard这个项目的三个文件件是不能少的。我们可以看下packages文件夹下存放了我们从github.com下载下来的很多第三方依赖的包
整个项目的代码没有问题的时候进入到controller目录,然后执行如下语句
godep go build-a -tags “netgo static_build” -installsuffix netgo
这样在controller目录下就编译出linux下可执行文件controller如图
由于我之前已经编译过所以这个文件已经存在,我只是吧编译命令打出来截图给大家看一下,按照图中的编译命令回车即可编译成功。
然后在controller目录执行以下这个可执行文件看看输出
可以看出和win平台编译出的可执行文件输出结果是一样的。这样的话shipyard这个项目的核心逻辑部分算是编译成功了。
2.4:ui编译
进入到controller/static目录,然后直接输入如下命令回车即可
bower -s install–allow-root -p | xargs echo > /dev/null
编译完成之后会在static目录下生成一个bower_components目录,如图
同样因为之前已经编译过所以截图中只是吧编译命令打出来给大家看一下。
到此为止,核心代码和UI都已经编译成功,下面就是开始创建镜像
2.5:构建本地docker镜像
进入到controller目录,会看到这个目录本来就存在Dockerfile文件,所以利用这个Dockerfile直接构建镜像即可,命令如下
Docker build –t shipclub/shipyard .
如下图
通过以上6个步骤即可编译成功一个本地镜像。Docker images查看
说明这个镜像已经打包成功。
然后利用如下命令启动容器即可
docker run \
-ti \
-d \
--name shipyard-controller \
--link shipyard-rethinkdb:rethinkdb \
--link shipyard-swarm-manager:swarm \
-p 8080:8080 \
shipclub/shipyard:latest \
server \
-d tcp://swarm:3375
备注:这之前必须先启动其他关联的容器。
整个启动之后所运行的容器如下图
然后通过浏览器就可以访问了,如图