Github 上的我的項目開源心得

🚪「gortal」一個使用 Go 語言開發的,超級輕量的堡壘機(跳板機)服務html

因爲最近在 Github 發了一個我的開源項目 - 「gortal」一個使用 Go 語言開發的,超級輕量的堡壘機(跳板機)服務,因而想寫一篇博文來記錄一下本身的開源心得。git

gortal

雖然不是第一次寫開源項目了,可是不能放過此次寫博文的熱情,下一次就不知道啥時候寫了。程序員

並且這篇文章的主要目的也是想分享一些開源的心得給讀者們。github

產生 Idea 💡

首先不論是我的項目仍是開源項目都得有一個 Idea,我先來講說 gortal 這個項目的 idea 是怎麼來的。golang

筆者有一羣熱愛開源技術的小夥伴們,TNK-Studio - technical studio 技術小做坊。docker

@mayneyao 同窗的開源項目 中文獨立博客調研 須要服務器來跑爬蟲,因而咱們便將手上的閒置雲計算資源都貢獻出來。segmentfault

我想了想沒準之後還會有這樣的需求,因而想到了公司使用的 jumpserver 堡壘機,想在組織的其中一個服務器搭起來。bash

因而就 docker 一把梭,兩三下就跑起來了。服務器

結果就是,服務器卡死了 …markdown

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

github.com/TNK-Studio/…

能夠經過圖片看到使用分兩步構建和一步構建,最終打包的 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 ⭐️ 吧,github.com/TNK-Studio/…

qi-tao

相關文章
相關標籤/搜索