Docker में आपके ऐप में Chrome भेजे बिना Puppeteer कैसे चलाएँ
Expert Network Defense Engineer
TL;DR:
- पपेटियर डॉकर डिप्लॉयमेंट तब विफल होते हैं जब Node पैकेज, क्रोम निष्पादन योग्य, और लिनक्स रनटाइम को एक अदृश्य निर्भरता के रूप में माना जाता है। प्रत्येक सीमा को स्पष्ट बनाएं।
- आधिकारिक छवि सबसे तेज पूर्ण आधार रेखा है। यह एक ज्ञात रिलीज टैग के तहत पपेटियर, क्रोम फॉर टेस्टिंग, और आवश्यक पुस्तकालयों को पैकेज करता है।
- एक सिस्टम-क्रोम छवि आपको ऑपरेटिंग-सिस्टम नियंत्रण देती है लेकिन क्रोम स्थापना और संगतता आपकी ज़िम्मेदारी बनाती है। दोनों पक्षों को पिन करें और निर्माण के दौरान एक लॉन्च स्मोक चेक चलाएं।
puppeteer-coreक्लाइंट को बिना क्रोम डाउनलोड किए शामिल करता है। जब एप्लिकेशन छवि को ब्राउज़र-फ्री रखा जाना चाहिए, तो इसे एक अलग संचालित ब्राउज़र के साथ जोड़ा जाए।- स्क्रेपलेस स्क्रैपिंग ब्राउज़र ऐप कंटेनर को प्रबंधित क्लाउड ब्राउज़र से कनेक्ट करने की अनुमति देता है। क्रोम जीवनचक्र, ब्राउज़र निर्भरताएँ, और ब्राउज़र एग्रेस नोड.जेएस छवि को छोड़ देते हैं।
- शुरू करने के लिए स्वतंत्र। नए स्क्रेपलेस खाते में मुफ्त स्क्रैपिंग ब्राउज़र रनटाइम शामिल है — app.scrapeless.com पर साइन अप करें।
परिचय: पपेटियर को एक ब्राउज़र अनुबंध की आवश्यकता है
npm install puppeteer संपूर्ण डिप्लॉयमेंट नहीं है। पपेटियर को एक संगत क्रोम निष्पादन योग्य, लिनक्स साझा पुस्तकालय, फोंट, एकWritable प्रोफ़ाइल निर्देशिका, पर्याप्त मेमोरी, और एक प्रक्रिया मॉडल की आवश्यकता है जो बच्चे की प्रक्रियाओं को साफ़ तरीके से बंद करता है।
डॉकर केवल तभी उन निर्भरताओं को पुन: उत्पन्न करता है जब उनके बारे में लिखा जाए। एक आधिकारिक छवि आपके लिए उन्हें लिखती है। एक कस्टम छवि अनुबंध को आपके डॉकरफाइल में ले जाती है। एक रिमोट-ब्राउजर डिज़ाइन अनुबंध को आवेदन छवि के बाहर रखता है और puppeteer-core को क्लाइंट के रूप में छोड़ देता है।
यह गाइड पपेटियर कोर 25.8.0 और स्क्रेपलेस एसडीके 1.11.0 का उपयोग करती है, दोनों को सत्यापन के दौरान स्थापित किया गया। स्थानीय पैकेज ने अपने npm पैकेज के बाहर आपूर्ति की गई क्रोम निष्पादन योग्य को लॉन्च किया और अपेक्षित पृष्ठ शीर्षक लौटाया।
पपेटियर को डॉकर में npm इंस्टॉल से ज्यादा की आवश्यकता क्यों है
पपेटियर और पपेटियर कोर विभिन्न पैकेजिंग समस्याओं को हल करते हैं।
| पैकेज | ब्राउज़र डाउनलोड | प्रयोज्य उपयोग |
|---|---|---|
puppeteer |
स्थापना के दौरान एक संगत क्रोम फॉर टेस्टिंग का प्रबंधन करता है | स्थानीय या कंटेनर लॉन्च के साथ बंडल किए गए ब्राउज़र के साथ |
puppeteer-core |
एक ब्राउज़र डाउनलोड नहीं करता | एक मौजूदा निष्पादन योग्य या रिमोट ब्राउज़र एंडपॉइंट से कनेक्ट करें |
पैकेज का विकल्प PID 1, साझा मेमोरी, ब्राउज़र सैंडबॉक्स, फोंट, प्रमाणपत्र, या कंटेनर संसाधन सीमाओं को कॉन्फ़िगर नहीं करता है। ये डिप्लॉयमेंट ज़िम्मेदारियाँ बनी रहती हैं।
पूर्वापेक्षाएँ
- एप्लिकेशन कंटेनर के लिए Node.js 20।
- आधिकारिक-छवि और प्रणाली-क्रोम पैटर्न के लिए डॉकर।
- ब्राउज़र-फ्री एप्लिकेशन पैटर्न के लिए पपेटियर कोर
25.8.0। - प्रबंधित क्लाउड ब्राउज़र के लिए एक स्क्रेपलेस खाता और API कुंजी।
- एक सार्वजनिक या स्पष्ट रूप से अधिकृत लक्ष्य।
नोट: सत्यापन वातावरण में डॉकर उपलब्ध नहीं है, इसलिए छवि निर्माण और
docker runकमांड को प्रीरेक्विजिट गैप के रूप में लेबल किया गया है। पपेटियर कोर25.8.0को स्थापित किया गया और पैकेज के बाहर एक क्रोम निष्पादन योग्य के खिलाफ लॉन्च किया गया; स्क्रेपलेस एसडीके ने अपने पपेटियर कनेक्शन फ़ंक्शन को लोड और उजागर किया, लेकिन क्लाउड सत्र के लिए कोई कुंजी उपलब्ध नहीं थी।
विकल्प 1 — आधिकारिक पपेटियर छवि से शुरू करें
आधिकारिक छवि क्रोम फॉर टेस्टिंग, इसकी सिस्टम निर्भरताएँ, और एक मेल खाने वाला पपेटियर रिलीज़ शामिल करती है। पपेटियर डॉकर गाइड छवि और इसकी सैंडबॉक्स-उन्मुख रनटाइम आवश्यकताओं को प्रलेखित करता है।
latest का उपयोग करने के बजाय छवि को पिन करें:
dockerfile
FROM ghcr.io/puppeteer/puppeteer:25.8.0
WORKDIR /home/pptruser/app
COPY --chown=pptruser:pptruser package.json package-lock.json ./
RUN npm ci
COPY --chown=pptruser:pptruser . .
CMD ["node", "capture.mjs"]
प्रलेखित छवि अपने सैंडबॉक्स के साथ क्रोम चलाती है, इसलिए कंटेनर रनटाइम को आवश्यक क्षमता प्रदान करनी चाहिए। इसे ब्राउज़र बच्चों का प्रबंधन करने के लिए एक इनिशियल प्रोसेस की भी आवश्यकता होती है:
bash
docker build -t puppeteer-job:25.8.0 .
docker run --rm --init --cap-add=SYS_ADMIN puppeteer-job:25.8.0
क्षमताएँ केवल कार्यभार और रनटाइम की समीक्षा के बाद ही दें। NIST कंटेनर-सुरक्षा मार्गदर्शिका छवि जोखिम, रजिस्ट्री जोखिम, आर्केस्ट्रेटर नियंत्रण, रनटाइम नियंत्रण, और मेज़बान नियंत्रण को अलग करती है।
विकल्प 2 — सिस्टम क्रोम स्वयं स्थापित करें
एक कस्टम सिस्टम-क्रोम छवि उपयुक्त है जब संगठन पहले से ही एक ब्राउज़र रिपॉजिटरी, प्रमाणपत्र श्रृंखला, फोंट, या आधार छवि का प्रबंधन करता है।
आवेदन को स्थापित निष्पादन योग्य पर पपेटियर कोर इंगित करना चाहिए:
javascript
import puppeteer from "puppeteer-core";
const browser = await puppeteer.launch({
executablePath: process.env.PUPPETEER_EXECUTABLE_PATH,
headless: true,
});
const page = await browser.newPage();
await page.setContent("<title>Chrome outside the npm package</title>");
console.log(await page.title());
await browser.close();
निर्वहन सत्यापन ने एक बाहरी क्रोम निष्पादन योग्य का उपयोग किया और Chrome outside the npm package को प्रिंट किया। इससे यह पुष्टि होती है कि puppeteer-core को उस ब्राउज़र को वितरित करने की आवश्यकता नहीं थी जिसे उसने नियंत्रित किया।
अब आपका डॉकरफाइल क्रोम स्थापना और संगतता का स्वामी है। ब्राउज़र पैकेज को पिन करें, छवि निर्माण के दौरान इसके संस्करण का आश्वासन दें, और छवि प्रकाशित करने से पहले लॉन्च स्क्रिप्ट चलाएं।
पाँच कंटेनर विफलताओं का अलग से निदान
पपेटियर कंटेनर विफलताएँ तब हल करना आसान हो जाती हैं जब त्रुटि को एक सीमा से मानचित्रित किया जाता है।
| विफलता | निरीक्षण करने के लिए सबूत | सुधार |
|---|---|---|
| निष्पादन योग्य गायब | executablePath और छवि पैकेज सूची |
क्रोम स्थापित करें या एक रिमोट ब्राउज़र से कनेक्ट करें |
| साझा लाइब्रेरी गायब | ब्राउज़र stderr और लिंक की गई-लाइब्रेरी जांच | विशिष्ट ऑपरेटिंग सिस्टम निर्भरता जोड़ें |
| सैंडबॉक्स लॉन्च त्रुटि | उपयोगकर्ता, कर्नेल नीति, और कंटेनर क्षमता | समर्थित गैर-रूट सैंडबॉक्स अनुबंध को पुनर्स्थापित करें |
| लोड के तहत रेंडरर बंद हो जाता है | मेमोरी, IPC, और /dev/shm कॉन्फ़िगरेशन |
स्पष्ट कंटेनर संसाधन और साझा मेमोरी सेट करें |
| बाल प्रक्रियाएँ बनी रहती हैं | PID 1 और शटडाउन सिग्नल हैंडलिंग | --init का उपयोग करें और finally में ब्राउज़र बंद करें |
लिनक्स नेमस्पेस प्रक्रिया दृश्य, माउंट, उपयोगकर्ताओं और नेटवर्क संसाधनों को पृथक करते हैं। लिनक्स नेमस्पेस मैनुअल उन पृथक्करण प्रारंभिकताओं का वर्णन करता है। ब्राउज़र सैंडबॉक्स और कंटेनर सीमा एक-दूस Complement करते हैं; एक दूसरे को प्रतिस्थापित नहीं करता है।
Scrapeless के साथ स्क्रैपिंग प्रारंभ करें
Scrapeless के साथ अपने वेब स्क्रैपिंग और स्वचालन कार्यप्रवाह को शक्ति दें!
आज साइन अप करें और पाएं $5 की मुफ्त क्रेडिट — कोई क्रेडिट कार्ड की आवश्यकता नहीं।अपनी मुफ्त क्रेडिट अभी Scrapeless डैशबोर्ड में दावा करें।
एप्लिकेशन कंटेनर से Chrome को बाहर निकालें
एक ब्राउज़र-रहित एप्लिकेशन इमेज puppeteer-core स्थापित करती है, एक दूरस्थ ब्राउज़र सत्र खोलती है, स्वीकृत पृष्ठ कार्य करती है, और कनेक्शन बंद करती है। ब्राउज़र सेवा स्वतंत्र रूप से स्केल और अपग्रेड होती है।
पुष्टि परियोजना में उपयोग किए गए सटीक पैकेज स्थापित करें:
bash
npm install puppeteer-core@25.8.0 @scrapeless-ai/sdk@1.11.0
नोट: निम्नलिखित कनेक्शन के लिए आपके Scrapeless API कुंजी की आवश्यकता है। स्थापित SDK निर्याता को स्थानीय रूप से जांचा गया था, लेकिन प्रमाण-पत्र-मुक्त वातावरण क्लाउड ब्राउज़र को खोल नहीं सका।
javascript
import { Puppeteer } from "@scrapeless-ai/sdk";
const browser = await Puppeteer.connect({
sessionName: "browser-free-app",
sessionTTL: 300,
proxyCountry: "US",
defaultViewport: null,
});
const page = await browser.newPage();
await page.goto("https://example.com", { waitUntil: "domcontentloaded" });
console.log(await page.title());
await browser.close();
Scrapeless स्क्रैपिंग ब्राउज़र इस पैटर्न में ब्राउज़र परत है। स्क्रैपिंग ब्राउज़र त्वरित प्रारंभ, उत्पाद पृष्ठ, और मूल्य निर्धारण की समीक्षा करें इससे पहले कि आप इसे CI में अपनाएं।
दूरस्थ सीमा के चारों ओर एप्लिकेशन को गठित करें
एप्लिकेशन कंटेनर अब उसी Compose परियोजना में Chrome सेवा की आवश्यकता नहीं है। इसे केवल Node.js कोड, इसके लॉकफाइल, Puppeteer कोर क्लाइंट, और runtime में प्रदान किए गए एक गुप्त की आवश्यकता है।
yaml
services:
worker:
build: .
init: true
environment:
SCRAPELESS_API_KEY: ${SCRAPELESS_API_KEY}
read_only: true
tmpfs:
- /tmp:size=64m
यह Compose फ़ाइल एप्लिकेशन सीमा को व्यक्त करती है, क्लाउड ब्राउज़र को नहीं। API कुंजी तैनाती गुप्त भंडार से आती है। श्रमिक के पास केवल पढ़ने के लिए एक रूट फ़ाइल प्रणाली और एक सीमित अस्थायी निदेशालय होता है।
ओपन कंटेनर पहल रनटाइम कॉन्फ़िगरेशन प्रक्रिया, वातावरण, माउंट, और लिनक्स संसाधनों को परिभाषित करता है जिन्हें रनटाइम कंटेनर प्रक्रिया में अनुवादित करता है।
सही पैटर्न चुनें
जब एक पूर्ण, मेल खाने वाला Puppeteer-और-Chrome आकृति छोटे इमेज की तुलना में अधिक मूल्यवान हो, तो आधिकारिक इमेज का उपयोग करें। जब आपकी प्लेटफ़ॉर्म टीम पहले ही ब्राउज़र वितरण और ऑपरेटिंग सिस्टम नीति की मालिक हो, तो सिस्टम Chrome स्थापित करें। जब एप्लिकेशन को Chrome शिप या संचालित नहीं करना चाहिए, तो Scrapeless स्क्रैपिंग ब्राउज़र के साथ Puppeteer कोर का उपयोग करें।
निर्णय कार्य द्वारा भिन्न हो सकता है। एक आंतरिक टेम्पलेट के लिए PDF रेंडरिंग एक पिन की गई स्थानीय इमेज में रह सकती है। सार्वजनिक-वेब निकासी जिसे क्षेत्रीय ब्राउज़र बाहर निकलने की आवश्यकता है, एक प्रबंधित क्लाउड ब्राउज़र पर हो सकती है। दोनों को एक ही कार्य अनुबंध के पीछे रखें ताकि कॉलर ब्राउज़र स्थान पर निर्भर न हों।
Scrapeless क्लाउड-ब्राउज़र Puppeteer उदाहरण व्यापक स्वचालन कार्यप्रवाह में प्रबंधित कनेक्शन को प्रदर्शित करता है।
संचालन चेकलिस्ट
- Puppeteer, Chrome, आधार छवि, और लॉकफाइल संस्करणों को पिन करें।
- छवि प्रकाशित करने से पहले एक ब्राउज़र लॉन्च और शीर्षक स्थापना चलाएँ।
- एक प्रारंभ प्रक्रिया का उपयोग करें और
finallyमें ब्राउज़र सत्रों को बंद करें। - अविश्वसनीय पृष्ठों के लिए ब्राउज़र सैंडबॉक्स को बनाए रखें।
- CPU, मेमोरी, IPC, और अस्थायी-भंडारण सीमाएँ स्पष्ट रूप से सेट करें।
- API कुंजी को रनटाइम गुप्त भंडार में रखें, कभी भी इमेज परतों में नहीं।
- प्रत्येक लक्षित होस्ट पर तीन आधारित श्रमिकों से अधिक न रखें जब तक कि मालिक किसी और सीमा को मंजूरी न दे।
- आउटपुट के साथ पैकेज, ब्राउज़र, इमेज, क्षेत्र, और कार्य संशोधन को रिकॉर्ड करें।
निष्कर्ष: क्लाइंट को Chrome से अलग करें
Puppeteer को संचालित करना आसान हो जाता है जब क्लाइंट पैकेज और ब्राउज़र रनटाइम अलग-अलग, स्पष्ट निर्णय होते हैं। आधिकारिक छवि उन्हें एकत्रित करती है। एक कस्टम इमेज आपकी टीम को दोनों का स्वामित्व देती है। Puppeteer Core और Scrapeless Scraping Browser इन्हें एक प्रबंधित कनेक्शन के माध्यम से विभाजित करते हैं।
प्रत्येक नौकरी के प्रकार के लिए एक अनुबंध चुनें, इसे पिन करें, और अनुप्रयोग कार्यभार शुरू होने से पहले ब्राउज़र सीमा का परीक्षण करें।
ऐप इमेज में क्रोम के बिना Puppeteer चलाने के लिए तैयार हैं?
हमारे समुदाय में शामिल हों ताकि एक मुफ्त योजना का दावा कर सकें और डेवलपर्स से जुड़ सकें जो ब्राउज़र कार्यभार को Node.js सेवाओं से अलग कर रहे हैं: Discord · Telegram.
फ्री स्क्रेपिंग ब्राउज़र रनटाइम के लिए app.scrapeless.com पर साइन अप करें और ब्राउज़र-मुक्त कार्यकर्ता पैटर्न का परीक्षण करें।
अक्सर पूछे जाने वाले प्रश्न
प्र: क्या Puppeteer Core में क्रोम शामिल है?
Puppeteer Core क्रोम को डाउनलोड या प्रबंधित नहीं करता है। इसे एक स्पष्ट निष्पादन पथ या एक दूरस्थ ब्राउज़र कनेक्शन की आवश्यकता होती है।
प्र: क्या आधिकारिक Puppeteer छवि एक कस्टम छवि की तुलना में सुरक्षित है?
आधिकारिक छवि एक दस्तावेज़ीकृत ब्राउज़र-और-निर्भरता आधार प्रदान करती है, लेकिन सुरक्षा अभी भी छवि की उत्पत्ति, रनटाइम क्षमताओं, उपयोगकर्ता पहचान, सैंडबॉक्स नीति, मेज़बान नियंत्रण, और खोले जाने वाले पृष्ठों पर निर्भर करती है।
प्र: क्यों क्रोम केवल डॉकर के अंदर विफल होता है?
संवहनीयता में निष्पादन, एक लिंक की गई पुस्तकालय, सैंडबॉक्स समर्थन, साझा मेमोरी, फ़ॉन्ट्स, या एक उचित प्रारंभ प्रक्रिया गायब हो सकती है। पहले नेविगेशन कोड बदलने के बजाय विफल सीमा का निरीक्षण करें।
प्र: क्या एक दूरस्थ Puppeteer ब्राउज़र को प्रॉक्सी की आवश्यकता है?
दूरस्थ ब्राउज़र को उस कार्य के लिए मेल खाने वाली एक्जिट नीति की आवश्यकता होती है। Scrapeless Scraping Browser 195+ देशों में आवासीय प्रॉक्सियों का समर्थन करता है; एक स्थिर रन के लिए स्वीकृत देश को पिन करें।
प्र: जब चयनकर्ता बदलते हैं तो क्या होना चाहिए?
प्रदर्शित पृष्ठ को फिर से जांचें और चयनकर्ताओं को अपेक्षित भूमिकाओं, गुणों या डेटा संरचनाओं के खिलाफ अपडेट करें। डॉकर के बाहर क्रोम को स्थानांतरित करने से लक्षित DOM फ्रीज नहीं होता है।
प्र: एक Puppeteer कार्यकर्ता को कितनी समवर्तीता का उपयोग करना चाहिए?
लक्षित होस्ट के लिए तीन से अधिक कार्यकर्ताओं को न रखें जब तक कि स्वामी अन्य सीमा को मंजूरी न दे। ब्राउज़र बेड़े की क्षमता और लक्षित-होस्ट समवर्तीता अलग नियंत्रण हैं।
प्र: क्या Puppeteer Core बिना AI एजेंट के कनेक्ट कर सकता है?
हाँ। Puppeteer Core और Scrapeless SDK सीधे Node.js इंटरफेस हैं। एक AI एजेंट वैकल्पिक है और इसे पहुंच, समवर्तीता, या गुप्त-हैंडलिंग नियमों को नहीं बदलना चाहिए।
स्क्रैपलेस में, हम केवल सार्वजनिक रूप से उपलब्ध डेटा का उपयोग करते हैं, जबकि लागू कानूनों, विनियमों और वेबसाइट गोपनीयता नीतियों का सख्ती से अनुपालन करते हैं। इस ब्लॉग में सामग्री केवल प्रदर्शन उद्देश्यों के लिए है और इसमें कोई अवैध या उल्लंघन करने वाली गतिविधियों को शामिल नहीं किया गया है। हम इस ब्लॉग या तृतीय-पक्ष लिंक से जानकारी के उपयोग के लिए सभी देयता को कोई गारंटी नहीं देते हैं और सभी देयता का खुलासा करते हैं। किसी भी स्क्रैपिंग गतिविधियों में संलग्न होने से पहले, अपने कानूनी सलाहकार से परामर्श करें और लक्ष्य वेबसाइट की सेवा की शर्तों की समीक्षा करें या आवश्यक अनुमतियाँ प्राप्त करें।




