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:可能是比Gitlab更好的选择的更多相关文章

  1. 开发者如何更好的选择和适应NoSQL的5个阶段

    基本含义 NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”,是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨.NoSQL的拥护者们提倡运用非关 ...

  2. ASP.NET Core + Docker + Jenkins + gogs + CentOS 从零开始搭建持续集成

    为什么不用gitlab? 没有采用gitlab,因为gitlab比较吃配置,至少得2核4G的配置.采用go语言开发的gogs来代替,搭建方便(不到10分钟就能安装完成),资源消耗低,功能也比较强大,也 ...

  3. ASP.NET Core & Docker & Jenkins 零基础持续集成实战

    原文:ASP.NET Core & Docker & Jenkins 零基础持续集成实战 一.本系列教程说明 源代码管理工具:Gogs 持续集成工具:Jenkins 容器:Docker ...

  4. gogs迁移至gitlab

    一.先来聊一聊迁移的思路,不管是gogs迁移至gitlab,还是gitlab迁移至gogs,亦或gitlab迁移至gitlab,手动迁移的步骤都是如下图所示(在gitlab上新建一个空项目就会有这样的 ...

  5. 【git3】git+Gogs+webStorm的使用

    Gogs:相比gitlab更轻量级,基于golang的搭建自助 Git 服务.使用Gogs轻松搭建可能比GitLab更好用的Git服务平台. 参考资料:http://blog.csdn.net/u01 ...

  6. gogs搭建git服务教程

    使用gogs搭建自己的git服务!!! 一.GIT服务器搭建方式 上一节课我们讲过GIT是一个分布式版本管理系统,既然是分布那么必定会涉及远程通信,那么GIT是采用什么协议进行远程通信的呢? git支 ...

  7. GitLab 的 Developer 角色没有权限提交问题

    "C:\Program Files\Git\bin\git.exe" push --recurse-submodules=check --progress "origin ...

  8. Gitlab 与 Git Windows 客户端一起使用的入门流程

    我的技术博客经常被流氓网站恶意爬取转载.请移步原文:http://www.cnblogs.com/hamhog/p/3824934.html,享受整齐的排版.有效的链接.正确的代码缩进.更好的阅读体验 ...

  9. GitLab一键式安装bitnami

    https://bitnami.com/stack/gitlab/installer https://bitnami.com/redirect/to/96764/bitnami-gitlab-8.5. ...

随机推荐

  1. tcpreplay安装使用

    #Author: ypguo#Data: 2010.4.23#Version:  1.2 增加了修改VLAN tag内容.                 1.1 修改了cygwin下安装的内容    ...

  2. WCF - 实例与会话

    实例上下文 实例上下文是对服务实例的封装 是WCF管理服务实例生命周期的依托  一个WCF服务通过ServiceHost进行寄宿 开启服务后当接收到请求 则会判断当前是否存在实例上下文 如果存在 则通 ...

  3. PureMVC(JS版)源码解析(五):SimpleCommand类

          之前我们对PureMVC中涉及到观察者模式的三个基本类(Notification/Observer/Notifier)进行了分析,接下来将对PureMVC源码中的其他类进行分析,首先我们讲 ...

  4. 复杂对象创建终结者(Builder Pattern)

    捣鼓了很长时间,终于对建造者模式有初步理解,现在写篇记录下.缘起就是创建的对象比较复杂,需按功能分散.类似造一辆汽车,作为汽车厂家,你需要造车身,造轮胎等,精髓在于领导者(Director),领导者指 ...

  5. navicat 数据库管理工具快捷键

    最近在使用navicat 管理数据库中,因为经常要写一些sql的,但是每次都要鼠标点击运行,感觉很不爽,于是找到navicat(以下) 快捷键(最常用的): ctrl + q 打开查询窗口 ctrl ...

  6. Library中的title与Name

    在Library中新增Title字段,其中文件夹的title字段与Name相同,并且默认生成:但是文件的Title字段为空.

  7. [FTP] FTPHelper-FTP帮助类,常用操作方法 (转载)

    点击下载 FTPHelper.zip 这个类是FTP服务器的一些操作1.连接FTP服务器 2.上传3.下载4.删除文件5.获取当前目录下明细(包含文件和文件夹)  6.获取FTP文件列表(包括文件夹) ...

  8. js基础知识之_流程控制语句

    javascript 流程控制 流程控制:就是程序代码执行顺序 流程控制:通过规定的语句让程序代码有条件的按照一定的方式执行 顺序结构 按照书写顺序来执行,是程序中最基本的流程结构 选择结构(分支结构 ...

  9. Spring Boot笔记(一)

    Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.通过 ...

  10. jquery mobile基本结构搭建

    官网:http://jquerymobile.com/ 基本结构: