搭建Git服務器並使用HOOK自動部署

GitHub 的服務器同步的時候太慢了也有可能會完全訪問不了,爲了避免影響平常工做開發,決定在公司服務器上搭建一個 Git 服務端,並記錄下來全過程。
本文服務端環境爲 CentOS7(3.10.0-957.21.3.el7.x86_64)git

安裝 Git 服務端

如下命令在服務器裏運行github

查看 Git 版本

yum info git
 # git version 1.8.3.1
複製代碼

能夠看到,到目前爲止(2020年01月20日),yumGit 版本才 1.8.3.1,而最新的已經 2.9.2 了。shell

更新 Git

# 依賴庫安裝
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel
yum install gcc perl-ExtUtils-MakeMaker
 # 卸載低版本的 Git
yum remove git
 # 下載新版的 Git 源碼包(/usr/local/git)
cd /usr/local/git
wget https://github.com/git/git/archive/v2.9.2.tar.gz
tar -xzvf v2.9.2.tar.gz
複製代碼

執行如下命令進行編譯和安裝vim

# 若是有下載最新版,請按照最新版文件夾名
cd git-2.9.2

make prefix=/usr/local/git all
make prefix=/usr/local/git install
複製代碼

添加到環境變量安全

vim /etc/profile
複製代碼

添加上這一條 export PATH="/usr/local/git/bin:$PATH"bash

# 使環境變量當即生效
source /etc/profile
 # 查看版本號
git --version
複製代碼

Git 設爲默認路徑,避免克隆的時候報錯服務器

ln -s /usr/local/git/bin/git-upload-pack /usr/bin/git-upload-pack 
ln -s /usr/local/git/bin/git-receive-pack /usr/bin/git-receive-pack 
複製代碼

建立 Git 用戶

useradd git
password *******
複製代碼

禁止 Git 用戶使用 Shell 登陸系統(爲了服務器安全)ssh

vi /etc/passwd
複製代碼

在最後一行將 git 用戶修改爲一下配置並保存curl

git:x:1000:1000::/home/git:/usr/bin/git-shell
複製代碼

配置遠程倉庫

建立一個空倉庫

cd /home
mkdir git
cd git
git init --bare blog.git
複製代碼

執行完畢後會建立一個空倉庫,倉庫的路徑爲:/home/git/blog.gitpost

爲 Git 用戶賦予倉庫的文件權限

chown -R git:git /home/git/blog.git
複製代碼

打開 RSA 認證

編輯 /etc/ssh/sshd_config 文件

vi /etc/ssh/sshd_config
複製代碼

找到如下三項,並關閉註釋。若是沒找到相應項,直接補全就好。
注:vim 模式下向下搜索 /搜索的內容,向上搜索 ?搜索的內容

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
複製代碼

保存完畢後重啓 sshd 服務

/etc/rc.d/init.d/sshd restart
 # 若是上面的命令出現錯誤能夠嘗試使用下面的
service sshd restart
複製代碼

打完收工!Git 的服務端配置完畢。

客戶端

如下命令在客戶端裏運行

建立 Git 的使用者

git config --global user.name "NanSHanJi"
git config --global user.email "coder.htt@gmail.com"
複製代碼

建立和服務器通訊的祕鑰

ssh-keygen -t rsa -C "coder.htt@gmail.com"
複製代碼

一路回車下去就行了,完成後會輸出祕鑰的路徑,進入祕鑰的文件夾

祕鑰文件目錄

id_rsa 是祕鑰,打死也不要告訴別人, id_rsa.pub是公鑰,能夠公開。

將公鑰添加到服務器中

方法一

  1. 直接打開文件 id_rsa.pub 複製裏面的內容。
  2. 而後粘貼到服務器 ~/.ssh/authorized_keys 文件裏。

方法二

ssh git@172.168.162.40 'cat >> .ssh/authorized_keys' < 你的文件路徑/id_rsa.pub
複製代碼

克隆遠程倉庫到本地

如下命令在客戶端裏運行

# 找一個文件夾,執行如下命令
# x.x.x.x 是服務器 ip 地址
git clone git@x.x.x.x:/home/git/blog.git
複製代碼

push/pull 項目

# 在本地的 blog 文件夾中隨便弄點文件進去
git add .
git commit -m 初始化項目
git push origin master
複製代碼

如下命令在服務端裏運行
進入服務器查看遠程倉庫 commit 記錄,若是看到有記錄就算成功了

cd /home/git/blog.git
git log
複製代碼

注:若是沒有成功,能夠檢查下是否防火牆沒有開放 22 端口,或者 SSH 不在 22 端口上,若是不在 22 端口上,克隆的時候須要改下地址

git clone ssh://git@x.x.x.x:端口/home/git/LearnProject.git

Git HOOK 自動部署代碼

在服務器 /home/git/blog.git 文件夾裏是不能直接看到我門提交的代碼
因此須要咱們把項目 clone 到一個地方

cd /data/wwwwroot
git clone /home/git/blog.git
複製代碼

後面的自動部署都會基於這個文件夾

設置 HOOK

倉庫每次被 push 的時候會觸發這個 post-receive 這個文件裏的腳本內容

cd /home/git/blog.git/hooks

cp post-update.sample post-receive
vim post-receive
複製代碼

post-receive 裏面輸入代碼自動部署的操做流程

unset GIT_DIR
cd /var/www/blog
git pull --allow-unrelated-histories
複製代碼

第一行代碼相當重要 Git 的 hooks 裏面默認有一些環境變量,會致使不管在哪一個語句以後執行git命令都會有一個默認的環境路徑,因此須要 unset 掉默認的 GIT 環境變量。

到此,整個搭建流程都完成了

做者:@NanShanJi

相關文章
相關標籤/搜索