搭建基于Git的小型团队测试服务器

写在前面

最近在团队开发中遇到很多麻烦的问题,多人协作很不方便,所以就想搭建一个基于 Git 的小型团队协作(也就是很多东西需要手动配置)服务器,完成一些小型的开发测试工作。

关于 Git 的基本操作推荐廖雪峰的 Git 教程:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

安装配置 Git

安装 Git 软件

1
yum install git

添加一个 git 账户,用于使用 ssh 方式远程连接 git 服务

1
2
useradd git
passwd git(给 git 账户设置密码)

禁用 git 账户登录 shell

编辑账户配置文件

1
vim /etc/passwd

找到这一行

1
2
3
git:x:1001:1001:,,,:/home/git:/bin/bash
改为
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

设置以后,git 用户可以正常通过 ssh 使用 git,但无法登录 shell,因为已经为 git 用户指定了 git-shell,该 shell 每次一登录就自动退出 配置一下 git 的默认账户和邮箱

1
2
git config --global user.name "Jason"
git config --global user.email "[email protected]"

建立 Git 总仓库

初始化 Git 仓库,在这里选择在/srv/dev/main.git 目录下操作

1
2
3
mkdir /srv/dev
cd /srv/dev
git init --bare main.git

在这里要说明两点:

  • git 仓库的目录名一般习惯上使用.git 结尾
  • 使用–bare 参数初始化仓库是初始化咯仓库的意思因为我们在 main 目录下只是为了建立一个历史纪录的库,而不需要实际中该项目文件的拷贝,所以这个目录不是所谓的工作目录,只是所谓的工作目录下.git 文件夹中的内容,具体可以 google 一下 git init  和 git init –bare 的区别

把仓库 owner 改为 git 账户

1
chown git:git main.git

现在 Git 的总仓库已经建立完成了!接下来,为每个小伙伴建立仓库

配置 SSH

首先说一下,这次我想使用 SSH 方法登录认证 git,所以根据 SSH 的思路,可以使用 SSH Key 或者用户密码来认证。 因为 SSH Key 还需要收集大家的公钥,用起来比较麻烦,所以我选择直接使用账户密码认证(其是不推荐这样,容易受到中间人攻击)。 如果服务器没有配置使用用户名密码进行 SSH 需要这样设置

编辑/etc/ssh/sshd_config
找到

1
#PasswordAuthentication no

改为

1
PasswordAuthentication yes

关于密钥加密的配置方法可以参考 http://blog.csdn.net/wave_1102/article/details/47779401

为每个小伙伴创建自己的仓库

首先建立一个 dev 用户组,所有的小伙伴都归入这个组中

1
groupadd dev

在这里以一个叫 learn 而的用户为例 (之后如果有其他用户加入,添加方法和下面相同)

1
2
useradd -d /usr/learn -m learn -g dev
passwd learn(为你的小伙伴设置初始密码)

为什么为 learn 用户分配了一个/usr 目录下的主文件夹呢,因为他很可能还要在服务器上写一些其他的脚本什么的,留个主目录方便。 在/srv/dev/learn clone 一个用户仓库

1
2
3
4
5
6
mkdir learn
cd learn
git clone git@localhost:/srv/dev/main.git /srv/dev/learn
或者
git clone git@(你的服务器 IP):/srv/dev/main.git /srv/dev/learn
(会提示输入之前设置的 git 用户的密码)

然后将 learn 目录的所有权变为 learn 账户

1
chown dev:learn /srv/dev/learn

现在,就可以把代码拷贝到 learn 目录然后做 first commit 了! 比如把代码拷贝过来之后

1
2
3
cd /srv/dev/learn
git add *
git commit -m "this is the first commit"

当然,现在只是把代码提交到这个叫 learn 的小伙伴的 git 仓库中,他可以随时提交更改回退,当然要想提交到主仓库,可以这样操作

1
git push -u origin master

PS:第一次提交要使用-u,之后就不用使用了 现在,就已经可以做到让小伙伴们登陆远程开发服务器进行开发,每个人都拥有自己的版本库并且可以提交到中心版本库中 关于 Git 的详细使用方法,可以参考文初推荐的教程 最后说一下,如果有人想在本地也 clone 一个代码库的话,可以 clone 一个自己的代码库到本地,每次更改后提交到自己的代码库中,如果需要合并到主版本库,用自己的账户登录到服务器提交即可。

配置服务器

我们团队需要建立的是 PHP+Apache+MySQL 测试环境,所以最后还需要配置一下 Apache(如果是别的平台可自行配置,也可留言讨论) 打开 Apache 配置文件

1
vim /etc/httpd/conf/httpd.conf

假设在 88 端口使用虚拟主机进行配置,添加一下代码到配置文件中

1
2
3
4
5
6
7
8
Listen 88
<VirtualHost *:88>
DocumentRoot "/srv/dev"
<Directory "/srv/dev">
Options Indexes FollowSymLinks # Allow open access:
Require all granted
</Directory>
</VirtualHost>

最后重启 Apache

1
systemctl restart httpd.service

好了!一切完工,现在每个小伙伴都可以有一个自己的测试 URL 了,还是以 learn 用户为例

1
http://测试服务器IP或域名:88/learn

一切完工

一切完成!可以让小伙伴们告诉你他想要的账户然后按照“为每个小伙伴创建自己的仓库”一节所说的,帮他们创建自己的测试仓库了。

最后说一下,关于 SSH 公钥管理还有一个软件叫做Gitosis。不过小团队也没有必要使用,大的团队需要使用的话可以自行研究。