简单搭建本身的git服务

背景介绍

最近天气比较冷,休息时间一直宅在家,闲的很无聊,忽然灵光一闪,想到双十一在阿里云买的一服务器还没怎么用呢,就有了搭建本身个站的想法,此时代码托管的需就出现了,又不想在第三方托管花大价钱买服务,遂决定本身搭一个吧。linux

1. 环境准备

服务器:centOS 7.4 开发机器:OSX 10.13.6git

2. 协议

git 可使用四种主要的协议来传输数据:本地传输,SSH 协议,Git 协议和 HTTP 协议。因为centOS 系统已经支持经过 SSH 对服务器的访问。SSH也是惟一一个同时支持读写操做的网络协议。另外两个网络协 议(HTTP 和 Git)一般都是只读的,因此虽然两者对大多数人均可用,但执行写操做时仍是须要 SSH。SSH 同时也是一个验证受权的网络协议;而由于其广泛性,因此我选择了SSH协议做为了个人数据传输协议。web

3. centOS安装git

因为只是用来做为我我的托管代码的git仓库,平时建立和访问项目直接登陆服务 器就好啦,也不用作一个 web页面来访问本身的项目,因此我采起的是yum源安装git:shell

$ yum -y install git
复制代码

git --version查看git有没有安装好,此时安装的yum源的git最新版本为1.8.3.1。若是须要高版本或者想要作一个web界面访问项目的话, 能够采起源码编译安装的方式安装git。vim

4. 添加一个git帐户

$ sudo adduser git 
$ su - git
$ ssh-copy-id -i ~/.ssh/id_rsa.pub git@gitserver,经过此命令将我电脑的ssh公钥上传到
git用户的authorized_keys文件中.
复制代码

5. 初始化一个裸仓

在linux中,通常采用在 /opt 目录中安装应用,因此我在 /opt 下新建了一个git目录用来做为个人git 仓,在 /opt/git 目录下新建一个以 工程名+.git 的目录,cd到project.git目录下,而后经过bash

$ git --bare init
复制代码

建立一个裸仓。服务器

6. 测试git仓库

在个人电脑上,网络

$ git clone git@gitserver:/opt/git/project.git
复制代码

此时成功拉取了服务器上的git仓库到本地,说明咱们的简易git服务器搭建成功。ssh

7. 设置git用户对服务器的操做权限

做为一个额外的防范措施,你能够用 git 自带的 git-shell 工具限制 git 用户的活动范围。只要把它设 为 git 用户登入的 shell,那么该用户就没法使用普通的 bash 或者 zsh 什么的 shell 程序。编辑 /etc/passwd 文件:工具

$ sudo vim /etc/passwd
复制代码

在文件末尾,你应该能找到相似这样的行:

git:x:1002:1003::/home/git:/bin/bash

把 /bin/bash改成/bin/git-shell,或者使用which git-shell查看它的实际安装路径,而后用实际安 装路径替换/bin/bash便可。修改后以下:

git:x:1002:1003::/home/git:/bin/bash

如今 git 用户只能用 SSH 链接来推送和获取 git 仓库,而不能直接使用主机 shell。尝试普通 SSH 登陆的话,会看到下面这样的拒绝信息:

  • fatal: Interactive git shell is not enabled.
  • hint: ~/git-shell-commands should exist and have read and execute access.
  • Connection to gitserver closed.

总结

因为linux文件权限相关的问题,在新建git目录和建立git仓库以前,必定要先建立git用户,而且切换到git用户作相关操做,不然git push的时候会由于文件权限问题而没法成功推送代码到git服务器上。

相关文章
相关标签/搜索