在我的服務器上,我有兩個用戶,www-data
(由nginx使用)和git
。 git
用戶擁有一個包含我的網站代碼的存儲庫,並且www-data
用戶擁有該存儲庫的副本(用作nginx的webroot)。我想成立一個工作流程,從而推到git
的倉庫引起www-data
的資料庫進行更新,從而更新我的網站。基於Git的網站部署工作流程
爲這些存儲庫設置掛鉤的正確方法是什麼?(也考慮到這兩個用戶的特權和權限)?
在我的服務器上,我有兩個用戶,www-data
(由nginx使用)和git
。 git
用戶擁有一個包含我的網站代碼的存儲庫,並且www-data
用戶擁有該存儲庫的副本(用作nginx的webroot)。我想成立一個工作流程,從而推到git
的倉庫引起www-data
的資料庫進行更新,從而更新我的網站。基於Git的網站部署工作流程
爲這些存儲庫設置掛鉤的正確方法是什麼?(也考慮到這兩個用戶的特權和權限)?
刪除由www-data
擁有的資源庫,並按照建立由git
擁有的倉庫後收到鉤上這個webpage的解決方案。
我最終制作了git
用戶擁有的公共內容,並且所有人都可以閱讀。於是,我做了以下設置鉤子:
假設庫稱爲mysite
:
創建一個分離的工作樹將作爲Web根目錄(如用戶git
)
mkdir /var/www/mysite
cd /path/to/repository/mysite.git
git config core.worktree /var/www/mysite
git config core.bare false
git config receive.denycurrentbranch ignore
添加後收到鉤,將更新網站,併爲它
touch hooks/post-receive
chmod +x hooks/post-receive
vim hooks/post-receive
設置正確的權限 的後收到腳本:
#!/bin/sh
git checkout -f
chmod -R o+rX /var/www/mysite
更新:這裏是一個better solution。
注意:這個howto的早期版本依賴於將git config變量core.worktree設置爲目標目錄,core.bare爲false,並且receive.denycurrentbranch忽略。但不需要這些變化,如果你使用GIT_WORK_TREE(當我第一次寫的HOWTO,沒有工作),以及遠程倉庫可以保持裸露。
確認爲什麼人們不斷尋找所有這些討厭的解決方案的人在博客,而不是正確的人的。 – Arrowmaster 2011-03-26 02:37:29
@Arrowmaster:謝謝,簡單越好。 – Chetan 2011-03-26 02:42:23
將運行服務器的用戶帳戶擁有所有公共內容是否真的是一個好主意?如果服務器或你的代碼開發,該漏洞可能會修改持久化數據,而不是僅僅訪問塗寫數據庫連接... – sarnold 2011-03-26 01:06:31
那麼我應該做的'git'擁有的公開內容,並使其可讀大家?這也可以簡化這個問題的權限問題...... – Chetan 2011-03-26 01:11:07
如果你滿足於它作爲一個解決方案,那麼是的,它會幫你找到一種新的方法來從'git'推送到'www-data '回購。 :)你更喜歡在服務器上有兩個git倉庫嗎?另一種選擇是設置文件的組所有權是服務器的羣體之一,並允許通讀組權限訪問。 – sarnold 2011-03-26 01:18:30