背景介绍
最近天气比较冷,休息时间一直宅在家,闲的很无聊,突然灵光一闪,想到双十一在阿里云买的一服务器还没怎么用呢,就有了搭建自己个站的想法,此时代码托管的需就出现了,又不想在第三方托管花大价钱买服务,遂决定自己搭一个吧。
1. 环境准备
服务器:centOS 7.4 开发机器:OSX 10.13.6
2. 协议
git 可以使用四种主要的协议来传输数据:本地传输,SSH 协议,Git 协议和 HTTP 协议。由于centOS 系统已经支持通过 SSH 对服务器的访问。SSH也是唯一一个同时支持读写操作的网络协议。另外两个网络协 议(HTTP 和 Git)通常都是只读的,所以虽然二者对大多数人都可用,但执行写操作时还是需要 SSH。SSH 同时也是一个验证授权的网络协议;而因为其普遍性,所以我选择了SSH协议作为了我的数据传输协议。
3. centOS安装git
由于只是用来作为我个人托管代码的git仓库,平时创建和访问项目直接登录服务 器就好啦,也不用做一个 web页面来访问自己的项目,所以我采取的是yum源安装git:
$ yum -y install git
git --version查看git有没有安装好,此时安装的yum源的git最新版本为1.8.3.1。如果需要高版本或者想要做一个web界面访问项目的话, 可以采取源码编译安装的方式安装git。
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目录下,然后通过
$ git --bare init
创建一个裸仓。
6. 测试git仓库
在我的电脑上,
$ git clone git@gitserver:/opt/git/project.git
此时成功拉取了服务器上的git仓库到本地,说明我们的简易git服务器搭建成功。
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服务器上。