PHP實現git部署的方法,可以學學!
阿新 • • 發佈:2018-11-12
https://mp.weixin.qq.com/s/QFpKu8oKoxOEA1BmT7pNhg
在小站點上,直接用git來部署php程式碼相當方便,你的遠端站點以及本地版本庫都有一個版本控制,追蹤問題或者回滾是很輕鬆的事情。
因為在小公司上班,原先的系統還在使用傳統的ftp上傳部署,部署太麻煩,也不好管控線上的程式碼。在網上找了下git部署的教程,一路跟著下來碰到了不少坑,現在把整個過程發出來,希望可以幫助到大家,下面話不多說了,來一起看看詳細的介紹吧。
賬號相關
useradd -m git //新增git賬號 ssh-keygen //金鑰生成,如果已經有了可略過 su git //切換至git賬號 cd ~ //切換到git賬號根目錄 mkdir .ssh //建立.ssh目錄 cat /金鑰存放目錄/xxx.pub >> ~/.ssh/authorized_keys //設定公鑰
此處一定要注意許可權問題,否則金鑰登入無法生效,各資料夾對應的許可權如下
.ssh資料夾許可權 700 id_rsa 600 id_rsa.pub 644 authorized_keys 600
檔案許可權設定
將git與站點執行nginx或者apache的使用者放同一使用者組,如www
vim /etc/passwd 找到git賬號與www賬號,將git賬號的組標識變更為與www組標識一致
站點所屬者設定為git,使用者組設定為 www //假設nginx與git 都歸屬於www使用者組
目錄許可權設定775 ,檔案許可權設定為664
倉庫程式碼
伺服器端
cd 站點目錄 git init //初始化目錄
git配置
git config receive.denyCurrentBranch ignore //設定倉庫接受程式碼提交
設定sudo免密
vim /etc/sudoers # Defaults secure_path 中若沒有你要的命令,要注意新增 # php的命令預設需要在 secure_path最後面新增 :/usr/local/php/bin"在 root ALL=(ALL) ALL 下面一行新增 git ALL=(ALL) NOPASSWD:ALL # 儲存退出 ,這樣針對laravel 要重啟佇列命令就可以使用了. # sudo php artisan queue:restart
鉤子設定
cd .git/hooks //切換至站點鉤子目錄 touch post-receive //建立接收提交時鉤子 // 鉤子檔案內容如下: #!/bin/sh # 設定賬號建立檔案的預設許可權 umask 002 unset GIT_DIR cd .. git checkout -f # 執行PHP鉤子邏輯 /usr/bin/curl http(s)://域名/鉤子文字位置/hook.php # 如果有使用laravel佇列則需要重啟佇列程序,讓新程式碼生效 # sudo php artisan queue:restart exit 0
hook.php內容
<?php /** * git上傳執行鉤子 */ //TODO 安全限制 //TODO 其他鉤子行為 // 清除opcache if (version_compare(PHP_VERSION, '5.5.0', '>=')) { opcache_reset(); }
增加鉤子可執行許可權
chmod a+x .git/hooks/post-receive
原生代碼
git remote add 遠端倉庫名稱 ssh://[email protected]地址:/站點目錄 //新增遠端倉庫 git push 遠端倉庫名稱 master
特別注意
使用者上傳的圖片目錄一定要做好檔案忽視動作,否則有可能在清除未追蹤檔案時將此部分檔案刪除,造成災難性結果