[轉] 使用git自動部署簡單網站


要做什么

假設你有一個博客,有一台網站服務器(或者很多台作負載均衡的服務器),當你的博客要升級時,你可能要在你自己的電腦上寫好代碼(可能包括本地調試好),然后提交到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 user@1.2.3.4:/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腳本能做什么,重 啟服務器?觸發構建?把文件部署到別的機器上……盡情地發揮你的想象吧!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM