2011-03-25 65 views
7

在我的服務器上,我有兩個用戶,www-data(由nginx使用)和gitgit用戶擁有一個包含我的網站代碼的存儲庫,並且www-data用戶擁有該存儲庫的副本(用作nginx的webroot)。我想成立一​​個工作流程,從而推到git的倉庫引起www-data的資料庫進行更新,從而更新我的網站。基於Git的網站部署工作流程

爲這些存儲庫設置掛鉤的正確方法是什麼?(也考慮到這兩個用戶的特權和權限)?

+0

將運行服務器的用戶帳戶擁有所有公共內容是否真的是一個好主意?如果服務器或你的代碼開發,該漏洞可能會修改持久化數據,而不是僅僅訪問塗寫數據庫連接... – sarnold 2011-03-26 01:06:31

+0

那麼我應該做的'git'擁有的公開內容,並使其可讀大家?這也可以簡化這個問題的權限問題...... – Chetan 2011-03-26 01:11:07

+0

如果你滿足於它作爲一個解決方案,那麼是的,它會幫你找到一種新的方法來從'git'推送到'www-data '回購。 :)你更喜歡在服務器上有兩個git倉庫嗎?另一種選擇是設置文件的組所有權是服務器的羣體之一,並允許通讀組權限訪問。 – sarnold 2011-03-26 01:18:30

回答

5

刪除由www-data擁有的資源庫,並按照建立由git擁有的倉庫後收到鉤上這個webpage的解決方案。

2

我最終制作了git用戶擁有的公共內容,並且所有人都可以閱讀。於是,我做了以下設置鉤子:

假設庫稱爲mysite

  1. 創建一個分離的工作樹將作爲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 
    
  2. 添加後收到鉤,將更新網站,併爲它

    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 
    

參考:
http://www.deanoj.co.uk/programming/git/using-git-and-a-post-receive-hook-script-for-auto-deployment/


更新:這裏是一個better solution

注意:這個howto的早期版本依賴於將git config變量core.worktree設置爲目標目錄,core.bare爲false,並且receive.denycurrentbranch忽略。但不需要這些變化,如果你使用GIT_WORK_TREE(當我第一次寫的HOWTO,沒有工作),以及遠程倉庫可以保持裸露。

+0

確認爲什麼人們不斷尋找所有這些討厭的解決方案的人在博客,而不是正確的人的。 – Arrowmaster 2011-03-26 02:37:29

+1

@Arrowmaster:謝謝,簡單越好。 – Chetan 2011-03-26 02:42:23