Gogs:可能是比Gitlab更好的選擇
譯者注:看到一篇介紹能簡單自建git托管服務的項目—— Gogs ——的文章,感覺這個項目很棒,翻譯給大家參考一下。
這個項目的四位主要開發者都是中國人,該項目今天蟬聯 GitHub Go 語言 Trending 第一。(づ ̄3 ̄)づ莫名的自豪感油然而生。希望能有更多優秀的國產項目出現~
Gitlab是一個很棒的Git托管服務,幾乎像GitHub一樣強大。 但是,有沒有能和Gitlab/Github媲美但操作更簡單的項目呢?我認為 Gogs 是很好的選擇。
簡介
現在,GitHub已經成為首選的代碼托管平臺。 因為它又很多很棒的功能,操作簡單,幾乎所有的開發者都喜歡它。
同時,谷歌的代碼托管項目準備關閉,你可以把項目轉移到這里。
但如果你在寫Android應用程序,或者正在創建下一個偉大的iOS游戲,或者不想讓別人看到你的代碼沒,該怎么辦?
你當然可以購買私人GitHub庫,但你肯定更想把資金投資到更緊迫的事情上。
這就是 Gitlab 和 Gogs 這樣的軟件誕生的原因。
他們提供的服務和GitHub非常相似,不同的是,你可以把項目放在你自己的服務器上,甚至是自己的工作站上。
下面一起來進行更深入的了解。
Gitlab
Gitlab是一個強大的git服務,基本功能和對手GitHub一樣。 這是一個成熟的項目和并且在不斷更新。
他們最近收購了Gitorius(另一個類似GitHub的服務),所以功能將有望得到擴展(查看有關收購的新聞剪輯)。
以前是手動安裝,很耗時間,問題也很多。最近安裝過程有所改善。
現在有 Linux DEB/RPM 的安裝包可用(稱為Omnibus),解決了所有的依賴問題,簡化了安裝過程。
升級是一個復雜的事情,尤其是從較早的版本升級到最新版,但也沒那么復雜。
然而,你可以感受到很多東西是在后臺執行的。 你可以運行 Sidekiq、Unicorn、Nginx、Ruby (包括 gems) 和 Gitlab本身。
自定義安裝不是那么簡單,有很多不確定因素,如果出了什么差錯,要自己一個個排查。
輸入二進制包
現在,我們有了Gogs。 你所要做的就是運行一個的二進制包。
它是用Go語言寫的,能兼容各個系統。
它能運行于 Windows,MAC,Linux,ARM 等。
安裝時只需要把壓縮包解壓到選定的文件夾中。 就是這樣。 升級也一樣:只要解壓壓縮包即可。
這就是Go語言二進制開發的美,你可以輕松在多個平臺下開發。
Gogs占用資源少,所以它很容易在系統資源上運行(它可以在Raspberry Pi運行)。
你可以用默認的配置運行,或做一些小調整。
默認的配置文件位于安裝文件夾的/conf/app.ini,文檔建議把自定義配置寫到/custom/conf/app.ini,這樣升級就不會覆蓋配置。
有三個可自定義的東西:
-
庫的位置
[repository] ROOT = !! 庫的地址 !!
-
數據庫位置
[database] PATH = !! 數據庫地址 !!
-
公鑰
注意:目前,你需要運行一個SSH服務器(OpenSSH也很好),這和gitlab相同。
比較
讓我們比較一下這兩個產品。 我將以GitHub作為參考。
| 特性 | Gogs | Gitlab | Github |
|---|---|---|---|
| Dashboard & File Browser | Y | Y | Y |
| Issue Tracking, Milestones & Commit keywords | Y | Y | Y |
| Organizations support | N | Y | Y |
| Wiki | N | Y | Y |
| Code Review | N | Y | Y |
| Code Snippets | N | Y | Y |
| Web Hooks | Y | Y | Y |
| Git Hooks | Y | * Enterprise | * Enterprise |
| LDAP Login | Y | Y | Y |
| LDAP Group Sync | N | * Enterprise | * Enterprise |
| Branded Login Page | N | * Enterprise | * Enterprise |
| Language | Go | Ruby | Ruby |
| Platform | Cross-Platform | Linux | * Virtual Machine |
| License | MIT | MIT | Proprietary |
| Resource Usage | Low | Medium/High | Medium/High |
代碼審查(拉取請求)可以說是缺失的最重要的功能。 這是 Gogs 在Github issues 里首要問題,Gogs的主要開發者正在盡力開發中。
但總的來說,這是一個功能豐富的、私有的Git托管服務。
運行一個 Gogs docker
我以前描述我如何我的服務器環境docker化,所以我也會把gogs作為Docker容器來運行
讓我們一步一步來做。
假設我有一個應用程序的文件在我的服務器根目錄/home/kayak/apps,給每個作為Docker容器的應用創建子目錄。
下載并解壓最新版本gogs。
$ cd /home/kayak/apps $ wget http://gogs.dn.qbox.me/gogs_v0.5.13_linux_amd64.zip $ unzip gogs_v0.5.13_linux_amd64.zip $ rm gogs_v0.5.13_linux_amd64.zip
自定義配置
$ cd gogs $ mkdir -p custom/conf $ cd custom/conf $ nano app.ini [repository] ROOT = !! this is the location where you want to keep the repositories !! [database] PATH = !! this is the location of your database (sqlite3 by default) !!
注: 你也可以不把gogs作為docker容器,直接運行。
現在讓我們創建dockerfile
$ cd /home/kayak/apps/gogs
$ nano Dockerfile
FROM ubuntu:14.04
ENV DEBIAN_FRONTEND noninteractive
RUN sed 's/main$/main universe multiverse/' -i /etc/apt/sources.list && \
apt-get update && apt-mark hold initscripts && \
apt-get install -y sudo openssh-server git && \
apt-get clean
EXPOSE 22 3000
RUN addgroup --gid 501 kayak && adduser --uid 501 --gid 501 --disabled-password --gecos 'kayak' kayak && adduser kayak sudo
WORKDIR /home/kayak
ENV HOME /home/kayak
ENTRYPOINT ["/home/kayak/boot"] dockerfile是基于最新的Ubuntu LTS版服務器(14.04)。
然后安裝 sudo, openssh 和 git,暴露端口22(用于SSH)和3000(給gogs的Web界面)。
另外,我通常會創建一個用戶(這里用 kayak),它具有與我的Max box用戶相同的UID/GID,以防止訪問權限問題。
最后,啟動shell腳本運行。
$ touch boot $ chmod +x boot $ nano boot #!/bin/bash sudo -u kayak -H touch /home/kayak/.ssh/authorized_keys chmod 700 /home/kayak/.ssh && chmod 600 /home/kayak/.ssh/authorized_keys # start openssh server mkdir /var/run/sshd /usr/sbin/sshd -D & exec sudo -u kayak /home/kayak/gogs web
這樣就運行了ssh守護進程和gogs。現在是以kayak用戶運行,這樣比用默認的root用戶好一些。
建立鏡像
$ cd /home/kayak/apps/gogs $ docker build --rm -t apertoire/gogs .
鏡像建立好就可以運行了
$ docker run -d --name gogs \ -v /etc/localtime:/etc/localtime:ro \ -v /home/kayak/apps/gogs:/home/kayak \ -p 62723:22 \ -p 3000:3000 \ apertoire/gogs
可以在命令行查看運行情況。
現在可以打開網頁界面,它會顯示一個安裝頁面(首次運行)。
安裝完成后,就搭建好一個功能豐富的Gogs了。
總結
Gogs 是一個輕量級的、易于設置、跨平臺的Git托管服務,不遜色于 Gitlab 和 GitHub。
雖然不比這二者成熟,但它有很大的潛力。
它是開源的,所以你可以幫助改善它。
我用Gogs取代Gitlab幾個月了,感覺不錯。
我創建42個庫,感覺它的性能非常好。
我絕對推薦Gogs作為你的Git自托管服務。
附該項目在Github上的4位開發者:
|
|
|
|
|
|---|---|---|---|
| 無聞Unknwon | Liu Peng | Lunny Xiao | 傅小黑 |
英文原文 Gogs, an alternative to Gitlab
整理編譯 SegmentFault