使用 Git 實現 Laravel 專案的自動化部署

Jouzeyu發表於2019-09-07

簡介

在我們的開發過程中,我們不可避免的會用到版本控制。當然,這也致使你對GitSVN有所瞭解。兩者都是出色的版本控制工具,我個人比較習慣用Git,當然這可能和個人習慣有關。不知道大家一開始是怎麼使用 git 進行開發的,反正我個人是先將程式碼提交到 github 倉庫,然後用SSH登入到伺服器,然後進行克隆或者版本更新。聽起來就很麻煩,當然實際操作中也很麻煩,那麼有什麼可以 “一勞永逸“ 的辦法呢?請往下看!

簡單使用

Git 鉤子

什麼是git鉤子呢?官方解釋有些長,簡單來說就是一個在特定環境下觸發的指令碼。這個解釋可能不太準確,但是我認為這樣更容易理解一些,想了解更多的,可以去Git官網檢視,下面我們就用鉤子實現自動化部署。

第一步:建立git使用者

登入我們的伺服器,這裡預設你已經安裝好了git。建立一個git使用者:

# 建立一個名叫jouzeyu的使用者
adduser jouzeyu

第二步:給git使用者新增許可權

#在根目錄下的 home 資料夾下建立一個git資料夾
mkdir /home/git 
#切換到建立好的git資料夾
cd /home/git
#建立 .ssh資料夾,裡面主要用來放公鑰
mkdir .ssh
#切換到.ssh資料夾並建立authorized_keys檔案
cd .ssh
touch authorized_keys

第三步:配置git並獲取公鑰

#在本地配置使用者名稱和郵箱,我的使用者名稱預設為jouzeyu
git config --global user.name "jouzeyu"
git config --global user.email "your email"

注意:如果用了 --global 選項,那麼以後你所有的專案都會使用這裡配置的使用者資訊。如果要在某個特定的專案中使用其他名字或郵箱,只需在該專案下執行:

git config user.name "xxx"
git config user.email "xxx"

OK,接下來我們獲取公鑰,請先檢視你的使用者下的.ssh資料夾中是否之前就含有公鑰和私鑰,我們需要尋找一對以 id_dsaid_rsa 命名的檔案,其中一個帶有 .pub 副檔名。 .pub 檔案是你的公鑰,另一個則是私鑰。如果沒有請執行ssh-keygen
使用cat ~/.ssh/id_rsa.pub命令可以獲取公鑰,複製它,使用vi或者vim命令把它貼上到我們之前建立的authorized_keys檔案中,使用:wq儲存。

第四步:初始化倉庫

建立一個存放git倉庫的資料夾:

mkdir /www/wwwroot/git
cd /www/wwwroot/git

初始化倉庫:

#初始化一個裸倉庫(強烈建議)
git init --bare website.git
#配置倉庫的許可權,讓我們之前建立好的git使用者jouzeyu能讀寫
chown -R git:git website.git

這裡必須注意,如果不給許可權,後面的git pull將會報錯,原因是沒有許可權寫入。關於裸倉庫和普通倉庫的區別簡單來說就是裸倉庫看不到專案檔案,普通倉庫和你的專案目錄一樣,只是多了一個.git資料夾。

第五步:生成專案倉庫

這個也是在伺服器上進行的,同時說明一下/www/wwwroot/是我的環境的根目錄。

#建立我伺服器上的專案目錄test
mkdir /www/wwwroot/test
#克隆倉庫
git clone /www/wwwroot/git/website.git
#設定許可權
chown -R git website

注意:一定要注意我的路徑,git倉庫是/www/wwwroot/git,專案倉庫是/www/wwwroot/test

第六步:克隆到本地

# 通過ip地址從配置好的線上倉庫拉取下來
git clone git@47.97.121.XXX:/www/wwwroot/git/website.git
# 如果有配置域名的話也可以通過域名拉取
git clone git@www.XXX.XXX:/www/wwwroot/git/website.git

因為公鑰的原因,這裡是不需要密碼的,如果成功你的電腦上會出現一個website的資料夾,如果報錯請檢查後再進行下面的操作。

第七步:測試上傳(git pull)

# 開啟剛才克隆下來的本地倉庫
cd website
# 建立README.md檔案
touch README.md
git add .
git commit -m"建立README.md檔案"
git push

不出意外已經正常上傳了,如果報錯請檢查許可權,上文提到過,如果還不行可以在下方評論。

第八步:新增鉤子

終於到重頭戲了,寫的比較細,所以比較麻煩一些。回到我們線上的伺服器,下面的是線上上操作的:

#切換到這個目錄
cd /www/wwwroot/git/website.git/hooks
# 生成post-receive檔案
touch post-receive
# 使用vim編輯
vim post-receive

post-receive檔案裡面貼上:

#!/bin/sh
# 列印輸出
echo '======上傳程式碼到伺服器======'
# 開啟線上專案資料夾
cd /www/wwwroot/test/website
# 這個很重要,如果不取消的話將不能在cd的路徑上進行git操作
unset GIT_DIR
git pull origin master
# 自動編譯vue專案,如有需要請去掉前面的#號
# npm run build
# 自動更新composer(我暫時沒試過)
# composer update
echo $(date) >> hook.log
echo '======程式碼更新完成======'

儲存後給post-receive檔案加上執行許可權:

chmod +x post-receive

最後一步

在本地修改部分內容,然後提交推送git pull,可以看到我們已經實現了自動化部署。

使用Git實現Laravel專案的自動化部署

相關文章