使用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腳本能做什麼,重啟伺服器?觸發構建?把文件部署到別的機器上……盡情地發揮你的想像吧!