本手順では、以下の構成を最終的なゴールとします。
- FireCrowl (APIサーバー & ワーカー) を Ubuntu 24 にインストール
- Node.js はシステム全体にインストールし、グローバルに
pnpmを利用 - Rust ツールチェーン(rustup など)を導入し、FireCrawl の Rust 製 HTML 変換ライブラリ(html-transformer)をビルド
- Playwright の依存パッケージのインストールと、独自の Playwright マイクロサービススクリプトの作成
- FireCrowl 起動用の systemd サービス を2つ(サーバー用 & ワーカー用)作成し、
- OS起動時に自動的に起動
- 手動で
sudo systemctl restart firecrowl-server/sudo systemctl restart firecrowl-workersなどが可能
(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キー、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ユーザーは 管理者権限で操作可能
- FireCrowlリポジトリを
/home/firecrawlにクローンする想定 - Redis がインストール済み (
sudo apt install -y redis-server) で起動中
STEP1. システムの準備と Node.js / pnpm のインストール #
STEP1.1 システム更新と開発ツールのインストール #
sudo apt update sudo apt install -y build-essential pkg-config curl git libssl-devSTEP1.2 NodeSource から Node.js のインストール #
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - sudo apt-get install -y nodejsSTEP1.3 pnpm のグローバルインストール #
sudo npm install -g pnpm※
which pnpmで実行パス(例:/usr/local/bin/pnpm)を確認してください。
STEP2. FireCrawl リポジトリのクローンと依存パッケージのインストール #
STEP2.1 FireCrawl のクローン #
cd /home/firecrawl git clone https://github.com/mendableai/firecrawl.gitSTEP2.2 依存パッケージのインストール #
cd /home/firecrawl/apps/api pnpm installSTEP2.3 .env ファイルの設定 #
/home/firecrawl/apps/api/.envを作成または編集し、必要な環境変数を設定します。例:# ===== 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 ツールチェーンの導入と HTML Transformer のビルド #
STEP3.1 Rust ツールチェーンのインストール #
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh source $HOME/.cargo/env rustc --version cargo --versionSTEP3.2 FireCrawl 内の Rust ライブラリディレクトリを確認 #
リポジトリルートで以下のコマンドを実行して、
Cargo.tomlのあるディレクトリを探します。cd /home/firecrawl find . -type f -name Cargo.toml | grep -i html-transformer例:
./sharedLibs/html-transformer/Cargo.tomlが見つかったら、そのディレクトリへ移動します。STEP3.3 Rust ライブラリのビルド #
cd /home/firecrawl/sharedLibs/html-transformer cargo build --releaseビルド成功時は
target/release/libhtml_transformer.soが生成されます。確認:ls target/release/libhtml_transformer.soSTEP3.4 ライブラリの配置または環境変数の設定 #
- 方法 A: FireCrawl の Node.js コードが相対パスで読み込むなら特に作業不要
- 方法 B: 必要に応じて
LD_LIBRARY_PATHに追加する
export LD_LIBRARY_PATH=/home/firecrawl/sharedLibs/html-transformer/target/release:$LD_LIBRARY_PATHsystemd で自動設定するには、サービスファイルに
Environment=LD_LIBRARY_PATH=...を追加してください。
STEP4. Playwright のセットアップとマイクロサービススクリプトの作成 #
STEP4.1 Playwright 依存パッケージのインストール #
Ubuntu 24.04 向けの依存ライブラリ例:
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 のブラウザインストール #
pnpm exec playwright installSTEP4.3 Playwright マイクロサービス用スクリプトの作成 #
/home/firecrawl/apps/apiにplaywright-service.jsを作成し、以下のコード例を貼り付けます。// 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 にスクリプト追加 #
/home/firecrawl/apps/api/package.jsonの"scripts"に下記を追加してください(既存項目とマージ)。"playwright-service": "node playwright-service.js"
STEP5. Systemd サービスの設定 #
FireCrawl サーバー、ワーカー、Playwright マイクロサービスを自動起動させるため、systemd ユニットファイルを作成します。
STEP5.1 FireCrawl サーバーサービス (/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 ワーカーサービス (/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 マイクロサービスサービス (/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=firecrawlを使う場合は、あらかじめfirecrawlユーザーを作成し、sudo chown -R firecrawl:firecrawl /home/firecrawlなどで所有権を設定しておきます。Environment=PATH=...では nvm 経由インストールの Node.js パスを通しています。環境に合わせて修正してください。- Rust ライブラリを相対パスで読み込んでいない場合は、
LD_LIBRARY_PATHの設定も必要です。
STEP5.4 Systemd サービスの有効化と起動 #
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>で各サービスがactive (running)になっているか確認してください。
STEP6. FireCrawl の再起動と検証 #
- .env の設定確認:
特にPLAYWRIGHT_MICROSERVICE_URLがhttp://localhost:3000/htmlになっているか要確認 - FireCrawl のサーバーとワーカーが起動:
ログに「Scrape via fetch…」などが出れば HTTP リクエストが正常に動いています - Playwright サービスの動作確認:
ブラウザでhttp://<サーバーIP>:3000/html?url=https://example.comにアクセスし、HTMLが返ってくればOK
STEP7. 最終確認 #
- Rustライブラリ:
target/release/libhtml_transformer.soが存在し、ログにエラーが出ないことを確認 - Playwright マイクロサービス:
正しく起動して JavaScriptレンダリングが行われるかテスト - 全体連携:
FireCrawl サーバー・ワーカー・Playwright が連携し、Dify等からのリクエストに正常応答するか最終チェック