Ubuntu 24에 FireCrawl 설치

Ubuntu 24에 FireCrawl 설치

6 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/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.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_URL 이 http://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 2026년 10월 19일

What are your feelings

  • Happy
  • Normal
  • Sad

©2020 BESTNET.LLC . All Rights Reserved.