雖然一直用git做版本管理,以前也用過git項目的部署,但都沒有堅持這種習慣,最近決定再學習下,下面這篇文章主要給大家介紹了關於PHP實現git部署的方法教程,文中通過範例程式碼介紹的非常詳細,需要的朋友可以參考下,希望能協助到大家。
背景
在小網站上,直接用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檔案夾許可權 700id_rsa 600id_rsa.pub 644authorized_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_DIRcd ..git checkout -f# 執行PHP鉤子邏輯/usr/bin/curl http(s)://網域名稱/鉤子文字位置/hook.php# 如果有使用laravel隊列則需要重啟隊列進程,讓新代碼生效# sudo php artisan queue:restartexit 0
hook.php內容
<?php/** * git上傳執行鉤子 *///TODO 安全限制//TODO 其他鉤子行為// 清除opcacheif (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
特別注意
使用者上傳的圖片目錄一定要做好檔案忽視動作,否則有可能在清除未追蹤檔案時將此部分檔案刪除,造成災難性結果