傳統部署方案
windows 遠程桌面
FTP/SFTP
登錄服務器pull github代碼
Phing(PHP專業部署工具)
git 自動部署流程圖
![]() |
服務器端准備工作:
0. 這些工作都在root或有管理權限的帳號下進行,下面以root為用戶,切換到其他用戶的時候會提示
1. 確保安裝了git
2. 為了安全起見,新建一個專門用於代碼部署的無特權用戶
useradd -m deployuser
passwd deployuser #設置該用戶的密碼,也可根據喜好配置成免密碼登陸
3. 新建一個目錄作為要部署代碼的根目錄,如:
mkdir /var/www/html/deploy
4. 將這個目錄的屬主和屬組都改為上面新建的用戶deployuser
cd /var/www/html
chown deployuser:deployuser deploy
5. 切換到部署代碼的專用用戶
su deployuser
6. 進入項目根目錄,初始化為git倉庫
cd deploy
git init
7. 【重要】讓倉庫接受代碼提交
git config receive.denyCurrentBranch ignore
[可選] git config core.worktree ~/www
[可選] git config --bool receive.denyNonFastForwards false #禁止強制推送
至此,一個空的git倉庫就在服務器上建好了,倉庫的地址為:
ssh://deployuser@ipaddress/var/www/html/deploy/.git
本地倉庫准備工作:
1. 通過 git clone 或 git pull 從 github 倉庫上將代碼獲取到本地
2. 將服務器添加到遠程倉庫列表,使用名字來區分不同的服務器,如測試服務器可以叫做testing
git remote add testing ssh://deployuser@ipaddress/var/www/html/deploy/.git
3. 將本地代碼提交到測試服務器上面
git push testing master
回到服務器端:
1. 更新服務端 git 倉庫狀態並檢出文件
cd /var/www/html/deploy
git update-server-info
git checkout -f
OR:
git checkout branch_name # 如果push的不是master分支
2. 檢查是不是將文件更新進來了
3. 設置服務器端更新鈎子 post-update
cd .git/hooks
新建 post-receive 或將 post-receive.sample 重命名為 post-receive
touch post-receive
OR:
mv post-receive.sample post-receive
vim post-receive
將如下內容復制到文件中
#!/bin/sh
unset GIT_DIR
cd ..
git checkout -f
注: 第3步的操作將post-receive 替換為 post-update也可以, 不過需要先將post-update中的exec git update-server-info這一行刪掉
后續代碼的更新:
1. github 有更新的時候 pull 更新本地部署倉庫
2. 然后本地先 push 到測試服務器進行測試
3. 測試通過之后 push 到正式服務器進行上線
4. 代碼的回滾:
*服務器端回滾:推薦 git reset --hard HEAD^
本地倉庫回滾: 無需登陸服務器即可實現代碼回滾,git reset HEAD^ 保留代碼回滾,然后使用 git push remote_name local_branch_name -f 強制推送
使用過程中需要注意的問題:
1. 需要約定好 git 不能更新的操作要怎么處理,比如新增數據庫的字段,新安裝必要的擴...