前幾天把 Hexo 部落格部署到了阿里雲伺服器,但發現每次推送文章都需要去伺服器同步程式碼。最終尋找到 git hook 來解決了這個問題
更新於 2017.11.14
首發於夏味的部落格: xiaweiss.com
1. 說明
在伺服器,要建一個相當於 github 存放功能的裸倉庫來儲存程式碼。 之所以叫裸倉庫,是因為這個倉庫只是為了存程式碼用的,沒有工作目錄,不可以在它裡面檢視改寫程式碼。
在網站資料夾下,會有一個工作目錄來存放程式碼,這個目錄的程式碼可以像clone github程式碼庫一樣,clone 伺服器裡的裸倉庫。
當伺服器裡裸倉庫收到提交進來的程式碼後,會觸發 git hook 的 post-receive 事件,配置好的程式就可以自動去工作目錄的倉庫執行 git pull,伺服器程式碼就自動更新了
2. 配置步驟:
遠端連線伺服器,登入 root 賬號
2.1 設定使用者
新增使用者xiawei,這裡可以寫你的名字
useradd xiawei
複製程式碼
修改使用者密碼
passwd 你的新密碼
複製程式碼
給新增 sudo 許可權 通過修改 /etc/sudoers
必須使用命令
visudo
複製程式碼
按 i 鍵進入, 找到 root ALL=(ALL) ALL 然後下面新增 xiawei ALL = (ALL) ALL
root ALL=(ALL) ALL
xiawei ALL = (ALL) ALL
複製程式碼
2.2 安裝 git
檢視是否安裝 git
git --version
複製程式碼
如果沒有看到版本號,則繼續安裝 git
yum install git
複製程式碼
設定 git 使用者名稱郵箱
git config --global user.name "yourname"
git config --global user.email "your_email@example.com"
複製程式碼
2.3 建立git裸倉庫
假設網站的在 /www/blog/ 目錄下,建立裸倉庫
cd /www
sudo git init --bare blog.git
複製程式碼
更改所屬使用者和使用者組,獲得許可權
sudo chown -R xiawei:xiawei blog.git
sudo chown -R xiawei:xiawei blog
複製程式碼
2.4 建立工作目錄 git 倉庫
cd /www/blog
git clone /www/blog.git
複製程式碼
如果此時 blog 資料夾不是空的,會不能 clone 按先定義倉庫,再設定遠端倉庫地址即可
cd /www/blog
git init
git remote add origin /www/blog.git
複製程式碼
注意這時要刪除掉 index.html 等和本地待提交程式碼重複的檔案
rm index.html
複製程式碼
2.5 設定 git hooks
cd /www/xiaweiss.git/hooks/
vim post-receive
複製程式碼
按 i 鍵,將下面這幾行程式碼貼上進去
#!/bin/sh
unset GIT_DIR
cd /www/blog
git pull origin master
複製程式碼
賦予 post-receive 檔案可執行許可權
chmod +x post-receive
複製程式碼
2.6 本地 配置
最後修改 Hexo 配置檔案裡 deploy項,每次釋出程式碼會提交到這兩個倉庫
deploy:
- type: git
repo: git@github.com:xiaweiss/xiaweiss.github.io.git
- type: git
repo: xiawei@xiaweiss.com:/www/blog.git
複製程式碼
如果是本地的其他專案,可以直接
git clone xiawei@xiaweiss.com:/www/blog.git
複製程式碼
修改程式碼後,提交即可