PHP實現git部署

背景

小公司上班,原先的系統還在使用傳統的ftp上傳部署,部署太麻煩,也很差管控線上的代碼.在網上找了下git部署的教程.一路跟着下來,碰到了很多坑.如今把整個過程發出來,但願能夠幫助到你們.php

帳號相關

useradd -m git    //新增git帳號

ssh-keygen        //密鑰生成,若是已經有了可略過

su git       //切換至git帳號

cd ~   //切換到git帳號根目錄

mkdir .ssh    //建立.ssh目錄

cat /密鑰存放目錄/xxx.pub >> ~/.ssh/authorized_keys     //設置公鑰

此處必定要注意權限問題,不然密鑰登入沒法生效,各文件夾對應的權限以下nginx

.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://git@IP地址:/站點目錄    //添加遠程倉庫
git push 遠程倉庫名稱  master

特別注意

用戶上傳的圖片目錄必定要作好文件忽視動做,不然有可能在清除未追蹤文件時將此部分文件刪除,形成災難性結果laravel

相關文章
相關標籤/搜索