Github 上的我的项目开源心得

原文连接 https://elfgzp.cn/2019/12/09/gortal-site-projecthtml

因为最近在 Github 发了一个我的开源项目 - 「gortal」一个使用 Go 语言开发的,超级轻量的堡垒机(跳板机)服务,因而想写一篇博文来记录一下本身的开源心得。git

gortal

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

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

产生 Idea 💡

首先不论是我的项目仍是开源项目都得有一个 Idea,我先来讲说 gortal 这个项目的 idea 是怎么来的。golang

笔者有一群热爱开源技术的小伙伴们,TNK-Studio - technical studio 技术小做坊。docker

@mayneyao 同窗的开源项目 中文独立博客调研 须要服务器来跑爬虫,因而咱们便将手上的闲置云计算资源都贡献出来。segmentfault

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

因而就 docker 一把梭,两三下就跑起来了。ssh

结果就是,服务器卡死了 ...ide

jumpserver 的官方文档看了一眼。

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

ni-rang-wo-shuo-dian-shen-me-hao

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

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

本身来造 🔧

既然没有,那就本身来造!

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

kan-zhe-wo-de-dao

刚开始想考虑使用本身的本命语言 Python,可是后来考虑到 Go 语言相比之下部署简单,并且不论是生成的可执行程序仍是 docker 镜像都很是的小,因而果断选择了 Go

那么应该作成什么样子的呢,由于体验过了 jumpserver 的终端交互的模式,因此也想开发成相同的方式。固然为了轻量,确定是抛弃了 Web,彻底使用终端来交互。

接下来就是开源的轮子选择了,固然在实现你的 Idea 的时候切忌从头到位本身作,若是有优秀的开源方案必定要拿来用,若是不知足本身的需求在针对其进行修改。在使用其中一个开源项目 manifoldco/promptui 的时候就发现不知足需求的地方,这时候就能够 fork 一份到本身的仓库,本身改了本身用。

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

项目 To-do 📝

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

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

notion-gif

这样不只仅是本身能够梳理当前须要作的,并且在多人协做开发也很是有帮助。

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

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

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

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

github-release

来个 Docker 镜像 🐳

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

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

不须要写额外的 Github Actions 配置或其余的 CI 配置文件,你只须要将你的仓库与 Docker Hub 仓库关联起来,固然不要忘了在你的仓库放 Dockerfile 文件。

而后在 Docker Hub 仓库配置好自动构建镜像的逻辑,就大功告成了。

并且 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 镜像大小差别是很是大的。

docker-hub-2

让 Readme 看着更高大上 🤪

接下来是最重要的一步,写好 Readme,它是你项目的封面。 不少时候我在浏览别人的开源项目,我可能都不在意他这个项目作了什么,但从他的 Readme 写的很是的好,我就给他点个 star ⭐️。

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

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

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

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

badges

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

shields

复制粘贴后你会获得一个 shields 的连接,你只须要将连接改为 Markdown 的图片连接格式就能够了,参考连接

乞讨 Star ⭐️

项目作完了,固然不能就放着无论了,除非你的项目很是很是的优秀,不然他是不会本身涨星星的。

以本项目为例,笔者就去 V2EX 分享了本身的项目,也收获了很多星星 ⭐️。

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

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

稍微总结一下 👻

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

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

qi-tao

相关文章
相关标签/搜索