搭建私有git服务

文章目录

  • 1. GIT服务器搭建方式
    • 1.1Local(本地协议)
      • 演示本地协议使用方式:
    • 1.2 ssh 协议
      • 演示基于 ssh 协议
    • 1.3 http(Dumb、Smart)
    • 1.4 GIT 协议
  • 二、基于gogs快速搭建企业私有GIT服务
    • 2.1 概要:
    • 2.2 gogs 介绍安装

1. GIT服务器搭建方式

  • git支持的四种通信协议:
  1. Local(本地协议)
  2. ssh
  3. http(Dumb、Smart)
  4. git

1.1Local(本地协议)

  • 基于本地文件系统或共享(NFS)文件系统进行访问,
  • 优点:简单,直接使用了现有的文件权限和网络访问权限,小团队小项目建立一个这样的版本管理系统是非常轻松的一件事。
  • 缺点:这种协议缺陷就是本身共享文件系统的局限,只能在局域网,而且速度也慢。
  • 适应场景:小团队,小项目临时搭建版本服务。

演示本地协议使用方式:

  • D盘创建项目
    git init --bare localTest.git:没有.git/目录
    bare裸文件,只有key/value值,没有实体文件。裸项目不能在远程仓库手动改。
    搭建私有git服务_第1张图片

右键该目录localTest.git,属性
搭建私有git服务_第2张图片

  • 从本地C盘目录克隆项目
    git clone /d/git/localTest.git
    搭建私有git服务_第3张图片
    本地是正常的.git文件夹
  • 本地仓库正常开发
    搭建私有git服务_第4张图片
  • 本地仓库目录结构
    搭建私有git服务_第5张图片
  • 远程目录结构:只有key/value,没有实体文件
    搭建私有git服务_第6张图片
    搭建私有git服务_第7张图片
  • 本地仓库已经和远程仓库建立连接
  • 在这里插入图片描述
  • 基于file 协议克隆本地项目
    git clone file:///d/git/localTest.git/
    搭建私有git服务_第8张图片
    如果在 URL 开头明确的指定 file://,那么 Git 的行为会略有不同。 如果仅是指定路径,Git 会尝试使用硬链接(hard link)或直接复制所需要的文件。 如果指定 file://,Git 会触发平时用于网路传输资料的进程,传输过来的是打包好的文件,更节约硬盘空间。
  • 显示通过file文件clone下来的项目,里面是打包好的文件
    在这里插入图片描述

1.2 ssh 协议

  • git 支持支持利用ssh 协议进行通信,这是绝大部分linux、uninx系统都支持的,所以利用该协议架设GIT版本服务是非常方便的
  • 优点:首先SSH 架设相对简单、其次通过 SSH 访问是安全的、另外SSH 协议很高效,在传输前也会尽量压缩数据。
  • 缺点:权限体系不灵活,必须提供操作系统的帐户密码,哪怕是只需要读取版本。
  • 适应场景:小团队、小项目、临时项目

演示基于 ssh 协议

这里我们把git 服务必须先安装到linux 系统上,然后才能使用ssh 协议跟git 服务进行通信。
搭建私有git服务_第9张图片

  • 本地没有公钥,创建公钥
    ssh-keygen: 回车就完事了
    在这里插入图片描述
  • 查看公钥
    cat ~/.ssh/id_rsa.pub
    搭建私有git服务_第10张图片
    插入小知识点
dpkg -l 每条记录对应一个软件包,每条记录的第一,二,三个字符是软件包的状态标识,后边依此时软件包名称,版本号,和简述:
 
第一个字符为,期望值;包括如下状态:
u 状态未知;意味软件包未安装,并且用户也未发出安装请求;
i 用户请求安装软件包;
r 用户请求卸载软件包;
p 用户请求清楚软件包;
h 用户请求保持软件包版本锁定;
 
第二个字符,当前状态;包括:
n 软件包未安装;
i 软件包安装并完成配置;
c 软件包以前安装过,现在删除了,但是配置文件再留在系统中;
u 软件包被解包,但未配置;
f 试图配置软件包,单失败;
h 软件包安装,单没有成功;
 
第三个字符,错误状态;包括:
h 软件包被强制保持,因为有其他软件包依赖需求,无法升级;
r 软件包被破坏,可以需要重新安装才能正常使用(包括删除);
x 软件包被破坏,并且被强制保持;
  • 下载xhell连接Ubuntu主机,发现连接不上,得知是因为远程没有安装ssh服务
    Xshell6下载官网
  1. 查看SSH服务是不是安装(若命令运行有内容则说明已经安装)
    sudo dpkg -l | grep ssh
    搭建私有git服务_第11张图片
  • 查看ssh服务是否启动(若命令运行有内容则说明有该服务,否则没有启动该服务)
    sudo ps -e |grep ssh: ps命令用于报告当前系统的进程状态。
    在这里插入图片描述
    没有安装的话,命令运行什么都不显示
  1. 安装SSH
    sudo apt-get install openssh-server
  2. 更新源
    sudo apt-get update
  3. 启动服务
    启动ssh命令:service sshd start
    停止ssh命令:service sshd stop
  • 此时可以用Xshell登录到该linux系统上了
  • 远程添加公钥
    远程仓库没有.ssh,则执行ssh-keygen,把本次仓库中的公钥id_rsa.pub添加到authorized_keys中即可。
    在这里插入图片描述
  • 开始仓库配置
    cd ~/Documents
    git init --bare learngit.git在这里插入图片描述
    搭建私有git服务_第12张图片
    搭建私有git服务_第13张图片
  • 创建文件并提交,push
    搭建私有git服务_第14张图片
    搭建私有git服务_第15张图片
  • 查看远程仓库内容
    搭建私有git服务_第16张图片
    添加成功。
linux安装.ssh服务
安装git服务。
创建公钥,服务器上可以有多个公钥,本地只有一个公钥。
  • 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
    备用下载链接: 密码: 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
  5. 如果成功显示版本号表示添加成功
    git --version
    git version 2.3.0
  • 缺点:权限体系不够完善

  • 可能的错误:
    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

\TODO 有空总结一下四种方式,后面在详细写一下

1.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 证书之类的配置
场景:大型团队、需要对权限精准控制、需要把服务部署到公网上去

 演示 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管理进行代替,在此就不在演示。

1.4 GIT 协议

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

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

  • 缺点
    Git 协议缺点是缺乏授权机制。 而且9418是一个非标准端口,一般防火墙不会开放。
     演示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服务

2.1 概要:

  1. gogs 介绍与安装
  2. gogs 基础配置
  3. gogs 定时备份与恢复
  • gitlab ==> 功能多一些
    缺点: 1. 非常重 自动安装了nginx\redis\mysql\gitlab服务 2. 国际化做的不好

2.2 gogs 介绍安装

  • Gogs 是一款开源的轻量级Git web服务,其特点是简单易用完档齐全、国际化做的相当不错。其主要功能如下:
  1. 提供Http 与ssh 两种协议访问源码服务
  2. 提供可WEB界面可查看修改源码代码
  3. 提供较完善的权限管理功能、其中包括组织、团队、个人等仓库权限
  4. 提供简单的项目viki功能
  5. 提供工单管理与里程碑管理。
  • 下载安装
    官网
    下载 选择 linx amd64 下载安装
    文档
    安装:
    解压之后目录:

  • 运行:
    #前台运行
    ./gogs web
    #后台运行
    $nohup ./gogs web &
    默认端口:3000
    初次访问http://: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
[email protected]
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 中

你可能感兴趣的:(Git)