इस प्रक्रिया में, हम निम्नलिखित संरचना को अंतिम लक्ष्य के रूप में रखेंगे।
- FireCrowl (API सर्वर और वर्कर) को Ubuntu 24 पर install करें
- Node.js को पूरे सिस्टम में install करें, और globally
pnpmका उपयोग करें - Rust टूलचेन (rustup आदि) install करें, और FireCrawl की Rust में बनी HTML conversion library (html-transformer) को build करें
- Playwright के dependency packages install करना, और खुद की Playwright microservice script बनाना
- FireCrowl को शुरू करने के लिए systemd service के 2 (सर्वर के लिए और वर्कर के लिए) बनाएं, जिससे
- OS स्टार्ट होते ही अपने आप start हो जाए
- manually
sudo systemctl restart firecrowl-server/sudo systemctl restart firecrowl-workersजैसे commands भी चलाए जा सकें
(Optional) +-----------------+ | Dify | +-----------------+ | | HTTP / REST API v +------------------------------------------------------------------+ | FireCrawl (Node.js, TypeScript, pnpm) | | Directory: /home/firecrawl/apps/api | | | | +----------------------+ (pnpm run start) | | | API Server |-----------------------------------------+ | | - Express | | | | - BullMQ Dashboard | | | +----------------------+ | | ^ | | | (Queue tasks) | | +----------------------+ (pnpm run workers) | | | Workers |-----------------------------------------+ | | - Scraping, parsing, | | | | indexing | | | +----------------------+ | | | | - .env में सेट किए गए विकल्प (API key, PORT, HOST, | | PLAYWRIGHT_MICROSERVICE_URL आदि) | | | | - Rust HTML Transformer: | | -> Built via Cargo in: | | /home/firecrawl/apps/api/sharedLibs/html-transformer | | -> Generates: libhtml_transformer.so | | -> Used by FireCrawl for fast HTML parsing (or falls back to | | Cheerio) | +------------------------------------------------------------------+ | | Task Queue / Rate Limit v +----------------------------------+ | Redis (localhost) | | - Used by BullMQ for job queuing| +----------------------------------+ +---------------------------------------------+ | systemd (Ubuntu 24) | | | | +--------------------------+ | | | firecrowl-server | | | | - ExecStart=pnpm run start| | | +--------------------------+ | | +--------------------------+ | | | firecrowl-workers | | | | - ExecStart=pnpm run | | | | workers | | | +--------------------------+ | | +--------------------------+ | | | firecrowl-playwright | | | | - ExecStart=pnpm run | | | | playwright-service | | | +--------------------------+ | | (Automatic start at boot, process monitoring,| | logs managed via systemd) | +---------------------------------------------+पूर्वापेक्षाएं:
- Ubuntu 24 (कोडनेम “noble”) पर बिना Docker के चलाएं
- OS user के पास administrator अधिकार से operate करने की सुविधा हो
- FireCrowl repository को
/home/firecrawlमें clone करने की योजना है - Redis install हो चुका है (
sudo apt install -y redis-server) और चालू (running) है
STEP1. सिस्टम की तैयारी और Node.js / pnpm की installation #
STEP1.1 सिस्टम update और development tools की installation #
sudo apt update sudo apt install -y build-essential pkg-config curl git libssl-devSTEP1.2 NodeSource से Node.js की installation #
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - sudo apt-get install -y nodejsSTEP1.3 pnpm की global installation #
sudo npm install -g pnpm※
which pnpmसे execution path (उदाहरण:/usr/local/bin/pnpm) confirm करें।
STEP2. FireCrawl repository का clone और dependency packages की installation #
STEP2.1 FireCrawl का clone #
cd /home/firecrawl git clone https://github.com/mendableai/firecrawl.gitSTEP2.2 dependency packages की installation #
cd /home/firecrawl/apps/api pnpm installSTEP2.3 .env file की setting #
/home/firecrawl/apps/api/.envको create या edit करें, और आवश्यक environment variables set करें। उदाहरण:# ===== Required ENVS ====== NUM_WORKERS_PER_QUEUE=8 PORT=3002 HOST=0.0.0.0 REDIS_URL=redis://localhost:6379 REDIS_RATE_LIMIT_URL=redis://localhost:6379 PLAYWRIGHT_MICROSERVICE_URL=http://localhost:3000/html USE_DB_AUTHENTICATION=false # ===== Optional ENVS ====== TEST_API_KEY=fc-bestnet BULL_AUTH_KEY=fc-bestnet ...(अन्य विकल्प आवश्यकतानुसार)
STEP3. Rust टूलचेन का install और HTML Transformer का build #
STEP3.1 Rust टूलचेन की installation #
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh source $HOME/.cargo/env rustc --version cargo --versionSTEP3.2 FireCrawl के अंदर Rust library directory confirm करें #
repository root में नीचे दिया गया command चलाकर,
Cargo.tomlवाली directory खोजें।cd /home/firecrawl find . -type f -name Cargo.toml | grep -i html-transformerउदाहरण:
./sharedLibs/html-transformer/Cargo.tomlमिल जाए, तो उस directory में जाएं।STEP3.3 Rust library का build #
cd /home/firecrawl/sharedLibs/html-transformer cargo build --releasebuild सफल होने पर
target/release/libhtml_transformer.sogenerate होती है। confirm करें:ls target/release/libhtml_transformer.soSTEP3.4 library की placement या environment variable की setting #
- तरीका A: अगर FireCrawl का Node.js code relative path से load होता है तो अलग से कोई काम करने की जरूरत नहीं है
- तरीका B: आवश्यकता अनुसार
LD_LIBRARY_PATHमें add करें
export LD_LIBRARY_PATH=/home/firecrawl/sharedLibs/html-transformer/target/release:$LD_LIBRARY_PATHsystemd में automatically set करने के लिए, service file में
Environment=LD_LIBRARY_PATH=...add करें।
STEP4. Playwright का setup और microservice script बनाना #
STEP4.1 Playwright dependency packages की installation #
Ubuntu 24.04 के लिए dependency library का उदाहरण:
sudo apt-get install -y libnss3 libnspr4 libatk1.0-0 libatk-bridge2.0-0 libcups2 \ libdrm2 libxkbcommon0 libgtk-3-0 libpango-1.0-0 libcairo2 libgdk-pixbuf2.0-0 \ libgbm1 libatspi2.0-0 libx11-xcb1 libxcomposite1 libxdamage1 libxfixes3 \ libxrandr2 libxrender1 libxtst6 libxcb1 libxi6 libxcursor1 ca-certificates \ fonts-liberation xdg-utilsSTEP4.2 Playwright की browser installation #
pnpm exec playwright installSTEP4.3 Playwright microservice के लिए script बनाना #
/home/firecrawl/apps/apiमेंplaywright-service.jscreate करें, और नीचे दिया गया code example paste करें।// playwright-service.js const http = require('http'); const { chromium } = require('playwright'); const PORT = 3000; const server = http.createServer(async (req, res) => { if (req.method === 'GET' && req.url.startsWith('/html')) { try { const urlParam = new URL(req.url, `http://localhost:${PORT}`).searchParams.get('url'); if (!urlParam) { res.writeHead(400, { 'Content-Type': 'text/plain' }); return res.end('Missing ?url parameter'); } const browser = await chromium.launch({ headless: true }); const page = await browser.newPage(); await page.goto(urlParam, { waitUntil: 'networkidle' }); const content = await page.content(); res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' }); res.end(content); await browser.close(); } catch (err) { console.error('Playwright microservice error:', err); res.writeHead(500, { 'Content-Type': 'text/plain' }); res.end('Playwright error occurred'); } } else { res.writeHead(404, { 'Content-Type': 'text/plain' }); res.end('Not found'); } }); server.listen(PORT, '0.0.0.0', () => { console.log(`Playwright microservice listening on http://0.0.0.0:${PORT}/html`); });STEP4.4 package.json में script जोड़ें #
/home/firecrawl/apps/api/package.jsonके"scripts"में नीचे दिया गया add करें (मौजूदा items के साथ merge करें)।"playwright-service": "node playwright-service.js"
STEP5. Systemd service की setting #
FireCrawl server, worker, और Playwright microservice को automatically start कराने के लिए, systemd unit file बनाएंगे।
STEP5.1 FireCrawl server service (/etc/systemd/system/firecrowl-server.service) #
[Unit] Description=FireCrowl Server After=network.target [Service] User=firecrawl Group=firecrawl WorkingDirectory=/home/firecrawl/apps/api Environment=PATH=/usr/local/bin:/usr/bin:/bin ExecStart=/bin/bash -c 'pnpm run start' Restart=always RestartSec=5 Type=simple [Install] WantedBy=multi-user.targetSTEP5.2 FireCrawl worker service (/etc/systemd/system/firecrowl-workers.service) #
[Unit] Description=FireCrowl Workers After=network.target [Service] User=firecrawl Group=firecrawl WorkingDirectory=/home/firecrawl/apps/api Environment=PATH=/usr/local/bin:/usr/bin:/bin ExecStart=/bin/bash -c 'pnpm run workers' Restart=always RestartSec=5 Type=simple [Install] WantedBy=multi-user.targetSTEP5.3 Playwright microservice service (/etc/systemd/system/firecrowl-playwright.service) #
[Unit] Description=FireCrowl Playwright Microservice After=network.target [Service] User=firecrawl Group=firecrawl WorkingDirectory=/home/firecrawl/apps/api Environment=PATH=/home/firecrawl/.nvm/versions/node/v20.18.3/bin:/usr/local/bin:/usr/bin:/bin ExecStart=/bin/bash -c 'pnpm run playwright-service' Restart=always RestartSec=5 Type=simple [Install] WantedBy=multi-user.targetध्यान दें:
User=firecrawluse करने पर, पहले सेfirecrawluser बना लें, औरsudo chown -R firecrawl:firecrawl /home/firecrawlजैसे command से ownership पहले से set कर लें।Environment=PATH=...में nvm के जरिए install किए गए Node.js का path pass किया गया है। अपने environment के अनुसार इसे modify करें।- अगर Rust library relative path से load नहीं हो रही है, तो
LD_LIBRARY_PATHकी setting भी जरूरी है।
STEP5.4 Systemd service को enable करना और start करना #
sudo systemctl daemon-reload sudo systemctl enable firecrowl-server sudo systemctl enable firecrowl-workers sudo systemctl enable firecrowl-playwright sudo systemctl start firecrowl-server sudo systemctl start firecrowl-workers sudo systemctl start firecrowl-playwrightsudo systemctl status <service>से check करें कि हर serviceactive (running)हो गई है या नहीं।
STEP6. FireCrawl का restart और verification #
- .env की setting की जांच:
खासकरPLAYWRIGHT_MICROSERVICE_URLhttp://localhost:3000/htmlहोना चाहिए या नहीं, इसकी जांच जरूरी है - FireCrawl के server और worker का start होना:
log में “Scrape via fetch…” जैसा कुछ दिखे तो HTTP request सही तरीके से काम कर रहा है - Playwright service के काम करने की जांच:
browser मेंhttp://<सर्वर-IP>:3000/html?url=https://example.comपर access करें, और अगर HTML वापस आ जाए तो ठीक है
STEP7. अंतिम जांच #
- Rust library:
target/release/libhtml_transformer.soमौजूद है, और log में कोई error नहीं आ रहा, यह confirm करें - Playwright microservice:
सही तरीके से start होकर JavaScript rendering हो रही है या नहीं, इसकी जांच करें - पूरा integration:
FireCrawl server, worker और Playwright आपस में जुड़कर, Dify आदि से आने वाले request का सही जवाब देते हैं या नहीं, इसकी अंतिम जांच करें