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

相关文章
相关标签/搜索