- होम
- डॉक्स बिल्डर
- Docker बिल्ड
Docker बिल्ड
बिल्डर एक Docker इमेज के रूप में शिप होता है। कंटेंट रिपॉज़िटरीज़ इसे Node.js या Astro को लोकली इंस्टॉल किए बिना स्टैटिक HTML उत्पन्न करने के लिए चलाती हैं।
Dockerfile
Section titled “Dockerfile”docker/Dockerfile node:24-alpine पर मल्टी-स्टेप बिल्ड का उपयोग करता है:
FROM node:24-alpine AS builderWORKDIR /app
# Install deps (cached layer)COPY package*.json ./RUN npm ci
# Copy framework codeCOPY . .
# Remove placeholder contentRUN rm -rf src/content/docs/*
COPY docker/entrypoint.sh /entrypoint.shRUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]लेयर रणनीति
Section titled “लेयर रणनीति”| लेयर | क्या | अलग से कैश क्यों किया जाता है |
|---|---|---|
| 1 | COPY package*.json + npm ci | डिपेंडेंसीज़ कम बार बदलती हैं; इस लेयर को कैश करने से हर बिल्ड पर दोबारा डाउनलोड से बचा जा सकता है |
| 2 | COPY . . | फ्रेमवर्क सोर्स कोड |
| 3 | rm -rf src/content/docs/* | किसी भी प्लेसहोल्डर कंटेंट को साफ करता है ताकि केवल इंजेक्ट किया गया कंटेंट दिखाई दे |
| 4 | COPY entrypoint.sh | बिल्ड ऑर्केस्ट्रेशन स्क्रिप्ट |
एंट्रीपॉइंट
Section titled “एंट्रीपॉइंट”docker/entrypoint.sh हर बार कंटेनर स्टार्ट होने पर चलता है। यह इन चरणों को क्रम में निष्पादित करता है:
चरण 1: डिपेंडेंसीज़ अपडेट करें
Section titled “चरण 1: डिपेंडेंसीज़ अपडेट करें”npm installnpm updateयह सुनिश्चित करता है कि थीम पैकेज और सभी डिपेंडेंसीज़ उनके नवीनतम संगत संस्करणों पर हैं।
चरण 2: थीम कॉन्फ़िग कॉपी करें
Section titled “चरण 2: थीम कॉन्फ़िग कॉपी करें”cp /app/node_modules/@f5-sales-demo/docs-theme/astro.config.mjs /app/astro.config.mjscp /app/node_modules/@f5-sales-demo/docs-theme/src/content.config.ts /app/src/content.config.tsथीम पैकेज से astro.config.mjs और content.config.ts कॉपी करता है। Astro कॉन्फ़िगरेशन के लिए थीम एकमात्र स्रोत है — थीम सिस्टम डिज़ाइन के लिए आर्किटेक्चर देखें।
चरण 3: कंटेंट इंजेक्ट करें
Section titled “चरण 3: कंटेंट इंजेक्ट करें”if [ -d "$CONTENT_DIR" ]; then cp -r "$CONTENT_DIR"/* /app/src/content/docs/else echo "ERROR: No content found at $CONTENT_DIR" exit 1fiमाउंट किए गए कंटेंट को Astro की कंटेंट कलेक्शन डायरेक्टरी में कॉपी करता है। यदि कंटेंट डायरेक्टरी गायब है तो त्रुटि के साथ बाहर निकलता है।
चरण 4: शीर्षक निकालें
Section titled “चरण 4: शीर्षक निकालें”if [ -z "$DOCS_TITLE" ] && [ -f /app/src/content/docs/index.mdx ]; then DOCS_TITLE=$(grep -m1 '^title:' /app/src/content/docs/index.mdx | sed 's/title: *["]*//;s/["]*$//') export DOCS_TITLEfiयदि DOCS_TITLE एनवायरनमेंट के माध्यम से सेट नहीं है, तो इसे index.mdx के title: फ्रंटमैटर फ़ील्ड से निकालता है।
चरण 5: बेस पाथ निकालें
Section titled “चरण 5: बेस पाथ निकालें”if [ -z "$DOCS_BASE" ] && [ -n "$GITHUB_REPOSITORY" ]; then DOCS_BASE="/${GITHUB_REPOSITORY#*/}" export DOCS_BASEfiGitHub रिपॉज़िटरी नाम से साइट बेस पाथ प्राप्त करता है (उदा., owner/my-docs /my-docs बन जाता है)।
चरण 6: बिल्ड करें
Section titled “चरण 6: बिल्ड करें”npm run buildastro build चलाता है, जो /app/dist/ में स्टैटिक आउटपुट उत्पन्न करता है।
चरण 7: आउटपुट कॉपी करें
Section titled “चरण 7: आउटपुट कॉपी करें”if [ -d "$OUTPUT_DIR" ]; then cp -r /app/dist/* "$OUTPUT_DIR"/fiबिल्ड की गई साइट को आउटपुट माउंट पॉइंट पर कॉपी करता है।
एनवायरनमेंट वेरिएबल्स
Section titled “एनवायरनमेंट वेरिएबल्स”| वेरिएबल | डिफ़ॉल्ट | विवरण |
|---|---|---|
CONTENT_DIR | /content/docs | माउंट की गई कंटेंट डायरेक्टरी का पाथ |
OUTPUT_DIR | /output | वह पाथ जहाँ बिल्ड की गई साइट कॉपी की जाती है |
DOCS_TITLE | (index.mdx से निकाला गया) | Astro कॉन्फ़िग को पास किया गया साइट शीर्षक |
DOCS_DESCRIPTION | (index.mdx से निकाला गया) | फ्रंटमैटर से साइट विवरण |
DOCS_BASE | (GITHUB_REPOSITORY से प्राप्त) | साइट के लिए बेस पाथ (उदा., /my-docs) |
DOCS_SITE | (GITHUB_REPOSITORY_OWNER से प्राप्त) | Astro कॉन्फ़िग को पास किया गया साइट URL (उदा., https://<owner>.github.io) |
GITHUB_REPOSITORY | (GitHub Actions द्वारा सेट) | DOCS_BASE प्राप्त करने के लिए उपयोग किया जाने वाला owner/repo स्ट्रिंग |
GENERATE_PDF | false | बिल्ड के बाद PDF जनरेशन सक्षम करें |
PDF_FILENAME | docs | जनरेट की गई PDF के लिए आउटपुट फ़ाइलनाम |
LLMS_OPTIONAL_LINKS | [] | llms.txt Optional सेक्शन के लिए चाइल्ड साइट URLs का JSON ऐरे |
लोकल उपयोग
Section titled “लोकल उपयोग”Docker का उपयोग करके लोकली डॉक्यूमेंटेशन बिल्ड करने के लिए:
docker run --rm \ -v "$(pwd)/docs:/content/docs" \ -v "$(pwd)/output:/output" \ ghcr.io/f5-sales-demo/docs-builder:latestयह लोकल docs/ डायरेक्टरी को कंटेंट के रूप में माउंट करता है और बिल्ड की गई साइट को output/ में लिखता है।
लाइव डेव सर्वर वर्कफ़्लो चाहने वाले कंटेंट लेखकों के लिए, कंटेंट लेखकों के लिए लोकल प्रीव्यू देखें।
डेवलपर: लोकल डेव सर्वर
Section titled “डेवलपर: लोकल डेव सर्वर”जब बिल्डर पर स्वयं काम कर रहे हों (कंपोनेंट्स, प्लगइन्स, थीम इंटीग्रेशन), तो आप Docker के बिना सीधे Astro का डेव सर्वर चला सकते हैं:
npm cicp node_modules/@f5-sales-demo/docs-theme/astro.config.mjs astro.config.mjscp node_modules/@f5-sales-demo/docs-theme/src/content.config.ts src/content.config.ts# Copy some test content into the content collectioncp -r /path/to/test-content/* src/content/docs/DOCS_TITLE="Dev Test" npx astro dev --hosthttp://localhost:4321 खोलें। कंपोनेंट और प्लगइन परिवर्तनों के लिए हॉट मॉड्यूल रिप्लेसमेंट (HMR) काम करता है।
इमेज रजिस्ट्री
Section titled “इमेज रजिस्ट्री”इमेज GitHub Container Registry पर प्रकाशित की जाती है:
ghcr.io/f5-sales-demo/docs-builderहर बिल्ड पर दो टैग पुश किए जाते हैं:
| टैग | विवरण |
|---|---|
latest | main से सबसे हालिया बिल्ड |
<sha> | पुनरुत्पादनीय बिल्ड के लिए पूर्ण Git कमिट SHA |
इमेज को बिल्ड और प्रकाशित करने वाले वर्कफ़्लो के लिए CI/CD और गवर्नेंस देखें।