Github 上的個(gè)人項(xiàng)目開源心得

??「gortal」一個(gè)使用 Go 語言開發(fā)的骡湖,超級(jí)輕量的堡壘機(jī)(跳板機(jī))服務(wù)
原文鏈接 https://elfgzp.cn/2019/12/09/gortal-site-project

由于最近在 Github 發(fā)了一個(gè)個(gè)人開源項(xiàng)目 - 「gortal」一個(gè)使用 Go 語言開發(fā)的,超級(jí)輕量的堡壘機(jī)(跳板機(jī))服務(wù)耳峦,于是想寫一篇博文來記錄一下自己的開源心得。

gortal

雖然不是第一次寫開源項(xiàng)目了焕毫,但是不能放過這次寫博文的熱情蹲坷,下一次就不知道啥時(shí)候?qū)懥恕?/p>

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

產(chǎn)生 Idea ??

首先不管是個(gè)人項(xiàng)目還是開源項(xiàng)目都得有一個(gè) Idea邑飒,我先來說說 gortal 這個(gè)項(xiàng)目的 idea 是怎么來的循签。

筆者有一群熱愛開源技術(shù)的小伙伴們,TNK-Studio - technical studio 技術(shù)小作坊疙咸。

@mayneyao 同學(xué)的開源項(xiàng)目 中文獨(dú)立博客調(diào)研 需要服務(wù)器來跑爬蟲县匠,于是我們便將手上的閑置云計(jì)算資源都貢獻(xiàn)出來。

我想了想沒準(zhǔn)以后還會(huì)有這樣的需求罕扎,于是想到了公司使用的 jumpserver 堡壘機(jī)聚唐,想在組織的其中一個(gè)服務(wù)器搭起來丐重。

于是就 docker 一把梭腔召,兩三下就跑起來了。

結(jié)果就是扮惦,服務(wù)器卡死了 ...

jumpserver 的官方文檔看了一眼臀蛛。

Jumpserver 環(huán)境要求:
硬件配置: 2個(gè)CPU核心, 4G 內(nèi)存, 50G 硬盤(最低)
...

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

我們閑置的云計(jì)算資源基本都是 1 核 2 G 的配置,這配置要求玩不起呀崖蜜。

然后搜了一下有沒有其他同類型的浊仆,輕量一點(diǎn)的項(xiàng)目能拿來用,最后也是沒有找到合適的豫领。

自己來造 ??

既然沒有抡柿,那就自己來造!

Idea 有了等恐,就差程序員了洲劣,現(xiàn)在程序員也不缺了,就差用啥語言了课蔬。 這時(shí)候肯定是選世界上最好的語言 P ..

kan-zhe-wo-de-dao

剛開始想考慮使用自己的本命語言 Python囱稽,但是后來考慮到 Go 語言相比之下部署簡單,而且不管是生成的可執(zhí)行程序還是 docker 鏡像都非常的小二跋,于是果斷選擇了 Go战惊。

那么應(yīng)該做成什么樣子的呢,因?yàn)轶w驗(yàn)過了 jumpserver 的終端交互的模式扎即,所以也想開發(fā)成相同的方式吞获。當(dāng)然為了輕量况凉,肯定是拋棄了 Web,完全使用終端來交互各拷。

接下來就是開源的輪子選擇了茎刚,當(dāng)然在實(shí)現(xiàn)你的 Idea 的時(shí)候切忌從頭到位自己做,如果有優(yōu)秀的開源方案一定要拿來用撤逢,如果不滿足自己的需求在針對其進(jìn)行修改膛锭。在使用其中一個(gè)開源項(xiàng)目 manifoldco/promptui 的時(shí)候就發(fā)現(xiàn)不滿足需求的地方,這時(shí)候就可以 fork 一份到自己的倉庫蚊荣,自己改了自己用初狰。

最終根據(jù)技術(shù)方案選擇的輪子如下:

項(xiàng)目 To-do ??

啥都選好了互例,準(zhǔn)備開始動(dòng)手了奢入,卻發(fā)現(xiàn)我該從哪里開始好呢?

這時(shí)候就需要列一個(gè) To-do 了媳叨,筆者使用的是 notion 的筆記工具腥光。使用看板將項(xiàng)目各個(gè)待實(shí)現(xiàn)的功能列出來,實(shí)現(xiàn)完一個(gè)將其拖入完成項(xiàng)中糊秆。

notion-gif

這樣不僅僅是自己可以梳理當(dāng)前需要做的武福,而且在多人協(xié)作開發(fā)也非常有幫助。

Notion 牛批6环W狡!

準(zhǔn)備好 To-do 就可以正式開工了汞舱,當(dāng)功能完成得差不多的時(shí)候伍纫,才是正式開始的時(shí)候。

加個(gè) CI ??

基礎(chǔ)功能做好了昂芜,準(zhǔn)備發(fā)布 Release 了莹规,Go 開發(fā)的程序只需要打包成不同平臺(tái)的二進(jìn)制可執(zhí)行文件就可以了。

但是那么多平臺(tái)泌神,一個(gè)一個(gè)的手動(dòng) build 然后上傳良漱,這哪是程序員干的事,這是 CI - 持續(xù)集成(Continuous integration腻扇,簡稱CI)要干的事情债热。

在開發(fā)這個(gè)項(xiàng)目之前,有使用過 Travis CI幼苛,它對 Github 開源項(xiàng)目是免費(fèi)的窒篱。 但是前一段時(shí)間 Github 推出了 Github Actions 于是抱著嘗嘗鮮的態(tài)度就選擇了它。

它使用起來也非常的簡單,點(diǎn)擊倉庫上方的 Actions 菜單就可以進(jìn)入倉庫的 Actions 配置頁面墙杯。

筆者在使用過程中覺得 Github ActionsTravis CI 相比配并,其最大的優(yōu)勢是它的 Marketplace,里面有非常多開源的別人寫好的 Actions高镐,可以直接拿來簡單修改后使用溉旋,而且這些 Actions 當(dāng)然也是使用 Github 進(jìn)行版本管理的。

github-actions

如何使用這里就不做詳細(xì)介紹了嫉髓,感興趣的可以查看 Github Actions 官方文檔观腊。

這里我給倉庫添加了一個(gè)「創(chuàng)建 Release」就自動(dòng)打包所有鏡像的 actions,它的倉庫地址我也放在這里 ngs/go-release.action算行。

最后它的效果就是自動(dòng)幫你打包所有平臺(tái)的二進(jìn)制可執(zhí)行程序梧油,并壓縮上傳到 Github

github-release

來個(gè) Docker 鏡像 ??

當(dāng)然一個(gè)服務(wù)怎么少的了 Docker 鏡像州邢,還不了解 Docker 的同學(xué)可以看看阮一峰的 Docker 入門教程儡陨,筆者覺得 Docker 簡直就是 21 世紀(jì)程序員最偉大的發(fā)明之一。

而且官方的 Docker HubGithub 結(jié)合使用簡直不能再香量淌。

不需要寫額外的 Github Actions 配置或其他的 CI 配置文件骗村,你只需要將你的倉庫與 Docker Hub 倉庫關(guān)聯(lián)起來,當(dāng)然不要忘了在你的倉庫放 Dockerfile 文件呀枢。

然后在 Docker Hub 倉庫配置好自動(dòng)構(gòu)建鏡像的邏輯胚股,就大功告成了。

而且 Docker Hub 的配置指引也做的非常好硫狞,非常容易理解信轿。

docker-hub

當(dāng)然這里非常非常重要的就是如果你是用的是 Go 語言進(jìn)行開發(fā)的項(xiàng)目,Docker 鏡像構(gòu)建一定要分成兩步残吩。一個(gè)是編譯鏡像,一個(gè)是正式鏡像倘核,這樣最終打包的鏡像只會(huì)包含一個(gè)二進(jìn)制文件泣侮,而不是將源碼一起打包。

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
# ... 省略代碼

本項(xiàng)目完整的 Dockerfile 鏈接如下紧唱,可以通過鏈接查看完整的 Dockerfile活尊。

https://github.com/TNK-Studio/gortal/blob/master/Dockerfile

可以通過圖片看到使用分兩步構(gòu)建和一步構(gòu)建,最終打包的 Docker 鏡像大小差異是非常大的漏益。

docker-hub-2

讓 Readme 看著更高大上 ??

接下來是最重要的一步蛹锰,寫好 Readme,它是你項(xiàng)目的封面绰疤。 很多時(shí)候我在瀏覽別人的開源項(xiàng)目铜犬,我可能都不在乎他這個(gè)項(xiàng)目做了什么,但從他的 Readme 寫的非常的好,我就給他點(diǎn)個(gè) star ??癣猾。

而且最好是能弄雙語的 Readme敛劝,這樣能讓老外也能看懂,再不行就寫一份中文的纷宇,剩下交給谷歌翻譯夸盟。

當(dāng)然 Readme 最好不能都是字,要有演示的 GIF像捶,這樣進(jìn)來的人第一眼就知道你這個(gè)項(xiàng)目是干啥的上陕。

這里筆者推薦 LICEcap 這個(gè)工具,本片文章所有的動(dòng)圖都是使用這個(gè)工具錄制的拓春。

Readme 寫好之后唆垃,給它加上 Badges - 徽章 就是畫龍點(diǎn)睛之筆了。

badges

Badges 的添加也是非常簡單的痘儡,我們只需要使用這個(gè)開源項(xiàng)目 shields辕万,并選擇我們想要的徽章、填寫好 URL沉删、復(fù)制粘貼到 Readme渐尿,搞定。

shields

復(fù)制粘貼后你會(huì)得到一個(gè) shields 的鏈接矾瑰,你只需要將鏈接改成 Markdown 的圖片鏈接格式就可以了砖茸,參考鏈接

乞討 Star ??

項(xiàng)目做完了殴穴,當(dāng)然不能就放著不管了凉夯,除非你的項(xiàng)目非常非常的優(yōu)秀,否則他是不會(huì)自己漲星星的采幌。

以本項(xiàng)目為例劲够,筆者就去 V2EX 分享了自己的項(xiàng)目,也收獲了不少星星 ??休傍。

你需要去各種社區(qū)分享你的開源項(xiàng)目征绎,例如:V2EX稀土掘金磨取、segmentfault 等等人柿。

讓你的項(xiàng)目給更多的人看到,同理寫博客也是如此忙厌,不分享出去就沒有正反饋凫岖,就少了很多動(dòng)力。

稍微總結(jié)一下 ??

筆者在這片文章沒有過多的去介紹項(xiàng)目的開發(fā)過程逢净,因?yàn)橛X得開發(fā)以外的過程更值得分享哥放。

開源項(xiàng)目不只是實(shí)現(xiàn)了 Idea 就完事了歼指,你可能還需要去讓它更加的方便維護(hù),自動(dòng)的做一些重復(fù)的事情婶芭。還要去包裝它分享它东臀,這樣才會(huì)有更多的人使用。當(dāng)有更多人時(shí)候的時(shí)候犀农,這個(gè)項(xiàng)目就需要花時(shí)間去迭代和維護(hù)了惰赋。
最后的最后,覺得文章還不錯(cuò)的呵哨,覺得這個(gè)開源項(xiàng)目還可以的赁濒,賞個(gè) star ?? 吧,https://github.com/TNK-Studio/gortal孟害。

qi-tao
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末拒炎,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子挨务,更是在濱河造成了極大的恐慌击你,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谎柄,死亡現(xiàn)場離奇詭異丁侄,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)朝巫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門鸿摇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人劈猿,你說我怎么就攤上這事拙吉。” “怎么了揪荣?”我有些...
    開封第一講書人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵筷黔,是天一觀的道長。 經(jīng)常有香客問我变逃,道長必逆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任揽乱,我火速辦了婚禮,結(jié)果婚禮上粟矿,老公的妹妹穿的比我還像新娘凰棉。我一直安慰自己,他們只是感情好陌粹,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開白布撒犀。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪或舞。 梳的紋絲不亂的頭發(fā)上荆姆,一...
    開封第一講書人閱讀 51,462評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音映凳,去河邊找鬼胆筒。 笑死,一個(gè)胖子當(dāng)著我的面吹牛诈豌,可吹牛的內(nèi)容都是我干的仆救。 我是一名探鬼主播,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼矫渔,長吁一口氣:“原來是場噩夢啊……” “哼彤蔽!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起庙洼,我...
    開封第一講書人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬榮一對情侶失蹤顿痪,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后油够,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蚁袭,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年叠聋,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了撕阎。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡碌补,死狀恐怖虏束,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情厦章,我是刑警寧澤镇匀,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站袜啃,受9級(jí)特大地震影響汗侵,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜群发,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一晰韵、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧熟妓,春花似錦雪猪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽译仗。三九已至,卻和暖如春官觅,著一層夾襖步出監(jiān)牢的瞬間纵菌,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來泰國打工休涤, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留咱圆,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓滑绒,卻偏偏與公主長得像闷堡,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子疑故,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354