2011-03-25 9 views
7

मेरे सर्वर पर, मेरे पास दो उपयोगकर्ता हैं, www-data (जिसका उपयोग nginx द्वारा किया जाता है) और gitgit उपयोगकर्ता का एक भंडार है जिसमें मेरी वेबसाइट का कोड है, और www-data उपयोगकर्ता उस भंडार का एक क्लोन है (जो nginx के लिए webroot के रूप में कार्य करता है)। मैं वर्कफ़्लो स्थापित करना चाहता हूं जैसे कि git के भंडार को www-data के भंडार को अद्यतन करने के लिए, इस प्रकार मेरी वेबसाइट अपडेट करने का कारण बनता है।गिट-आधारित वेबसाइट परिनियोजन वर्कफ़्लो

इन भंडारों के लिए हुक सेट करने का सही तरीका क्या है (जो इन दो उपयोगकर्ताओं के विशेषाधिकारों और अनुमतियों को भी ध्यान में रखता है)?

+0

क्या यह वास्तव में एक अच्छा विचार है कि उपयोगकर्ता द्वारा चलाए गए उपयोगकर्ता खाते के स्वामित्व वाली आपकी सभी सार्वजनिक सामग्री हो? यदि सर्वर या आपके कोड का शोषण किया जाता है, तो शोषण आपके डेटाबेस कनेक्शन पर स्क्रिबल करने के बजाय लगातार डेटा को संशोधित कर सकता है ... – sarnold

+0

फिर मुझे सार्वजनिक सामग्री को 'गिट' के स्वामित्व में बनाना चाहिए, और इसे हर किसी के द्वारा पठनीय बनाना चाहिए ? इससे इस प्रश्न में अनुमति के मुद्दों को भी सरल बनाया जाएगा ... – Chetan

+0

_If_ आप समाधान के रूप में इसके साथ संतुष्ट हैं, फिर हां, यह आपको 'गिट' से' www-data तक धक्का देने का एक नया तरीका खोजने की परेशानी बचाएगा 'repos। :) क्या आप सर्वर पर दो गिट रेपो पसंद करते हैं? एक अन्य विकल्प फाइलों के समूह स्वामित्व को सर्वर के समूहों में से एक होने के लिए सेट करना है, और समूह विशेषाधिकारों के माध्यम से पढ़ने की अनुमति देना है। – sarnold

उत्तर

5

www-data के स्वामित्व भंडार निकालें और git के स्वामित्व भंडार में एक के बाद प्राप्त हुक की स्थापना के लिए इस webpage पर समाधान का पालन करें।

2

मैंने git उपयोगकर्ता के स्वामित्व वाली सार्वजनिक सामग्री को समाप्त कर दिया, और सभी द्वारा पठनीय।

भंडार मान लिया जाये कि mysite कहा जाता है::

  1. एक अलग काम के पेड़ कि webroot रूप में कार्य करेगा बनाएं

    (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 है।

नोट: इस के पहले संस्करण गिट कॉन्फ़िगरेशन चर को कोर.वर्कट्री को लक्षित निर्देशिका, कोर.बारे को गलत करने के लिए निर्भर करते हैं, और get.denycurrentbranch को अनदेखा करने के लिए निर्भर करते हैं। लेकिन यदि आप GIT_WORK_TREE का उपयोग करते हैं, तो इन परिवर्तनों की आवश्यकता नहीं है (जो मैंने पहली बार कैसे लिखा था) काम नहीं किया था, और रिमोट रिपोजिटरी बेयर रह सकती है।

+0

एएके लोग इन सभी ग़लत समाधानों को लोगों को उचित लोगों के बजाय ब्लॉग क्यों ढूंढते रहते हैं। – Arrowmaster

+1

@Arrowmaster: धन्यवाद, सरल हमेशा बेहतर होता है। – Chetan

संबंधित मुद्दे