Ubuntu24にFireCrawlをインストール

Ubuntu24にFireCrawlをインストール

5 min read

本手順では、以下の構成を最終的なゴールとします。

  1. FireCrowl (APIサーバー & ワーカー) を Ubuntu 24 にインストール
  2. Node.js はシステム全体にインストールし、グローバルに pnpm を利用
  3. Rust ツールチェーン(rustup など)を導入し、FireCrawl の Rust 製 HTML 変換ライブラリ(html-transformer)をビルド
  4. Playwright の依存パッケージのインストールと、独自の Playwright マイクロサービススクリプトの作成
  5. 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-dev
    

    STEP1.2 NodeSource から Node.js のインストール #

    curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
    sudo apt-get install -y nodejs
    

    STEP1.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.git
    

    STEP2.2 依存パッケージのインストール #

    cd /home/firecrawl/apps/api
    pnpm install
    

    STEP2.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 --version
    

    STEP3.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.so
    

    STEP3.4 ライブラリの配置または環境変数の設定 #

    • 方法 A: FireCrawl の Node.js コードが相対パスで読み込むなら特に作業不要
    • 方法 B: 必要に応じて LD_LIBRARY_PATH に追加する
    export LD_LIBRARY_PATH=/home/firecrawl/sharedLibs/html-transformer/target/release:$LD_LIBRARY_PATH
    

    systemd で自動設定するには、サービスファイルに
    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-utils
    

    STEP4.2 Playwright のブラウザインストール #

    pnpm exec playwright install
    

    STEP4.3 Playwright マイクロサービス用スクリプトの作成 #

    /home/firecrawl/apps/apiplaywright-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.target
    

    STEP5.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.target
    

    STEP5.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-playwright
    

    sudo systemctl status <service> で各サービスが active (running) になっているか確認してください。


    STEP6. FireCrawl の再起動と検証 #

    1. .env の設定確認:
      特に PLAYWRIGHT_MICROSERVICE_URLhttp://localhost:3000/html になっているか要確認
    2. FireCrawl のサーバーとワーカーが起動:
      ログに「Scrape via fetch…」などが出れば HTTP リクエストが正常に動いています
    3. Playwright サービスの動作確認:
      ブラウザで http://<サーバーIP>:3000/html?url=https://example.com にアクセスし、HTMLが返ってくればOK

    STEP7. 最終確認 #

    • Rustライブラリ:
      target/release/libhtml_transformer.so が存在し、ログにエラーが出ないことを確認
    • Playwright マイクロサービス:
      正しく起動して JavaScriptレンダリングが行われるかテスト
    • 全体連携:
      FireCrawl サーバー・ワーカー・Playwright が連携し、Dify等からのリクエストに正常応答するか最終チェック
Updated on 2025年3月3日

What are your feelings

  • Happy
  • Normal
  • Sad
目次