原文连接 https://elfgzp.cn/2019/12/09/gortal-site-projecthtml
因为最近在 Github 发了一个我的开源项目 - 「gortal」一个使用 Go 语言开发的,超级轻量的堡垒机(跳板机)服务,因而想写一篇博文来记录一下本身的开源心得。git
虽然不是第一次写开源项目了,可是不能放过此次写博文的热情,下一次就不知道啥时候写了。程序员
并且这篇文章的主要目的也是想分享一些开源的心得给读者们。github
首先不论是我的项目仍是开源项目都得有一个 Idea,我先来讲说 gortal
这个项目的 idea 是怎么来的。golang
笔者有一群热爱开源技术的小伙伴们,TNK-Studio - technical studio
技术小做坊。docker
@mayneyao 同窗的开源项目 中文独立博客调研 须要服务器来跑爬虫,因而咱们便将手上的闲置云计算资源都贡献出来。segmentfault
我想了想没准之后还会有这样的需求,因而想到了公司使用的 jumpserver 堡垒机,想在组织的其中一个服务器搭起来。服务器
因而就 docker
一把梭,两三下就跑起来了。ssh
结果就是,服务器卡死了 ...ide
去 jumpserver
的官方文档看了一眼。
Jumpserver 环境要求:
硬件配置: 2个CPU核心, 4G 内存, 50G 硬盘(最低)
...
咱们闲置的云计算资源基本都是 1 核 2 G
的配置,这配置要求玩不起呀。
而后搜了一下有没有其余同类型的,轻量一点的项目能拿来用,最后也是没有找到合适的。
既然没有,那就本身来造!
Idea
有了,就差程序员了,如今程序员也不缺了,就差用啥语言了。 这时候确定是选世界上最好的语言 P ..
刚开始想考虑使用本身的本命语言 Python
,可是后来考虑到 Go
语言相比之下部署简单,并且不论是生成的可执行程序仍是 docker
镜像都很是的小,因而果断选择了 Go
。
那么应该作成什么样子的呢,由于体验过了 jumpserver
的终端交互的模式,因此也想开发成相同的方式。固然为了轻量,确定是抛弃了 Web
,彻底使用终端来交互。
接下来就是开源的轮子选择了,固然在实现你的 Idea 的时候切忌从头到位本身作,若是有优秀的开源方案必定要拿来用,若是不知足本身的需求在针对其进行修改。在使用其中一个开源项目 manifoldco/promptui 的时候就发现不知足需求的地方,这时候就能够 fork 一份到本身的仓库,本身改了本身用。
最终根据技术方案选择的轮子以下:
终端交互 - manifoldco/promptui
sshd 服务开发 - gliderlabs/ssh
ssh 中转客户端 - helloyi/go-sshclient
其余我的开源项目 - fatih/color、op/go-logging 等等
啥都选好了,准备开始动手了,却发现我该从哪里开始好呢?
这时候就须要列一个 To-do
了,笔者使用的是 notion 的笔记工具。使用看板将项目各个待实现的功能列出来,实现完一个将其拖入完成项中。
这样不只仅是本身能够梳理当前须要作的,并且在多人协做开发也很是有帮助。
Notion 牛批!!!
准备好 To-do 就能够正式开工了,当功能完成得差很少的时候,才是正式开始的时候。
基础功能作好了,准备发布 Release
了,Go
开发的程序只须要打包成不一样平台的二进制可执行文件就能够了。
可是那么多平台,一个一个的手动 build
而后上传,这哪是程序员干的事,这是 CI
- 持续集成(Continuous integration,简称CI)要干的事情。
在开发这个项目以前,有使用过 Travis CI
,它对 Github
开源项目是免费的。 可是前一段时间 Github
推出了 Github Actions
因而抱着尝尝鲜的态度就选择了它。
它使用起来也很是的简单,点击仓库上方的 Actions
菜单就能够进入仓库的 Actions
配置页面。
笔者在使用过程当中以为 Github Actions
跟 Travis CI
相比,其最大的优点是它的 Marketplace
,里面有很是多开源的别人写好的 Actions
,能够直接拿来简单修改后使用,并且这些 Actions
固然也是使用 Github
进行版本管理的。
如何使用这里就不作详细介绍了,感兴趣的能够查看 Github Actions 官方文档。
这里我给仓库添加了一个「建立 Release」就自动打包全部镜像的 actions
,它的仓库地址我也放在这里 ngs/go-release.action。
最后它的效果就是自动帮你打包全部平台的二进制可执行程序,并压缩上传到 Github
。
固然一个服务怎么少的了 Docker
镜像,还不了解 Docker
的同窗能够看看阮一峰的 Docker 入门教程,笔者以为 Docker
简直就是 21 世纪程序员最伟大的发明之一。
并且官方的 Docker Hub
与 Github
结合使用简直不能再香。
不须要写额外的 Github Actions
配置或其余的 CI
配置文件,你只须要将你的仓库与 Docker Hub
仓库关联起来,固然不要忘了在你的仓库放 Dockerfile
文件。
而后在 Docker Hub
仓库配置好自动构建镜像的逻辑,就大功告成了。
并且 Docker Hub
的配置指引也作的很是好,很是容易理解。
固然这里很是很是重要的就是若是你是用的是 Go
语言进行开发的项目,Docker
镜像构建必定要分红两步。一个是编译镜像,一个是正式镜像,这样最终打包的镜像只会包含一个二进制文件,而不是将源码一块儿打包。
FROM golang:1.12-alpine AS builder # ... 省略代码 FROM alpine:latest LABEL maintainer="Elf Gzp <gzp@741424975@gmail.com> (https://elfgzp.cn)" COPY --from=builder /opt/gortal ./ RUN chmod +x /gortal # ... 省略代码
本项目完整的 Dockerfile
连接以下,能够经过连接查看完整的 Dockerfile
。
https://github.com/TNK-Studio/gortal/blob/master/Dockerfile
能够经过图片看到使用分两步构建和一步构建,最终打包的 Docker
镜像大小差别是很是大的。
接下来是最重要的一步,写好 Readme
,它是你项目的封面。 不少时候我在浏览别人的开源项目,我可能都不在意他这个项目作了什么,但从他的 Readme
写的很是的好,我就给他点个 star
⭐️。
并且最好是能弄双语的 Readme
,这样能让老外也能看懂,再不行就写一份中文的,剩下交给谷歌翻译。
固然 Readme
最好不能都是字,要有演示的 GIF
,这样进来的人第一眼就知道你这个项目是干啥的。
这里笔者推荐 LICEcap 这个工具,本片文章全部的动图都是使用这个工具录制的。
Readme
写好以后,给它加上 Badges
- 徽章 就是画龙点睛之笔了。
Badges
的添加也是很是简单的,咱们只须要使用这个开源项目 shields,并选择咱们想要的徽章、填写好 URL、复制粘贴到 Readme
,搞定。
复制粘贴后你会获得一个 shields
的连接,你只须要将连接改为 Markdown
的图片连接格式就能够了,参考连接。
项目作完了,固然不能就放着无论了,除非你的项目很是很是的优秀,不然他是不会本身涨星星的。
以本项目为例,笔者就去 V2EX 分享了本身的项目,也收获了很多星星 ⭐️。
你须要去各类社区分享你的开源项目,例如:V2EX、稀土掘金、segmentfault 等等。
让你的项目给更多的人看到,同理写博客也是如此,不分享出去就没有正反馈,就少了不少动力。
笔者在这片文章没有过多的去介绍项目的开发过程,由于以为开发之外的过程更值得分享。
开源项目不仅是实现了 Idea
就完事了,你可能还须要去让它更加的方便维护,自动的作一些重复的事情。还要去包装它分享它,这样才会有更多的人使用。当有更多人时候的时候,这个项目就须要花时间去迭代和维护了。
最后的最后,以为文章还不错的,以为这个开源项目还能够的,赏个 star
⭐️ 吧,https://github.com/TNK-Studio/gortal。