# Git से साइट डिप्लॉय करना

Source: https://support.kapsulehost.com/hi-in/site-git-deploy

Git तैनाती एक रिपॉजिटरी को किसी साइट से जोड़ती है, जिससे आपकी चुनी हुई ब्रांच पर हर पुश कोड को क्लोन करता है, आपका बिल्ड चलाता है, और परिणाम को प्रकाशित करता है। यह गाइड शुरुआती कनेक्शन, सेटअप पूरा करने वाले दो रिपॉजिटरी-साइड चरणों, तैनाती इतिहास पढ़ने, और उस buildpack डिटेक्शन को शामिल करता है जो तय करता है कि Node.js ऐप कैसे बनाया जाता है।

## Git तैनाती कहाँ मिलती है

**वेबसाइटें** खोलें, साइट पर क्लिक करें, साइट के बाईं मेनू में **Environment** समूह खोलें, और **Git तैनाती** चुनें। इसके पास दो संबंधित पेज हैं:

- **तैनातियां**, इस साइट के लिए पूरा तैनाती इतिहास, उसी **Environment** समूह में।
- **Buildpack**, Node.js साइटों पर पहचानी गई बिल्ड रणनीति, **ऐप्स** समूह में।

Git Deploy पेज स्वयं को स्पष्ट रूप से बताता है: एक रिपॉजिटरी कनेक्ट करें और आपकी कॉन्फ़िगर की गई ब्रांच पर हर पुश एक बिल्ड और तैनाती को ट्रिगर करता है।

![KPanel में किसी साइट के लिए Git Deploy पेज, जहाँ एक रिपॉजिटरी कनेक्ट है](https://support.kapsulehost.com/help/screenshots/site-git-deploy.4716f1a9.webp)

## एक रिपॉजिटरी कनेक्ट करना

1. अपना **Provider** चुनें: GitHub, GitLab या Bitbucket।
2. **रिपॉजिटरी URL** दर्ज करें। SSH वाला रूप ही वह है जो आप चाहते हैं, उदाहरण के लिए `git@github.com:user/repo.git`।
3. तैनात करने के लिए **Branch** सेट करें। यह फ़ील्ड `main` से शुरू होती है।
4. वैकल्पिक रूप से एक **बिल्ड कमांड** सेट करें, उदाहरण के लिए `npm run build`।
5. वैकल्पिक रूप से एक **आउटपुट डायरेक्टरी** सेट करें, उदाहरण के लिए `dist`, `public`, या पहले से बनी हुई रिपॉजिटरी के लिए `.`।
6. **रिपॉ कनेक्ट करें** पर क्लिक करें।

यदि आपकी रिपॉजिटरी पहले से ही तैनात करने योग्य है, जो कि किसी सामान्य PHP या स्टैटिक साइट के लिए आम मामला है, तो बिल्ड कमांड और आउटपुट डायरेक्टरी को खाली छोड़ दें।

### एडवांस्ड स्क्रिप्ट्स

**उन्नत** को विस्तृत करने पर दो अतिरिक्त फ़ील्ड सामने आती हैं:

- **पूर्व-तैनाती स्क्रिप्ट**, जो बिल्ड से पहले चलती है।
- **पश्च-तैनाती स्क्रिप्ट**, जो तैनाती के बाद चलती है।

पश्च-तैनाती हुक का उपयोग उन कामों के लिए करें जो नए कोड के आने के बाद ही होने चाहिए: किसी एप्लिकेशन कैश को साफ़ करना, डेटाबेस माइग्रेशन चलाना, किसी वर्कर को फिर से शुरू करना।

### पुश पर ऑटो-तैनाती

कार्ड के नीचे का टॉगल नियंत्रित करता है कि पुश पर तैनाती हो या नहीं। जब यह चालू होता है, तो कॉन्फ़िगर की गई ब्रांच पर हर पुश एक तैनाती को ट्रिगर करता है। जब यह बंद होता है, तो तैनाती केवल तभी चलती है जब आप इसे **अभी तैनात करें** से मैनुअल रूप से ट्रिगर करते हैं।

> **Tip:** रिपॉजिटरी को डिस्कनेक्ट करने के बजाय, किसी कोड फ्रीज़ या घटना के दौरान ऑटो-तैनाती को बंद कर दें। डिस्कनेक्ट करने से तैनाती कुंजी और वेबहुक सीक्रेट दोनों नष्ट हो जाते हैं, इसलिए बाद में आपको दोनों रिपॉजिटरी-साइड चरणों को फिर से करना होगा।

## अपनी रिपॉजिटरी में सेटअप पूरा करना

KPanel में रिपॉजिटरी को कनेक्ट करना तीन चरणों में से केवल पहला है। जब तक कोई तैनाती नहीं चलती, पेज एक बैनर दिखाता है जिसमें **सेटअप पूरा करें: 2 चरण शेष** लिखा होता है, साथ में वह सब कुछ जिसकी आपको ज़रूरत है।

### चरण 2: तैनाती कुंजी जोड़ें

KapsuleHost को आपकी रिपॉजिटरी को क्लोन करने के लिए रीड एक्सेस चाहिए। बैनर एक सार्वजनिक कुंजी दिखाता है जिसके साथ **कुंजी कॉपी करें** बटन होता है।

इसे अपनी रिपॉजिटरी की डिप्लॉय कीज़ में पेस्ट करें। GitHub के लिए बैनर सीधे सही सेटिंग्स पेज तक जाने का **GitHub में जोड़ें** शॉर्टकट देता है। रीड एक्सेस ही काफ़ी है; राइट एक्सेस न दें।

### चरण 3: वेबहुक जोड़ें

वेबहुक वही है जो KapsuleHost को बताता है कि पुश हुआ है। बैनर आपको तीन मान देता है:

| फ़ील्ड | मान |
|---|---|
| पेलोड URL | `/api/git-deploy/webhook/` पर खत्म होने वाला एक URL, साथ में इस साइट की ID |
| Secret | एक जनरेट किया गया साइनिंग सीक्रेट, जब तक आप आई आइकन पर क्लिक न करें तब तक छिपा रहता है |
| सामग्री प्रकार | `application/json` |

हर एक को अपनी रिपॉजिटरी की वेबहुक सेटिंग्स में कॉपी करें। GitHub के लिए **GitHub में वेबहुक जोड़ें** शॉर्टकट मौजूद है। सामग्री प्रकार को JSON पर सेट करें, न कि फ़ॉर्म-एन्कोडेड डिफ़ॉल्ट पर, वरना पेलोड पार्स नहीं होगा।

> **Warning:** वेबहुक सीक्रेट को पासवर्ड की तरह समझें। इसे रखने वाला कोई भी व्यक्ति, पेलोड URL के साथ, आपकी साइट की तैनाती को ट्रिगर कर सकता है। दोनों मान केवल उन लोगों को दिखाए जाते हैं जो पहले से ही साइट का प्रबंधन कर सकते हैं, और सीक्रेट तब तक आई आइकन के पीछे छिपा रहता है जब तक आप इसे माँगें नहीं।

## हाथ से तैनाती करना

किसी कमिट को पुश किए बिना कॉन्फ़िगर की गई ब्रांच के मौजूदा हेड को बनाने और तैनात करने के लिए Git Deploy पेज पर **अभी तैनात करें** पर क्लिक करें। यह काम करता है चाहे ऑटो-तैनाती चालू हो या नहीं, और यही इसे फ्रीज़ के दौरान सही उपकरण बनाता है: पुश को नज़रअंदाज़ किया जाता है, लेकिन आप फिर भी फिक्स को भेज सकते हैं।

## तैनाती इतिहास पढ़ना

**Environment** खोलें, फिर **तैनातियां**। पेज का शीर्षक **तैनाती इतिहास** है और यह वेबहुक या हाथ से ट्रिगर की गई हर तैनाती को, सबसे नई सबसे पहले, सूचीबद्ध करता है।

हर पंक्ति में होता है:

- एक स्टेटस आइकन और छोटा कमिट SHA, ब्रांच के साथ एक पिल के रूप में।
- कमिट संदेश, या यदि दिखाने के लिए कोई कमिट संदेश न हो तो **मैनुअल तैनाती**।
- लेखक, यह कितनी देर पहले चली, इसमें कितना समय लगा, और इसे किसने ट्रिगर किया।
- एक स्टेटस पिल।

स्टेटस हैं **pending**, **building**, **deploying**, **success** और **failed**। जब तक कुछ भी चल रहा होता है, पेज हर पाँच सेकंड में अपने आप रिफ्रेश होता है और टेबल के नीचे एक **अपने आप रिफ्रेश हो रहा है** नोट दिखाता है, ताकि आप इसे खुला छोड़कर तैनाती को पूरा होते देख सकें।

### जब कोई तैनाती विफल हो जाए

विफल पंक्ति को दाईं ओर एक **Error** बटन मिलता है। पेज छोड़े बिना, कैप्चर किए गए एरर आउटपुट को इनलाइन विस्तृत करने के लिए इस पर क्लिक करें। वह आउटपुट बिल्ड का अपना एरर टेक्स्ट है, इसलिए यह आमतौर पर उस फ़ाइल या कमांड का नाम बताता है जो विफल हुआ।

इसे इस क्रम में सुलझाएँ: एरर पढ़ें, उसी बिल्ड कमांड को स्थानीय रूप से दोहराएँ, ठीक करें, पुश करें। अगर बिल्ड स्थानीय रूप से काम करता है पर यहाँ नहीं, तो अंतर लगभग हमेशा एनवायरनमेंट का होता है, कोई ऐसी निर्भरता जो आपकी मशीन पर ग्लोबल रूप से इंस्टॉल है, या कोई फ़ाइल जो आपकी वर्किंग डायरेक्टरी में है पर कमिट नहीं है।

## Buildpack डिटेक्शन

Node.js साइटों पर, **ऐप्स** समूह में **Buildpack** पेज दिखाता है कि KapsuleHost ने आपके ऐप को बनाने का तरीका कैसे तय किया है। डिटेक्शन आपकी रिपॉजिटरी रूट की फ़ाइलों पर चलता है, और पहला मिलान जीतता है:

| पहचाना गया | ट्रिगर |
|---|---|
| कस्टम buildpack | रूट पर `kapsule.config.yaml` या `kapsule.config.yml` |
| Dockerfile buildpack | रूट पर `Dockerfile` |
| Node.js | `start`, `build` या `dev` स्क्रिप्ट के साथ `package.json` |
| Python | `requirements.txt` या `pyproject.toml` |
| PHP | `composer.json` |
| Static | रूट पर `index.html` |

अगर कुछ भी मेल न खाए, तो पेज ऐसा बताता है और समर्थित ट्रिगर सूचीबद्ध करता है। बिल्ड पर स्पष्ट नियंत्रण लेने के लिए `Dockerfile` या `kapsule.config.yaml` जोड़ें।

### एक बिल्ड चलाना

एक को कतार में लगाने के लिए **Build चलाएँ** पर क्लिक करें। जब कोई रन चल रहा होता है तो पेज हर तीन सेकंड में पोल करता है, और **हाल के builds** टेबल पिछले रन को उनके शुरू होने के समय, प्रकार, स्टेटस, अवधि और परिणामी इमेज संदर्भ के साथ दिखाती है। उसका लॉग टेल देखने के लिए किसी पंक्ति पर क्लिक करें।

एक समय में केवल एक ही बिल्ड चल सकता है। जब एक कतार में या चल रहा हो, तब दूसरे को ट्रिगर करना **एक build पहले से चल रहा है** संदेश के साथ अस्वीकार कर दिया जाता है, जो जानबूझकर किया गया है: एक साथ एक ही आउटपुट लिखते हुए दो बिल्ड से ही आपको आधी-तैनात साइट मिलती है।

## डिस्कनेक्ट करना

**Disconnect** पर क्लिक करें और पुष्टि करें। पुष्टि इसके प्रभाव के बारे में स्पष्ट होती है: Git तैनाती कॉन्फ़िगरेशन और तैनाती कुंजी हटा दी जाती है, और आपकी साइट फ़ाइलें प्रभावित नहीं होतीं। साइट जो भी आखिरी बार तैनात किया गया था उसे परोसना जारी रखती है।

बाद में अपनी रिपॉजिटरी सेटिंग्स में तैनाती कुंजी और वेबहुक को हटाकर व्यवस्थित करें। वे बस काम करना बंद कर देंगे, लेकिन मृत प्रविष्टियों को छोड़ देने से अगली ऑडिट कठिन हो जाती है।

## समस्या निवारण

**पुश कुछ भी ट्रिगर नहीं करते।** पहले ऑटो-तैनाती टॉगल जाँचें, फिर अपनी रिपॉजिटरी में वेबहुक। अधिकांश प्रोवाइडर हाल की डिलीवरी और उनके रिस्पॉन्स कोड दिखाते हैं, जो आपको तुरंत बता देता है कि अनुरोध आपकी रिपॉजिटरी से निकला भी था या नहीं।

**क्लोनिंग विफल हो रही है।** तैनाती कुंजी गायब है, इसे लाइन ब्रेक के साथ पेस्ट किया गया था, या इसे गलत रिपॉजिटरी में जोड़ा गया था। हाथ से टेक्स्ट चुनने के बजाय इसे **कुंजी कॉपी करें** बटन से फिर से कॉपी करें।

**तैनाती सफल होती है पर साइट नहीं बदलती।** आउटपुट डायरेक्टरी संभवतः गलत है। अगर आपका बिल्ड `dist` में लिखता है और आउटपुट डायरेक्टरी खाली है, तो बनी हुई फ़ाइलें कभी परोसे जाने वाले रूट तक नहीं पहुँचतीं।

**सब कुछ pending दिखाता है और कभी आगे नहीं बढ़ता।** तैनाती कतार में लगी थी पर कभी उठाई नहीं गई। मैनुअल रूप से **अभी तैनात करें** ट्रिगर करें और एरर पंक्ति के लिए Deploys पेज जाँचें।

## आगे क्या करें

- [पुल रिक्वेस्ट के लिए प्रीव्यू तैनातियाँ](https://support.kapsulehost.com/hi-in/site-preview) इस सेटअप के ऊपर प्रति-PR URL जोड़ता है।
- [किसी साइट के लिए ऐप सीक्रेट्स को स्टोर करना](https://support.kapsulehost.com/hi-in/site-secrets) उन क्रेडेंशियल्स के लिए जिनकी आपके बिल्ड और रनटाइम को ज़रूरत होती है।
- [साइट गतिविधि लॉग](https://support.kapsulehost.com/hi-in/site-activity-log) यहाँ किए गए कॉन्फ़िगरेशन बदलावों को रिकॉर्ड करता है।
