linux搭建git仓库的 完美攻略

2019-12-07  本文已影响0人  半打真心
青年普朗克

    “好!我们开始建私有仓库。唉?github私库要钱?”

    “没事还有gitlab,emmmmm,骄傲的中国程序员不考虑。”

    “决定了,码云!就是你了!”

    “慢着!你的领导决定要建自己的git仓库,在自己的服务器上。”

    “......”

准备

    linux系统(centos或者ubuntu)  略,

    下载并安装git  略

    安装ssh(一般系统默认已安装) 略

    学习ssh公钥登录知识  略

步骤一、创建git用户(非指github用户)

    1、添加用户名叫git:      adduser -m git

    2、添加git用户的密码:passwd gitpass

    3、如果你添加用户名的时候没有加上-m指令,可能就没有该账户的主目录需要自己生成一个。

        # mkdir -p /home/git

        # cd /home

         # chown -R git:git git 

说明:给仓库添加用户是必要的过程,但添加密码并不是,如果添加密码将会有更多的设置步骤,这也是本教程使用的方式。

步骤二、ssh免密设置

    实际上就是ssh公钥登录设置。在这里要理解你有两个主机,一个是我们现在要搭建git仓库的主机我们叫服务端,一个是你要使用git仓库上传下拉代码的主机我们叫客户端。

    1、公钥登录设置的第一步就是要在客户端生成RSA密钥对,如果之前使用过github这些远程仓库可能就生成过密钥对,直接跳过此步骤。如果没有就使用ssh-keygen -t rsa命令生成密钥对。

    密钥对默认生成在root账户目录下的.ssh目录下,windows可以在c/用户/administrator/.ssh/下查找。打开id_rsa.pb,这里的字符串就是公钥串。

    生成密钥对的时候会提醒你设置密码,一定一定不要设置密码,一路回车就行。

    2、把公钥串添加到服务端git用户主目录下/home/git/.ssh/authorized_keys,这个文件里尾部换行粘贴这个公钥串就行。如果没有对应的文件和目录,创建即可,创建之后为了保险起见添加命令chown -R git:git /home/git 

    也可以在客户端执行ssh git@119.2.222.222 ' cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub

    这里的119.2.222.222 是服务器ip,要灵活理解。

    同时服务端要修改.ssh和authorized_keys权限(如果不修改,拉代码的时候可能会报权限错误)

    chmod 755 /home/git/.ssh

    chmod 644 /home/git/.ssh/authorized_keys

    3、配置ssh的配置文件sshd_config,一般在/etc/ssh/sshd_config,执行vim /etc/ssh/sshd_config。这里的配置有许多的坑,一般你的centos版本在7.4以下,按照一下配置。

    RSAAuthentication yes

    PubkeyAuthentication yes

    AuthorizedKeysFile .ssh/authorized_keys

    PasswordAuthentication no

    但是如果你的是新版本的centos就不要这么干,在原有的默认的配置基础下用以下配置

    StrictModes no    

    然后就没了,注意#不代表注释,#加空格表示注释,#不加空格表示默认配置。

    4、禁止shell登录。这个很重要,一定一定要配置,不然你登录还是要输入密码(吓你的,嘿嘿)。

    修改这个文件,执行命令vim /etc/passwd    

    git:x:1001:1001:,,,:/home/git:/bin/bash

    改为

    git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

步骤三、新建git仓库

    1、选一个目录作为 Git 仓库,将目录所有者改为 git 用户。或者直接使用git主目录。修改目录用户的命令如下。

          # chown -R git:git /home/git/test.git

    2、创建仓库

          # cd /home/git/test.git 进入文件夹,

     # git init --bare 创建裸库(这里需要注意--bare参数,表示是要生成一个"干净"的仓库)

    3、修改权限

          # chown -R git:git test.git

          # chmod -R 775 test.git

          # chmod g+s -R test.git

步骤四、服务器代码自动更新

    当你趟过了免密这个奇坑,恭喜跳进了另一个坑,线上代码自动更新!想想你辛辛苦苦搭建git仓库是为了什么?就为了上传下拉代码?不!我希望我本地修改的代码传到仓库后,线上的代码就能立即更新!

    其实这就是Git Hooks自动部署,步骤如下:

    1、进入刚刚我们创建过的仓库test.git目录下,再进入hooks目录中

         # cd /home/git/test.git/hooks

         # touch post-receive  创建名叫post-receive的shell脚本文件

    2、shell编写

         # vim post-reveive  打开编辑该脚本

            #!/bin/sh 

            unset GIT_DIR

            DeployPath="/web/test"

            cd $DeployPath

            git pull

            exit 0

    其中/web/test是你的线上项目的路径

    3、最后一定要给你的项目目录比如/web切换权限

        # chown -R git:git /web/

可能的错误处理

    你可能遇到许多错误提示,请耐心的去寻找答案,这里我只介绍一个使用查询日志调试错误的方法。ssh验证相关的日志可以在/var/log/secure里去查找,相关命令可以是cat也可以是tail,vim也可以。/var/log/目录下有系统里的各种日志!

关于项目开发代码管理的方案

    在真实的开发环境中我们不应该使用线上线下代码同步的方式,这样的方式适合测试或者UAT服务器。所以我们应该使用UAT服务器作为git仓库与开发客户端同步,线上服务器只pull操作。

上一篇下一篇

猜你喜欢

热点阅读