Gogs:多是比Gitlab更好的選擇

譯者注:看到一篇介紹能簡單自建git託管服務的項目—— Gogs ——的文章,感受這個項目很棒,翻譯給你們參考一下。
這個項目的四位主要開發者都是中國人,該項目今天蟬聯 GitHub Go 語言 Trending 第一。(づ ̄3 ̄)づ莫名的自豪感油然而生。但願能有更多優秀的國產項目出現~linux

Gitlab是一個很棒的Git託管服務,幾乎像GitHub同樣強大。 可是,有沒有能和Gitlab/Github媲美但操做更簡單的項目呢?我認爲 Gogs 是很好的選擇。git

簡介

如今,GitHub已經成爲首選的代碼託管平臺。 由於它又不少很棒的功能,操做簡單,幾乎全部的開發者都喜歡它。github

同時,谷歌的代碼託管項目準備關閉,你能夠把項目轉移到這裏。golang

但若是你在寫Android應用程序,或者正在建立下一個偉大的iOS遊戲,或者不想讓別人看到你的代碼沒,該怎麼辦?web

你固然能夠購買私人GitHub庫,但你確定更想把資金投資到更緊迫的事情上。sql

這就是 Gitlab 和 Gogs 這樣的軟件誕生的緣由。docker

他們提供的服務和GitHub很是類似,不一樣的是,你能夠把項目放在你本身的服務器上,甚至是本身的工做站上。shell

下面一塊兒來進行更深刻的瞭解。數據庫

Gitlab

Gitlab是一個強大的git服務,基本功能和對手GitHub同樣。 這是一個成熟的項目和而且在不斷更新。ubuntu

clipboard.png

他們最近收購了Gitorius(另外一個相似GitHub的服務),因此功能將有望獲得擴展(查看有關收購的新聞剪輯)。

之前是手動安裝,很耗時間,問題也不少。最近安裝過程有所改善。

如今有 Linux DEB/RPM 的安裝包可用(稱爲Omnibus),解決了全部的依賴問題,簡化了安裝過程。

升級是一個複雜的事情,尤爲是從較早的版本升級到最新版,但也沒那麼複雜。

然而,你能夠感覺到不少東西是在後臺執行的。 你能夠運行 Sidekiq、Unicorn、Nginx、Ruby (包括 gems) 和 Gitlab自己。

自定義安裝不是那麼簡單,有不少不肯定因素,若是出了什麼差錯,要本身一個個排查。

輸入二進制包

如今,咱們有了Gogs。 你所要作的就是運行一個的二進制包。

它是用Go語言寫的,能兼容各個系統。

它能運行於 Windows,MAC,Linux,ARM 等。

clipboard.png

安裝時只須要把壓縮包解壓到選定的文件夾中。 就是這樣。 升級也同樣:只要解壓壓縮包便可。

這就是Go語言二進制開發的美,你能夠輕鬆在多個平臺下開發。

Gogs佔用資源少,因此它很容易在系統資源上運行(它能夠在Raspberry Pi運行)。

你能夠用默認的配置運行,或作一些小調整。

默認的配置文件位於安裝文件夾的/conf/app.ini,文檔建議把自定義配置寫到/custom/conf/app.ini,這樣升級就不會覆蓋配置。

有三個可自定義的東西:

  • 庫的位置

    [repository]
    ROOT = !! 庫的地址 !!
  • 數據庫位置

    [database]
    PATH = !! 數據庫地址 !!
  • 公鑰

clipboard.png

注意:目前,你須要運行一個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

能夠在命令行查看運行狀況。

clipboard.png

如今能夠打開網頁界面,它會顯示一個安裝頁面(首次運行)。

clipboard.png

安裝完成後,就搭建好一個功能豐富的Gogs了。

clipboard.png

總結

Gogs 是一個輕量級的、易於設置、跨平臺的Git託管服務,不遜色於 Gitlab 和 GitHub。

雖然不比這兩者成熟,但它有很大的潛力。

它是開源的,因此你能夠幫助改善它。

我用Gogs取代Gitlab幾個月了,感受不錯。

我建立42個庫,感受它的性能很是好。

我絕對推薦Gogs做爲你的Git自託管服務。

附該項目在Github上的4位開發者:

clipboard.png clipboard.png clipboard.png clipboard.png
無聞Unknwon Liu Peng Lunny Xiao 傅小黑

英文原文 Gogs, an alternative to Gitlab
整理編譯 SegmentFault

相關文章
相關標籤/搜索