使用Gogs轻松搭建可能比GitLab更好用的Git服务平台

前言

GitHub 已经成为首选的代码托管平台,因为它又很多很棒的功能,操作简单,几乎所有的开发者都喜欢它。但是搭建 GitLab 过程并没有想象中的简单,利用 Bitnami 当然也是一种偷懒的好选择。Gogs (Go Git Service) 是一款极易搭建的自助 Git 服务,Gogs 的目标是打造一个最简单、最快速和最轻松的方式搭建自助 Git 服务。使用 Go 语言开发使得 Gogs 能够通过独立的二进制分发,并且支持 Go 语言支持的 所有平台,包括 Linux、Mac OS X、Windows 以及 ARM 平台。

Gogs 可能是比 GitLab 更好的选择

更新记录

2016 年 03 月 31 日 - 初稿

阅读原文 - https://wsgzao.github.io/post/gogs/

扩展阅读

Gogs - https://gogs.io/
GitLab - https://about.gitlab.com/
Bitnami GitLab Stack - https://bitnami.com/stack/gitlab

Bitnami GitLab Stack

Bitnami GitLab Stack ships with the following software versions

  • GitLab 8.5.7
  • Apache 2.4.18
  • ImageMagick 6.7.5
  • PostgreSQL 9.4.6
  • Git 2.7.4
  • Ruby 2.1.8
  • Rails 4.2.5.1
  • RubyGems 1.8.12

Btinami GitLab Stack 安装真心简单,爽

chmod 755 bitnami-gitlab-8.5.7-0-linux.run

https://bitnami.com/stack/gitlab/README.txt

Gogs 功能特性

  • 支持活动时间线
  • 支持 SSH 以及 HTTP/HTTPS 协议
  • 支持 SMTP、LDAP 和反向代理的用户认证
  • 支持反向代理子路径
  • 支持用户、组织和仓库管理系统
  • 支持仓库和组织级别 Web 钩子(包括 Slack 集成)
  • 支持仓库 Git 钩子和部署密钥
  • 支持仓库工单(Issue)、合并请求(Pull Request)和 Wiki
  • 支持添加和删除仓库协作者
  • 支持 Gravatar 以及自定义源
  • 支持邮件服务
  • 支持后台管理面板
  • 支持 MySQL、PostgreSQL、SQLite3 和 TiDB(实验性支持) 数据库
  • 支持多语言本地化(15 种语言)

以 GitHub 作为参考比较对象

特性GogsGitlabGithub
Dashboard & File BrowserYYY
Issue Tracking, Milestones & Commit keywordsYYY
Organizations supportNYY
WikiNYY
Code ReviewNYY
Code SnippetsNYY
Web HooksYYY
Git HooksY* Enterprise* Enterprise
LDAP LoginYYY
LDAP Group SyncN* Enterprise* Enterprise
Branded Login PageN* Enterprise* Enterprise
LanguageGoRubyRuby
PlatformCross-PlatformLinux* Virtual Machine
LicenseMITMITProprietary
Resource UsageLowMedium/HighMedium/High

Gogs 环境要求

我以 rhel6.3 为例,已经属于生命周期边缘了

 
# 安装 git
yum install -y git 
git --version
git version 1.7.1

# 安装 mysql-server
yum install -y mysql-server
mysql --version
mysql  Ver 14.14 Distrib 5.1.73, for redhat-linux-gnu (x86_64) using readline 5.1

# 启动数据库 
service mysqld start
chkconfig mysqld on

# 创建 gogs 数据库 
cd /home/git/gogs/scripts
#mysql -u root -p < mysql.sql
mysql -u root -p
# (输入密码,无密码直接跳过)
set global storage_engine = 'InnoDB';
create database gogs character set utf8 collate utf8_bin;
create user 'gogs'@'localhost' identified by 'gogs';
grant all privileges on gogs.* to 'gogs'@'localhost';
flush privileges;
exit;

部署 Gogs

Gogs 是一款极易搭建的自助 Git 服务

https://gogs.io/docs

 
# 创建 git 用户 
sudo adduser git
su - git

# 解压 gogs
cd /home/git
unzip gogs_v0.9.13_linux_amd64.zip
ls /home/git/gogs/
gogs  LICENSE  public  README.md  README_ZH.md  scripts  templates

# 启动 gogs
cd /home/git/gogs
./gogs web

2016/03/31 16:23:53 [W] Custom config '/home/git/gogs/custom/conf/app.ini' not found, ignore this if you're running first time
2016/03/31 16:23:53 [T] Custom path: /home/git/gogs/custom
2016/03/31 16:23:53 [T] Log path: /home/git/gogs/log
2016/03/31 16:23:53 [I] Gogs: Go Git Service 0.9.13.0318
2016/03/31 16:23:53 [I] Log Mode: Console(Trace)
2016/03/31 16:23:53 [I] Cache Service Enabled
2016/03/31 16:23:53 [I] Session Service Enabled
2016/03/31 16:23:53 [I] SQLite3 Supported
2016/03/31 16:23:53 [I] Run Mode: Development
2016/03/31 16:23:54 [I] Listen: http://0.0.0.0:3000

# 后台运行 
nohup ./gogs web &
tail -f nohup.out

app.ini 配置文件

注意 DOMAIN 和 ROOT_URL 这两个参数

https://gogs.io/docs/advanced/configuration_cheat_sheet

 
# 首次安装可以打开浏览器完成剩余配置 
http://ip:3000/install

# 通过修改 app.ini 也可以 
vi /home/git/gogs/custom/conf/app.ini

APP_NAME = Gogs: Go Git Service
RUN_USER = git
RUN_MODE = prod

[database]
DB_TYPE  = mysql
HOST     = 127.0.0.1:3306
NAME     = gogs
USER     = gogs
PASSWD   = gogs
SSL_MODE = disable
PATH     = data/gogs.db

[repository]
ROOT = /home/git/gogs-repositories

[server]
DOMAIN       = 172.28.70.134 
HTTP_PORT    = 3000
ROOT_URL     = http://172.28.70.134:3000/
DISABLE_SSH  = false
SSH_PORT     = 22
OFFLINE_MODE = false

[mailer]
ENABLED = false

[service]
REGISTER_EMAIL_CONFIRM = false
ENABLE_NOTIFY_MAIL     = false
DISABLE_REGISTRATION   = false
ENABLE_CAPTCHA         = true
REQUIRE_SIGNIN_VIEW    = false

[picture]
DISABLE_GRAVATAR = false

[session]
PROVIDER = file

[log]
MODE      = file
LEVEL     = Info
ROOT_PATH = /home/git/gogs/log

[security]
INSTALL_LOCK = true
SECRET_KEY   = i4B7R55aRaFdw8j

代码审查(拉取请求)可以说是缺失的最重要的功能。 这是 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.pngclipboard.pngclipboard.pngclipboard.png
无闻UnknwonLiu PengLunny Xiao傅小黑

英文原文 Gogs, an alternative to Gitlab
整理编译 SegmentFault

https://segmentfault.com/a/1190000002605142

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值