Github 上的个人项目开源心得

「gortal」一个使用 Go 语言开发的,超级轻量的堡垒机(跳板机)服务原文链接 https://elfgzp.cn/2019/12/09/gortal-site-project

由于最近在 Github 发了一个个人开源项目 –「gortal」一个使用 Go 语言开发的,超级轻量的堡垒机(跳板机)服务,于是想写一篇博文来记录一下自己的开源心得。

虽然不是第一次写开源项目了,但是不能放过这次写博文的热情,下一次就不知道啥时候写了。

而且这篇文章的主要目的也是想分享一些开源的心得给读者们。

产生 Idea

首先不管是个人项目还是开源项目都得又一个 Idea,我先来说说gortal这个项目的 idea 是怎么来的。

笔者有一群热开技术的小伙伴们,TNK-Studiotechnical studio技术小作坊。

@mayneyao同学的开源项目中文独立博客调研需要服务器来跑爬虫,于是我们便将手上的闲置云计算资源都贡献出来。

我想了想没准以后还会有这样的需求,于是想到了公司使用的jumpserver 堡垒机,想在组织的其中一个服务器搭起来。

于是就docker一把梭,两三下就跑起来了。

结果就是,服务器卡死了 …

jumpserver的官方文档看了一眼。

Jumpserver 环境要求:
硬件配置: 2个CPU核心, 4G 内存, 50G 硬盘(最低)

我们闲置的云计算资源基本都是1 核 2 G的配置,这配置要求玩不起呀。

然后搜了一下有没有其他同类型的,轻量一点的项目能拿来用,最后也是没有找到合适的。

自己来造

既然没有,那就自己来造!

Idea有了,就差程序员了,现在程序员也不缺了,就差用啥语言了。 这时候肯定是选世界上最好的语言 P ..

刚开始想考虑使用自己的本命语言Python,但是后来考虑到Go语言相比之下部署简单,而且不管是生成的可执行程序还是docker镜像都非常的小,于是果断选择了Go

那么应该做成什么样子的呢,因为体验过了jumpserver的终端交互的模式,所以也想开发成相同的方式。当然为了轻量,肯定是抛弃了Web,完全使用终端来交互。

接下来就是开源的轮子选择了,当然在实现你的 Idea 的时候切忌从头到位自己做,如果有优秀的开源方案一定要拿来用,如果不满足自己的需求在针对其进行修改。在使用其中一个开源项目manifoldco/promptui的时候就发现不满足需求的地方,这时候就可以 fork 一份到自己的仓库,自己改了自己用。

最终根据技术方案选择的轮子如下:

项目 To-do

啥都选好了,准备开始动手了,却发现我该从哪里开始好呢?

这时候就需要列一个To-do了,笔者使用的是notion的笔记工具。使用看板将项目各个待实现的功能列出来,实现完一个将其拖入完成项中。

这样不仅仅是自己可以梳理当前需要做的,而且在多人协作开发也非常有帮助。

Notion牛批!!!

准备好 To-do 就可以正式开工了,当功能完成得差不多的时候,才是正式开始的时候。

加个 CI ️

基础功能做好了,准备发布Release了,Go开发的程序只需要打包成不同平台的二进制可执行文件就可以了。

但是那么多平台,一个一个的手动build然后上传,这哪是程序员干的事,这是CI– 持续集成(Continuous integration,简称CI)要干的事情。

在开发这个项目之前,有使用过Travis CI,它对Github开源项目是免费的。 但是前一段时间Github推出了Github Actions于是抱着尝尝鲜的态度就选择了它。

它使用起来也非常的简单,点击仓库上方的Actions菜单就可以进入仓库的Actions配置页面。

笔者在使用过程中觉得Github ActionsTravis CI相比,其最大的优势是它的Marketplace,里面有非常多开源的别人写好的Actions,可以直接拿来简单修改后使用,而且这些Actions当然也是使用Github进行版本管理的。

如何使用这里就不做详细介绍了,感兴趣的可以查看Github Actions 官方文档

这里我给仓库添加了一个「创建 Release」就自动打包所有镜像的actions,它的仓库地址我也放在这里ngs/go-release.action

最后它的效果就是自动帮你打包所有平台的二进制可执行程序,并压缩上传到Github

来个 Docker 镜像

当然一个服务怎么少的了Docker镜像,还不了解Docker的同学可以看看阮一峰的 Docker 入门教程,笔者觉得Docker简直就是 21 世纪程序员最伟大的发明之一。

而且官方的Docker HubGithub结合使用简直不能再香。

不需要写额外的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,它是你项目的封面。 很多时候我在浏览别人的开源项目,我可能都不在乎他这个项目做了什么,但从他的Readme写的非常的好,我就给他点个star⭐️。

而且最好是能弄双语的Readme,这样能让老外也能看懂,再不行就写一份中文的,剩下交给谷歌翻译。

当然Readme最好不能都是字,要有演示的GIF,这样进来的人第一眼就知道你这个项目是干啥的。

这里笔者推荐LICEcap这个工具,本片文章所有的动图都是使用这个工具录制的。

Readme写好之后,给它加上Badges– 徽章 就是画龙点睛之笔了。

Badges的添加也是非常简单的,我们只需要使用这个开源项目shields,并选择我们想要的徽章、填写好 URL、复制粘贴到Readme,搞定。

复制粘贴后你会得到一个shields的链接,你只需要将链接改成Markdown的图片链接格式就可以了,参考链接

乞讨 Star ⭐️

项目做完了,当然不能就放着不管了,除非你的项目非常非常的优秀,否则他是不会自己涨星星的。

以本项目为例,笔者就去V2EX分享了自己的项目,也收获了不少星星 ⭐️。

你需要去各种社区分享你的开源项目,例如:V2EX稀土掘金segmentfault等等。

让你的项目给更多的人看到,同理写博客也是如此,不分享出去就没有正反馈,就少了很多动力。

稍微总结一下

笔者在这片文章没有过多的去介绍项目的开发过程,因为觉得开发以外的过程更值得分享。

开源项目不只是实现了Idea就完事了,你可能还需要去让它更加的方便维护,自动的做一些重复的事情。还要去包装它分享它,这样才会有更多的人使用。当有更多人时候的时候,这个项目就需要花时间去迭代和维护了。
最后的最后,觉得文章还不错的,觉得这个开源项目还可以的,赏个star⭐️ 吧,https://github.com/TNK-Studio/gortal

作者:gzp_

  • 29
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你躺过的铁轨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值