Git

Git Learning Notes (06)

Build an enterprise private Git service based on Gogs

Posted by Chen Xingxu on September 3, 2020

06.Git学习笔记–基于Gogs搭建企业私有Git服务

介绍

Gogs 是一款开源的轻量级 Git Web 服务,其特点是简单易用、文档齐全、国际化做的相当不错。其主要功能如下:

  1. 提供 HTTP 与 SSH 两种协议访问源码服务;
  2. 提供可视化 Web 界面,可查看修改源码代码;
  3. 提供较完善的权限管理功能,其中包括组织、团队、个人等仓库权限;
  4. 提供简单的项目 Wiki 功能;
  5. 提供工单管理与里程碑管理。

安装

官网:https://gogs.io

下载:https://gogs.io/docs/installation

文档:https://gogs.io/docs/installation/install_from_binary

cd ~/svr
#将gogs_0.11.34.zip上传到该目录解压缩
unzip gogs_0.11.34.zip
cd gogs

#前台运行
./gogs web
#后台运行
$nohup ./gogs web &
#查看运行进程
ps -ef | grep gogs
#结束进程
kill -9 进程PID

默认端口:3000

初次访问

http://192.168.25.159:3000

http://git.yangxu.com:3000

会进到初始化页,进行引导配置。

可选择 MySQL 或 SQLite 等数据库。

注:需要用 MySQL 5.7 以上版本。

选用 MySQL 需要先自行创建 gogs 数据库:

填写好其他必要信息:

创建管理员账号:

基础配置

邮件配置说明

邮件配置是用于注册时邮件确认,和找回密码时候的验证邮件发送。

其配置分为两步:

  1. 创建一个开通了 SMTP 服务的邮箱帐号,一般用公司管理员邮箱;
  2. 在 {gogs_home}/custom/conf/app.ini 文件中配置。

139 邮箱开通 SMTP 服务

其他邮箱的开通方式类似,博主以 139 邮箱为例演示。

右上角的设置图标 –> 邮箱协议设置 –> 服务开关:

邮件设置

设置文件:

{gogs_home}/custom/conf/app.ini

cd /root/svr/gogs/custom/conf
#备份配置文件
tar -zcvf  app.ini.tar.gz  app.ini
#编辑配置文件
vim app.ini

配置以下内容:

[mailer]
ENABLED = true
HOST = smtp.139.com:465
FROM = Ming Lee<130********@139.com>
USER = 130********@139.com
PASSWD = ****************
  • ENABLED = true 表示启用邮件服务
  • HOST:SMTP 服务器地址(需要对应邮箱开通 SMTP 服务且必须为 SSL 的形式访问)
  • FROM:发送人名称地址
  • USER:发送帐号
  • PASSWD:开通 SMTP 帐户时会有对应的授权码,139 邮箱就是登录密码

重启 Gogs 后可按以下步骤测试:

  • 管理员登录
  • 管理面板
  • 应用配置管理
  • 邮件配置
  • 发送测试邮件

对方邮箱接收到的测试邮件:

如果要开启注册邮箱验证,需要在 {gogs_home}/custom/conf/app.ini 文件中配置以下内容:

[auth]
; Whether to require email confirmation for adding new email addresses.
; Enable this option will also require user to confirm the email for registration.
REQUIRE_EMAIL_CONFIRMATION = true

如果要开启邮件通知提醒,需要在 {gogs_home}/custom/conf/app.ini 文件中配置以下内容:

[user]
; Whether to enable email notifications for users.
ENABLE_EMAIL_NOTIFICATION = true

完整的 app.ini 文件配置内容可参考:

https://github.com/gogs/gogs/blob/master/conf/app.ini

使用

创建新的仓库

填写信息 –> 创建仓库

创建完成

克隆仓库

git clone http://git.yangxu.com:3000/yangxu/yangxu.git

添加新的远程仓库

git remote add gogs http://git.yangxu.com:3000/yangxu/yangxu.git

从远程仓库获取最新版本

#从远程获取最新版本到本地,不会自动merge
git fetch gogs

推送到远程仓库

将本地的 master 分支推送到 gogs 主机,同时指定 gogs 为默认主机,后面就可以不加任何参数使用 git push 了。

git push -u gogs master 

首次推送会进行身份验证:

推送成功:

在 Web 端修改文件内容

点击“编辑此文件”的图标

编辑文件,填写提交内容,点击“提交变更”按钮

从远程仓库获取最新版本

#从远程获取最新版本并 merge 到本地
git pull

定时备份与恢复

备份与恢复

#查看备份相关参数
./gogs backup -h
#默认备份,备份在当前目录
./gogs backup 
#参数化备份  --target 输出目录 --database-only 只备份 db 
./gogs backup --target=./backups --database-only --exclude-repos
#恢复。执行该命令前要先删除 custom.bak
./gogs restore --from=gogs-backup-20200827081134.zip

自动备份脚本

vim do-backup.sh
#!/bin/sh -e
gogs_home="/root/svr/gogs/"
backup_dir="$gogs_home/backups"

cd `dirname $0`
#执行备份命令
./gogs backup --target=$backup_dir

echo 'backup sucess'
day=7
#查找并删除7天前的备份  
find $backup_dir -name '*.zip' -mtime +7 -type f |xargs rm -f;
echo 'delete expire back data!'

chmod 777 do-backup.sh

添加定时任务

每天 4:00 执行备份

# 打开任务编辑器
crontab -e
# 输入如下命令 00 04 * * * 每天凌晨4点执行do-backup.sh并输出日志至backup.log
00 04 * * * /root/svr/gogs/do-backup.sh >> /root/svr/gogs/backup.log 2>&1