使用git自動部署簡單網站

  • 2019 年 12 月 4 日
  • 筆記

本文作者:IMWeb yangchunwen 原文出處:IMWeb社區 未經同意,禁止轉載

要做什麼

假設你有一個部落格,有一台網站伺服器(或者很多台作負載均衡的伺服器),當你的部落格要升級時,你可能要在你自己的電腦上寫好程式碼(可能包括本地調試好),然後提交到git(或svn),然後在每個伺服器中checkout一份程式碼並重啟伺服器應用……

這裡要介紹的是一種直接在本地提交程式碼,即可自動完成伺服器部署的方法。

怎麼做

假設你有網站主機(後面統稱線上機):

user:user  host:1.2.3.4  password:passwd

並且確保你的本地開發機器(後面統稱開發機)與線上機均已安裝好Git(不是Github)

1. 線上機增加三個文件夾:

mkdir ~/git-directory.git  mkdir ~/deploy-directory-1  mkdir ~/deploy-directory-2

其中git-directory.git作為程式碼倉庫,即開發機的程式碼統一提交到這裡存放.

deploy-directory-1和deploy-directory-2是開發機上的部署目錄,比如測試目錄和正式線上內容目錄

2. 線上機git倉庫初始化:

cd ~/test.git  git init --bare  cd hook  cp post-receive.sample post-receive

3. 在post-receive文件中寫入以下內容:

#!/bin/sh  #  DIR_ONE=/home/user/deploy-directory-1  DIR_TWO=/home/user/deploy-directory-2  #  git --work-tree=${DIR_ONE} clean -fd  git --work-tree=${DIR_ONE} checkout --force  #  git --work-tree=${DIR_TWO} clean -fd  git --work-tree=${DIR_TWO} checkout --force

4. 本地機增加文件夾並克隆遠程git倉庫:

mkdir whatever  cd whatever  git init  git remote add origin [email protected]:/home/git/test.git

註:此處會要求輸入線上機器的登陸密碼(passwd)

最終效果

本地機目錄可以自由增刪文件,並提交到線上機git倉庫.

例如:

touch README  git add README  git commit -m 'first blood' README  git push origin master

此步操作完成後,查看線上機中第一步建立的那幾個目錄(git-directory.git、deploy-directory-1、deploy-directory-2),是不是多了一個你剛剛在本地創建的文件README?

還有一步

如果你的網站比較簡單,到這一步就已經是完事了。

試想上面的例子,假如你的網站是靜態網站,在deploy-directory-1、deploy-directory-2這兩個文件夾中部署了同樣的網站,一個用於測試,一個是真實環境,這樣你就已經可以直接提交文件就完成上線了,是不是挺爽的?

事實上,通過這種方式,實際上git-directory.git就成了你的一個git伺服器,上面第三步編輯的post-receive就是一個鉤子(hook)文件,實際上就是一個可執行的shell腳本,當你在你的本地提交程式碼(git push)時,git伺服器收到你的文件提交同時會觸發這個鉤子的動作,也就是執行這個shell腳本。說到這裡,接下來這個shell腳本能做什麼,重啟伺服器?觸發構建?把文件部署到別的機器上……盡情地發揮你的想像吧!