千里之行
始于足下

绘枫和畅

千里之行,始于足下

Fri.

火曜日

前不久,Coding.net免费的五个私有仓库空位用完了,加上已经毕业了享受不到GitHub的学生福利,于是只好自己动手搭个git平台。

最开始打起了Gitlab的主意,300M的镜像下好了,开始安装,服务器瞬间爆卡,就连ls都打不出来,前后试了好几次,每次都卡死在同一个地方。月饼厂的渣机器是1核1G的,于是我终于相信Gitlab并没有在吹牛逼:

We strongly recommend the Omnibus package installation since it is quicker to install, easier to upgrade, and it contains features to enhance reliability not found in other methods. We also strongly recommend at least 4GB of free memory to run GitLab.

关键词加上轻量级很快找到了:

  • Gitolite:轻量、开源,使用SSH公钥认证,能做到分支级的权限控制。

  • Gogs:一款极易搭建的自助 Git 服务。

不用考虑就放弃了Gitolite,安装过于繁琐,仓库都没搭起来,先就要创建ssh key,不符合我的习惯,功能也不齐全,遂随了后者。

介绍

v2-41fb504ecc805e1ee5609784e2e7def2_r.png


Gogs 的目标是打造一个最简单、最快速和最轻松的方式搭建自助 Git 服务。使用 Go 语言开发使得 Gogs 能够通过独立的二进制分发,并且支持 Go 语言支持的 所有平台,包括 Linux、Mac OS X、Windows 以及 ARM 平台。(引之官网)

准备工作

Gogs支持以下几种数据库,请先进行确认:

  • MySQL >= 5.5.3

  • PostgreSQL

  • MSSQL

  • TiDB

此处选择了MySQL,创建数据库的时候要求用utf8mb4编码:

$ create database gogs default character set utf8mb4 collate utf8mb4_unicode_ci;

Gogs要求git服务端和客户端均需版本 >= 1.7.1,同时需要SSH服务器。

在安装前,有必要再一次认识自己的服务器的处理器和位数,键入:

$ cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c

$ getconf LONG_BIT

得到以下结果:

v2-bd8a615935519799e70ed9b4859eafa6_b.jpg

有多种安装方式,懒得安装Golang,这里选择了二进制安装。结合服务器信息,选择下载amd64:

v2-980a5222da8e5b6b5d7c1ead888ddff6_b.jpg

下载文件:

$ wget https://dl.gogs.io/0.11.29/linux_amd64.zip

解压:

$ unzip linux_amd64.zip

配置

Gogs的配置要自己创建文件,在Gogs根目录下创建配置文件(文件目录以及名称是固定的):

$ vim custom/conf/app.ini

填入相关信息:

APP_NAME = Gogs
RUN_USER = root
RUN_MODE = prod

[server]
PROTOCOL         = http
DOMAIN           = gogs.example.net ;Gogs服务域名
ROOT_URL         = https://gogs.example.net/
HTTP_ADDR        = 127.0.0.1
HTTP_PORT        = 3003 ;Gogs服务端口
DISABLE_SSH      = false
SSH_PORT         = 22
START_SSH_SERVER = false
OFFLINE_MODE     = false

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

如果直接用80端口或者443,无需在配置nginx反向代理,顺便科普一下nginx反向代理的配置:

$ vim /etc/nginx/sites-available/gogs

新建gogs配置文件:

upstream gogs {
    server 127.0.0.1:3003;
    keepalive 8;
}
# the nginx server instance
server {
    listen 443 ssl http2;
    server_name gogs.example.net;

    access_log /var/log/nginx/gitlab.log;
    ssl_certificate      /var/www/gogs/ssl/gogs.coolecho.net.pem;
    ssl_certificate_key  /var/www/gogs/ssl/gogs.coolecho.net.key;
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;

    location / {
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $http_host;
      proxy_set_header X-NginX-Proxy true;
      proxy_pass http://gogs/;
      proxy_redirect off;
   }
}

进入 /etc/nginx/sites-enabled/ 添加软链接,重启nginx。

$ ln -s /etc/nginx/sites-available/gogs gogs

安装

Gogs安装很简单,在根目录下执行:

$ ./gogs web

直接访问设定的域名进入初次安装设置,安装过程中出错主要是文件或者或者文件夹没有读写权限,例如上面的Gogs配置文件:custom/conf/app.ini  可能就没有权限,手动加下权限:

$ sudo chmod 777 custom/conf/app.ini

如果安装完成想重新安装,关闭服务后,重置数据库,删掉Gogs仓库文件夹,即可再来一次。

部署模式

更新日志上只说使用 ./gogs/scripts/systemd/gogs.service 来完成部署,Google了几回都不能完成此项骚操作,这里是将 ./gogs/scripts/init/debia/gogs 复制到 /etc/init.d/ 下,复制前请先配置 gogs 文件,复制后请给 /etc/init.d/gogs 添加执行权限。

最后就可以用熟悉的方法开关服务:

$ sudo /etc/init.d/gogs start|restart|stop

体验

大概就一个词:酸爽!

截图:

Gogs

Gogs


数据库编码虽然用了utf8mb4,支持4字节编码的emoji,但是仓库的描述不支持emoji,不知道是不是个bug。


Master之令咒:

带我飞

©2016-2018 Powerd by Alchemy's Spruche 鄂ICP备14020745号