1. GIT远程通信协议详解
  2. 基于gogs 搭建WEB管理服务

一、GIT服务器搭建方式

上一节课我们讲过GIT是一个分布式版本管理系统,既然是分布那么必定会涉及远程通信,那么GIT是采用什么协议进行远程通信的呢?

git支持的四种通信协议:

  1. Local(本地协议)
  2. ssh
  3. http(Dumb、Smart)
  4. git

1、Local(本地协议)

基于本地文件系统或共享(NFS)文件系统进行访问,

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

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

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

  1. 演示本地协议使用方式:

# 从本地 f/git/atals 目录克隆项目

git clone /f/git/atals/

# 即使是 bare仓库也可以正常下载

git clone /f/git/atals.git

# 基于file 协议克隆本地项目

git clone file:///f/git/atals/

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

  1. 演示通过 file:///协议与直接拷贝的区别。

2、ssh 协议

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

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

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

适应场景:小团队、小项目、临时项目

  1. 演示基于 ssh 协议

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

  1. linux 安装git服务 

# 1.安装依赖环境

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

# 2.下载并解压源码

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

# 备用下载链接: https://pan.baidu.com/s/1czwEz8 密码: y3hn

$ unzip v2.3.0.zip

$ cd git-2.3.0

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

make prefix=/usr/local/git all

make prefix=/usr/local/git install

#4、添加环境变量

vim /etc/profile

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

source /etc/profile

#如果成功显示版本号表示添加成功

git --version

git version 2.3.0

  1. #创建一个祼项目

git --bare init luban.git

#本地基于远程克隆仓库

git clone root@192.168.0.147:/data/git-repository/luban.git

cd luban/

#添加文件

echo "this is luban" >> README.MF

# 本地添加、提交、并推送至远程

git add -A; git commit -am '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

3、http(Dumb、Smart)

Git http 协议实现是依懒 WEB容器(apache、nginx)及cgi 组件进行通信交互,并利用WEB容器本身权限体系进行授权验证。在 Git 1.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 证书之类的配置

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

  1. 演示 http Dumb 配置与使用

1、创建服务端版本仓库

cd /data/git-repository

git --bare init luban.git

cd luban.git/hooks/mv

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

post-update.sample post-update

./post-update

nginx 静态访问配置

server {

listen       80;

server_name  git.tl.com;

location / {

root  /data/git-repository;

}

}

#重命名钩子

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

本地克隆远程服务

git clone http://git.tl.com/luban.git

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

4、GIT 协议

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

优点

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

缺点

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

  1. 演示GIT协议的使用

cd luban.git/

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

touch git-daemon-export-ok

# 启动守护进程

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

#本地克隆远程项目

git clone git://192.168.0.147:9418/luban.git

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

概要:

  1. gogs 介绍与安装
  2. gogs 基础配置
  3. gogs 定时备份与恢复

gitlab ==> 功能多一些

且gogs国际化做的特别好,各种语言支持,支持中文。gitlab目前不支持中文。

1、gogs 介绍安装

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

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

下载安装

官网: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 会进到初始化页,进行引导配置。

可选择mysql 或sqlite 等数据。这里选的是sqllite

注:mysql 索引长度的问题没有安装成功,需要用mysql5.7 以上版本

2、gogs 基础配置

邮件配置说明:

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

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

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

QQ邮箱开通smtp服务

1、点击设置

2、开启smtp

邮件设置

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

ENABLED = true

HOST=smtp.qq.com:465

FROM=tuling<2877438881@qq.com>

USER=

PASSWD=

ENABLED =true 表示启用邮件服务

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

from 发送人名称地址

user 发送帐号

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

重启后可直接测试

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

3、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

4、客户端公钥配置与添加

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 中

===================================================================

1、git-update 钩子与git 怎么协作完成文件下载的?
答:git-update 在推送的时候调用,用于打包git对象文件与并生成索引。http哑协议必须基于索引来pull。2、裸项目就可以当服git服务吗,非裸项目可以做git服务吗?
答:祼项目一般用做git服务、非裸项也可做远程服务,二者区别在于祼项目录中文件无法查看和修改。3、nigx 与 Apache 区别
答:都是WEB反向代理服务器,两个不同的项目,就好比Tomcat 与jetty 都是servlet 容器一样。4、执行pull以后  本地的.git目录内容就和git服务器上的如luban.git中的内容一样了?
答:不是百分百一样,只能说本地一部分git对象同步过去了。5、钩子是固定的那几个么?可不可以自个写? 剩下的那几个钩子的作用是什么?答:可以自己写,具体参见:https://www.git-scm.com/book/zh/v2/%E8%87%AA%E5%AE%9A%E4%B9%89-Git-Git-%E9%92%A9%E5%AD%906、文件冲突了,也解决了冲突,提交后对应文件原来的提交历史记录没了,如何查看文件原来的提交记录?答:解决冲突之后,原来的提交记录是不会删除的。只有以下两种情况会删除提交 一、强行删除未合并的分支 二使用 rest 命令强行回滚两历史提交 git reset --hard7、如果不修改钩子名字 有其它方式可以弄么???
答:那是在仓库创建的时候默认放在hooks 下的钩子,如果要启用就把后缀去掉8、post-update.simple 这个文件名称就是如果不修改 有没有其它的方式可以打包pack那些文件
答:那只能手动的去执行 git update-server-info 命令。9、ssh 协议就是一个密匙协议吗? 和亚协议怎么配合使用 ?
答:ssh 是linux/uninx 远程登录协议。ssh协议分配读写帐号,而哑协议分配只读帐号,这样来配合使用。11、哑协议还是不懂是啥?什么时候创建裸项目?哑协议不是只读吗,怎么能提交呢?答:哑协议 就是git基于http web 服务器只读协议,他不能提交,课堂上我们演示提交的时候是用ssh协议提交的。远程通信协议和仓库项目本身是两回事。
当你需要创建一个仓库项目的时候创建裸项目,裸项目就是在服务端不能编编辑修改,只能在客户端修改。12、nginx主要是干嘛的,怎么使用,有没有相关资料?答:nginx 与Apache、IIS一样是一个WEb服务器,后续课程当中会讲。13、实际项目中git是怎么玩的呢?
答:①比如分支合并,
②如果有2个功能,我只想上线1个功能,应该怎么去维护呢
这属于版本发布管理的事情,我们在工程专题后面两节课会讲,并模拟版本迭代过程。14、nginx配置文件也共享到源码中心吧?答:可以15、我们本地环境该怎么连远程Linux服务器,不会用自己电脑搭Linux服务器。答:在linux基础课上会讲16、配置nginx的作用是干嘛?答:做WEB代理,GIT本身实现http通信,只能基于WEB容器来实现。17、钩子是什么?有啥作用?答:你可把钩子理解成事件触发,比如当你代码提交以后 你想邮件通知相关人员,就可以自己用脚本写一个通知。或者所当某个分支删除时通知相关人员等。

tl02-搭建企业私有GIT服务相关推荐

  1. 搭建企业私有Git服务

    一.GIT服务器搭建方式 上一节课我们讲过GIT是一个分布式版本管理系统,既然是分布那么必定会涉及远程通信,那么GIT是采用什么协议进行远程通信的呢? git支持的四种通信协议: Local(本地协议 ...

  2. git为私有仓库设置密码_我搭建了一套企业级私有Git服务,抗住了每天上万次攻击!...

    写在前面 事情是这样的,今年疫情期间,我在某云购买了一套服务器,做什么呢?不是用来部署项目,也不是用来搭建网站,而是用来做代码备份和管理.没错,都是我个人的代码,也许你会说,你个人能有多少代码啊?确实 ...

  3. docker之搭建gitlab私有仓库服务

    简单三步搭建docker之搭建gitlab私有仓库服务 服务配置:1c2g+2g虚拟内存,服务启动大概需要3.x g内存 内存不足可配置虚拟使用--memory=10M --memory-swap=- ...

  4. 采用超融合搭建企业私有云的虚拟化技术知识储备

    回老家,转行到企业IT运维.第一个任务便是非常重大的活儿--企业信息化系统建设.由于公司是大型集团企业,公司架构庞大复杂,从事传统行业,信息化程度相对落后.所以使得任务非常重要.又异常艰巨,我们领导压 ...

  5. 阿里云CentOS7.3搭建多用户私有git服务器(从安装git开始)

    起因 自己会有练手的不敢公开的项目,就自己搭建个服务器放自己的渣代码了. 在经历了连不上服务器.没有访问权限.没法提交以后,我打通了任督二脉. 我这个git服务器适合条件:1.就那么几个人小项目,不是 ...

  6. 使用Git工具搭建本地局域网Git 服务

    在项目需要用到Git来管理整个Team的代码,所以就得在本地局域网内搭建git服务器来保存代码,以前项目用的是gitblit. 在github链接:https://github.com/gitblit ...

  7. Gogs搭建教程-极易搭建的自助 Git 服务

    环境要求 数据库(选择以下一项): MySQL:版本 >= 5.7 PostgreSQL MSSQL TiDB(实验性支持,使用 MySQL 协议连接) 或者 什么都不安装 直接使用 SQLit ...

  8. gogs搭建git服务教程

    使用gogs搭建自己的git服务!!! 一.GIT服务器搭建方式 上一节课我们讲过GIT是一个分布式版本管理系统,既然是分布那么必定会涉及远程通信,那么GIT是采用什么协议进行远程通信的呢? git支 ...

  9. 打开git界面_使用 Gitea 快速搭建私有 Git 版本控制服务

    1. 前言 分布式版本控制工具 Git 已经是现代软件源代码版本控制首选方案之一.公有 Git 服务提供商 国外知名如 GitHub 国内网络延迟高,Gitlab 涉嫌对中国的歧视不推荐.国内有 Gi ...

最新文章

  1. 应用在大规模推荐系统,Facebook提出组合embedding方法 | KDD 2020
  2. Android退出程序(三)——Android事件总线
  3. java ctp行情_java-ctp
  4. MFC 自定义消息四步曲与在参数中传递变量
  5. 利用 CocoaLumberjack 搭建自己的 Log 系统
  6. 阿里云ecs实例中创建数据库
  7. C#指定窗口显示位置的方法
  8. java coin介绍_代码示例中的Java 7:Project Coin
  9. 【转】HashSet的用法
  10. python 字符串去重且相同字符最多出现2次_【Python】获取字符串中出现次数最多/少的字符...
  11. 《剑指Offer》 从上往下打印出二叉树
  12. HDOJ水题集合6:杂题
  13. Javascript中的执行环境及作用域
  14. hp t410微型计算机使用,HP 发表新款 t410 AIO Smart Zero 精简型电脑,仅需网络线即可作为电源驱动使用...
  15. Google Maps API 中的标注编程
  16. Java二级多少分算过_计算机二级考多少分算过
  17. matlab 求导数
  18. PAT乙级1050 螺旋矩阵
  19. 如何系统的学习linux
  20. Python中shape的用法

热门文章

  1. 项目:家庭收入支出记账软件(JAVA语言)
  2. 解析区块链游戏与GameFi的发展历程
  3. win32 中GetLastError 关于code与信息
  4. 大乔,王者荣耀真正的王者
  5. Excel中倒排数据
  6. 计算机基础知识与Java语言概述(DAY1)
  7. 【附源码】Java计算机毕业设计安卓和悦少年文明礼仪监管APP(程序+LW+部署)
  8. 解决 UP BROADCAST RUNNING MULTICAST 问题
  9. 新一代iPhone后盖或将采用超级合金
  10. 什么是LED晶膜屏?和透明LED贴膜透明屏一样吗?