搭建企业私有GIT服务

一、GIT服务器搭建方式

上一篇文章说过GIT是一个分布式版本管理系统,既然是分布式那么必然涉及远程通信,那么GIT是采用什么协议进行远程通信的呢?

GIT支持的四种通信协议:

Local(本地协议)

ssh

HTTP(Dumb,Smart)

git

Local(本地协议)

基于本地文件系统或共享(NFS)文件系统进行访问,也就是在团队里的一台电脑上建立GIT仓库,开启共享权限,团队成员通过访问该电脑操作GIT仓库

优点:简单,直接使用了现有的文件权限和网络访问权限,小团队小项目建立一个这样的版本管理系统是非常轻松的一件事

缺点:这种协议缺陷就是本身共享文件系统的局限,只能在局域网,而且速度很慢

适用场景:小团队,小项目临时搭建版本服务

演示本地协议使用方式:

在本地F盘创建git裸项目

git --bare init demo.git

从本地E盘克隆本地项目

git clone /f/demo.git

还可以基于file协议克隆本地项目

git clone file:///f/demo.git

如果在开头明确指定file://,那么GIT的行为会略有不同。如果仅是指定路径,GIT会尝试使用硬链接或直接复制所需要的文件。如果指定file://,GIT会触发平时用于网络传输资料的过程,传输过来的是打包好的文件,更节约硬盘空间

ssh

GIT支持利用ssh协议进行通信,这是绝大部分linux系统都支持的,所以利用该协议架构GIT版本服务是非常方便的

优点:首先SSH架构相对简单、其次通过SSH访问是安全的、另外SSH协议很高效,在传输前也会尽量压缩数据

缺点:权限体系不灵活,必须提供操作系统的账户密码,哪怕是只需要读取版本

演示基于ssh协议

我们必须先把git服务安装到linux系统上,然后才能使用ssh协议跟git服务进行通信

linux安装git服务

安装依赖环境

yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker

下载并解压源码

$ wget https://github.com/git/git/archive/v2.3.0.zip$ unzip v2.3.0.zip

$ cd git-2.3.0

编译安装(如果没有权限就加上sudo)

make prefix=/usr/local/git all

make prefix=/usr/local/git install

添加环境变量

vim  /etc/profile

export PATH=/usr/local/git/bin:$PATH

source /etc/profile

检验是否成功安装

git --version

进入/data/git-repository(没有的话创建)

创建一个裸项目

git --bare init demo.git

本地基于远程克隆项目

git clone root@ip:/data/git-repository/demo.git

cd demo

添加文件

echo "test demo" >>README.MF

本地添加,提交并推送到远程

git add .

git commit -m "first commit"

git push可能出现的错误:git-upload-pack: command not found

原因是 ssh 协议下只能访问/usr/bin 下的目录,解决办法如下

ln -s /usr/local/git/bin/git-upload-pack /usr/bin/git-upload-pack

ln -s /usr/local/git/bin/git-receive-pack /usr/bin/git-receive-pack

HTTP(Dumb、Smart)

GIT http协议的实现是依赖WEB容器(Apache,Nginx)及cgi组件进行通信交互,并利用WEB容器本身权限体系进行授权验证。在GIT1.6.6前只支持http Dumb(哑)协议,该协议只能下载不能提交,通常会配合ssh协议一起使用,ssh协议分配提交账号,http Dumb提供只读账号。1.6.6之后GIT提供了git-http-backend的CGI用于实现接收远程推送等功能。

优点:解决了local和ssh权限验证单一的问题、可基于http url提供匿名服务,从而可以放到公网上去。而local与ssh很难做到这一点,比如实现一个类似GitHub这样的网站。

缺点:架构复杂一些,需要部署WEB服务器,和https证书之类的配置

场景:大型团队,需要对权限精准控制,需要把服务部署到公网上去

演示http Dumb配置与使用创建服务端版本仓库

cd /data/git-repository

git --bare init demo.git

cd demo.git/hooks/mv

// 版本更新钩子,当有版本提交的时候会执行更新

post-update.sample post-update

./post-update

nginx 静态访问配置

server {

    listen    80;

    server_name git.demo.com;

    location / {

      root /data/git-repository;

    }

}

#重命名钩子

mv hooks/post-update.sample hooks/post-update

本地克隆远程服务

git clone http://git.demo.com/demo.git注:http Smart协议是基于CGI配合GIT git-http-backend脚本进行使用,配置较复杂,现在一般不会这样做,而是采用gitlab、gogs之类的web管理进行代替,在此就不在演示。

GIT协议

Git 协议是包含在 Git 里的一个特殊的守护进程;它监听在一个特定的端口(9418),类似于 SSH 服务,但是访问无需任何授权。

优点:目前,Git 协议是 Git 使用的网络传输协议里最快的。 如果你的项目有很大的访问量,或者你的项目很庞大并且不需要为写进行用户授权,架设 Git 守护进程来提供服务是不错的选择。 它使用与 SSH 相同的数据传输机制,但是省去了加密和授权的开销。

缺点:Git 协议缺点是缺乏授权机制。 而且9418是一个非标准端口,一般防火墙不会开放。

演示GIT协议的使用cd demo.git/

# 创建一个空文件,表示开放该项目

touch git-daemon-export-ok

# 启动守护进程

$nohub git daemon --reuseaddr --base-path=/data/git-repository/ /data/git-repository/ &

#本地克隆远程项目

git clone git://ip:9418/demo.git

二、基于gogs快速搭建企业私有GIT服务

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

提供Http 与ssh 两种协议访问源码服务

提供WEB界面可查看修改源码代码

提供较完善的权限管理功能、其中包括组织、团队、个人等仓库权限

提供简单的项目wiki功能

提供工单管理与里程碑管理

下载安装官网:https://gogs.io

下载:https://gogs.io/docs/installation 选择 linx amd64 下载安装

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

解压之后目录:

运行:

#前台运行

./gogs web

#后台运行

$nohup ./gogs web &

默认端口:3000

初次访问http://<host>:3000 会进到初始化页,进行引导配置。

gogs 基础配置

邮件配置说明:

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

第一:创建一个开通了smtp 服务的邮箱帐号,一般用公司管理员邮箱。我这里用的是QQ邮箱。

第二:在{gogs_home/custom/conf/app.ini} 文件中配置。

邮件设置

设置文件:{gogs_home/custom/conf/app.ini}

ENABLED = true

HOST=smtp.qq.com:465

FROM=11111111@qq.com>

USER=

PASSWD=ENABLED =true 表示启用邮件服务

host 为smtp 服务器地址,(需要对应邮箱开通smtp服务 且必须为ssl 的形式访问)

from 发送人名称地址

user 发送帐号

passwd 开通smtp 帐户时会有对应的授权码

重启后可直接测试

管理员登录==》控制面版==》应用配置管理==》邮件配置==》发送测试邮件

gogs定时备份与恢复

备份与恢复:

#查看备份相关参数

./gogs backup -h

#默认备份,备份在当前目录

./gogs backup

#参数化备份 --target 输出目录 --database-only 只备份 db

./gogs backup --target=./backupes --database-only --exclude-repos

#恢复。执行该命令前要先删除 custom.bak

./gogs restore --from=gogs-backup-20180411062712.zip

#自动备份脚本

#!/bin/sh -e

gogs_home="/home/apps/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!'

#添加定时任务 每天4:00执行备份

# 打开任务编辑器

crontab -e

# 输入如下命令 00 04 * * * 每天凌晨4点执行 do-backup.sh 并输出日志至 #backup.log

00 04 * * * /home/apps/svr/gogs/do-backup.sh >> /home/apps/svr/gogs/backup.log 2>&1

客户端公钥配置与添加

Git配置

#Git安装完之后,需做最后一步配置。打开git bash,分别执行以下两句命令

git config --global user.name “用户名”

git config --global user.email “邮箱”

#git 自动记住用户和密码操作

git config --global credential.helper store

SSH公钥创建

1、打开git bash

2、执行生成公钥和私钥的命令:ssh-keygen -t rsa 并按回车3下

3、执行查看公钥的命令:cat ~/.ssh/id_rsa.pub

4、拷贝id_rsa.pub 内容至至服务器~/.ssh/authorized_keys 中

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容