背景
玩了一下 Git ,想到一个问题:企业内部怎么用 Git 呢?仓库哪里来呢?
理一理 Git 及其相关产品的区别:
- Git 分布式版本管理工具。
- GitHub 和 Gitee ,基于 Git 的互联网代码托管平台,一个是国外的,一个是国内的。
- GitLab,基于 Git 的互联网代码托管平台,可以在企业内部局域网部署,缺点是重量级。
- gogs,基于 Git 、易于搭建的 Git 服务,轻量级。
- Gitea,类似 gogs ,轻量级 Git 平台。
所以小项目、小公司,又不想曝露在互联网上的话,可以选择 gogs 来部署。部署 gogs 玩了一下,确实很容易。
安装
CentOS 系统下,准备操作:
- yum install git。
- 官网下载地址,下载最新版本 gogs_0.13.0_linux_386.tar.gz ,上传目标服务器。
- 解压:
tar -xvf gogs_0.13.0_linux_386.tar.gz
。 - 进入解压目录 gogs ,后台进程方式执行 :
nohup ./gogs web &
。
第四步执行过程中,如果 go 依赖包不存在时,会碰到两个错误:
- 错误一:
/lib/ld-linux.so.2: bad ELF interpreter: 没有那个文件或目录
。解决办法:执行安装命令yum -y install glibc.i686
。 - 错误二:
libpam.so.0: cannot open shared object file: No such file or directory
。解决办法:执行安装命令yum install libpam.so.0
。
解决完这两个问题后,再次执行启动命令:./gogs web
。
初始化
gogs 启动成功后,默认端口是 3000,访问安装页面: 简单配置为 SQLite3 数据库。
域名 localhost 改为目标主机 IP,系统运行用户设置为启动用户,SSH 勾选内置修改默认端口。 不创建用户,直接提交,自动跳转到登录首页: 创建一个用户,第一个帐号被视为管理员用户。
使用
创建用户并登录,进入系统首页: 操作界面比较简单,基本操作有:
- 创建组织
- 创建仓库
- 邀请成员
新建仓库的时候,总是会报错,多试几次就能创建成了。
访问仓库
创建仓库后,使用 SourceTree 克隆该仓库,就可以像其他开源应用一样访问 gogs 上托管的应用了。
推送时会弹出帐号认证配置: 输入在 gogs 上注册的帐号和密码后,就完成了文件推送了。
https 部署
如果需要将 gogs 改成 https 的部署方式,需要执行的操作: 第一步,修改 conf/app.ini 配置的 [server]
部分添加 PROTOCOL=https
: 第二步,生成 https 证书文件目录及文件: 这是官网搜到的默认的 https 的默认配置信息,需要生成证书文件放在 custom/https
目录下。
没有证书和公钥文件,需要自己生成一个,且不能带密码,参考《go配置tls证书_screego 安装配置教程》 这篇文章的方法生成的证书,能够被 gogs 解析。
手动生成证书的步骤:
- 生成密钥文件:openssl genrsa -des3 -out server.key 2048
- 去除设置的密码:openssl rsa -in server.key -out server.key
- 证书的申请:openssl req -new -key server.key -out server.csr
- 创建 CA 证书:openssl req -new -x509 -key server.key -out ca.crt -days 3650
- 创建服务器证书:openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey server.key -CAcreateserial -out server.crt
- 重命名为 pem 后缀:cp server.crt cert.pem
- 重命名为 pem 后缀:cp server.key key.pem
关键操作是第 2 步,去除证书文件的密码,否则启动的时候报证书解析错误:[FATAL] [gogs.io/gogs/internal/cmd/web.go:776 runWeb()] Failed to start server: tls: failed to parse private key。
注意,私服设置为 https 协议后,Git GUI 客户端访问的时候会报自签名证书错误:
解决办法是添加配置:git config --global http.sslVerify false
。
启示录
还有最后一个问题没解决,就是使用 SourceTree 访问 gogs 私服仓库的时候,每次都需要输入 gogs 的密码,想在 SourceTree 中创建全局帐号,尝试了每一种托管主机都不可行: 虽然麻烦一点,但是 Git 的操作的路径是打通了的。
总结:Git 基本用法、Git GUI 客户端用法 、gogs 私服搭建,一套搞下来,工具都弄明白了,可以出师了!