PHP Laravel NGINX html css Bootstrap Python Symfony Apache Windows linux jquery Django ASP vanilla Slim vagrant docker Homestead MySQL Redis Git SVN ssh Root vim PhpStorm Pycharm sass less PHP Laravel android html css Vue Angular React NGINX html css Javascript

Linux环境下如何搭建Git服务器(Git Server)

原创

原创不易 ~ 转载请注明出处哦

版本控制相信大家都听说过。Git鼎鼎大名我想大家肯定也有所耳闻。但是Github上的repo都是公开的,要使用私有repo需要付费。而今天我们就要来讲解一下如何在Linux环境下搭建起Git Server实现开发团队的版本控制:

即可以使用git clone命令从服务器上克隆项目,并且可以向服务器推送及拉取更新。

我们的演示环境是一台阿里云服务器,系统Ubuntu 16.04 LTS,在讲解过程中,我会对比使用Amazon云服务器操作步骤的区别。

一般来说,现在云服务器Ubuntu环境都已经安装好git了,如果没有的话,我们需要自行安装一下:

$ sudo apt-get install git

那么我们的操作分为几个步骤:

  1. 在服务器上创建专门用于git操作的用户
  2. 本地创建新的ssh秘钥,并将公钥上传至服务器中,用于远程连接步骤1中的git用户
  3. 在服务器上创建git项目文件夹
  4. 将本地项目文件推送至服务器

步骤明确了,那么我们就开始操作。


1. 在服务器上创建专门用于git操作的用户

在服务器中输入以下命令,建立名为git的用户:

$ sudo su                  
$ adduser git                  
Adding user `git' ...                  
Adding new group `git' (1001) ...                  
Adding new user `git' (1001) with group `git' ...                  
Creating home directory `/home/git' ...                  
Copying files from `/etc/skel' ...                  
Enter new UNIX password:

我们需要为该用户输入新密码,该密码将作为之后git推送和拉取时远程连接需要用到的密码。

接下来,我们需要建立起.ssh文件夹及相应的authorized_keys文件,用来添加授权用户的public key

$ su git                  
$ cd ~              
$ mkdir .ssh && chmod 700 .ssh                  
$ touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys

2. 本地创建新的ssh秘钥,并将公钥上传至服务器中

在本地环境下,新建一对ssh秘钥:

$ cd ~/.ssh                  
$ ssh-keygen -t RSA -b 2048 -C "Local Developer"

输入以上命令后,我们会看到以下提示:

Generating public/private RSA key pair.                  
Enter file in which to save the key (/home/eagle/.ssh/id_rsa):

这里我们可以直接按回车保留默认秘钥文件路径,或者你可以填写方便自己辨识的秘钥名称(但是如果你不注明路径的话,那么秘钥默认生成在当前文件夹下)。
该步完成后,我们会看到要我们输入密码的提示:

Enter passphrase (empty for no passphrase):

这里我们直接回车默认不设置密码。

完成后,我们可以看到.ssh文件夹中多出了两个文件,一个无后缀名的文件为私钥,另一个.pub后缀的为公钥。假设我们创建的私钥名称为git,那么对应的公钥就是git.pub

我们需要把公钥中的内容添加到服务器上git用户的~/.ssh/authorized_keys中:

//将git.pub上传到服务器根目录              
$ scp git.pub root@server-ip:~/                  
   
//将git.pub中的内容添加到authorized_keys中                  
root@server-ip:~$ sudo cat git.pub >> /home/git/.ssh/authorized_keys

(当然如果你嫌上传麻烦也可以直接把公钥中的信息粘贴到服务器端的authorized_keys中)


这里讲解一下如果你用的是Amazon云服务器,你需要使用Amazon后台建立一对新的密钥。Amazon后台生成的密钥为一个.pem后缀的文件,我们下载秘钥到本地后,使用

chmod 400 git.pem                
ssh-keygen -y -f git.pem

来读取.pem文件中的公钥内容。读取到公钥内容后,我们也是一样按照上述步骤将公钥添加至/home/git/.ssh/authorized_keys


现在我们尝试使用sshgit用户身份登陆到服务器:

$ ssh git@server-ip

输入git用户密码,若显示连接成功,那么我们已经接近成功了!

这里注意Amazon服务器用户需要在~/.ssh中添加名为config的文件,并将以下内容添加至该文件中:

  Host my-aws-host-ip            
    IdentityFile ~/.ssh/git.pem

该步骤目的是为了确保连接服务器时使用的是正确的私钥。
请用你的服务器公共地址替换上面的my-aws-host-ip


3. 在服务器上创建git项目文件夹

这个步骤很简单,我们在/srv/git下创建一个我们的项目文件夹:

$ sudo mkdir -p /srv/git/eagle.git

下面一步,我们要初始化这个文件夹:

$ cd /srv/git/eagle.git            
$ git init --bare .

注意,我们用了--bare这个参数,表示我们这个git文件夹中将不会有工作文件夹(Working Directory)。

然后我们更改一下文件所属用户:

$ sudo chown -R git: /srv

4.将本地项目文件推送至服务器

现在我们就可以将本地项目推送至我们的服务器了!

首先我们进入我们的项目,初始化git并添加remote地址:

$ cd my-project            
$ git init .            
$ git add .            
$ git commit -m "initial commit"                  
$ git remote add origin git@server-ip:/srv/git/eagle.git

完成之后,我们就可以进行第一次推送了:

$ git push origin master

当然,我们也可以拉取远程项目文件:

$ git pull origin master

以上我们就完成了Git服务器的搭建,如果我们需要在其他电脑或者环境推送或者拉取,那么我们只需要在新环境中克隆我们的项目文件就可以进行拉取和推送了:

$ git clone git@server-ip:/srv/git/eagle.git
$ cd eagle
$ vim README
$ git commit -am 'fix for the README file'
$ git push origin master

另外,如果需要限制Git用户不能使用ssh进行远程登录,可以参考我的另一篇文章:

Git Server - 限制Git用户使用SSH登陆操作

参考资料:

https://git-scm.com/book/en/v2/Git-on-the-Server-Setting-Up-the-Server
https://aws.amazon.com/premiumsupport/knowledge-center/new-user-accounts-linux-instance/
https://kb.iu.edu/d/aews


正在加载验证码......
请先完成验证