Firecrawl 快速部署指引

Firecrawl 是一个易于使用的网站内容爬取工具,也就是常规意义上的爬虫。不同的是 Firecrawl 在数据清洗环节为 AI 应用做了优化,能够将网站较好的转换为 Markdown 格式,同时又不至于让 Firecrawl 的使用过于复杂。

当然这里介绍 Firecrawl 的一大重要原因是 Firecrawl 是 Dify 默认支持的数据抓取工具,能够与 Dify 进行较好的集成。

在开始之前

本文所使用的安装环境为:Docker version 27.5.1 / Docker Compose version v2.32.4

Firecrawl 除了在本地部署以外,还可以直接使用其云服务,直接访问官网注册账号即可使用。相比与云服务,社区版会缺少相当一部分功能,大致功能划分可以参照下图官方图解:

open-source-cloud.png

与 Dify 不同,Firecrawl 的社区版和云服务版基本是两个东西。如果只是与 Dify 结合使用,也就是本文指引将会介绍的内容来说,社区版是完全足够使用的。

部署 Firecrawl

Firecrawl 官方并未提供打包好的容器,需要通过官方仓库打包镜像再运行。你可以在 Firecrawl Releases 页面找到最新的 Firecrawl 版本号,这在之后的构建容器时会使用到。

官方介绍的方式是从源代码自行构建镜像,但是由于国内网络环境原因,构建镜像大概率会失败。个人更推荐使用如 Github Actions 的服务来帮你构建镜像。本文会按顺序介绍这两种方式,如果你的网络存在问题,可直接跳跃至 从 Github Actions 构建镜像

从源代码构建

按照下列步骤构建镜像

git clone https://github.com/mendableai/firecrawl.git
cd firecrawl
git reset main --hard
git pull --force
git checkout v1.6.0  # 替换成你在 Firecrawl Releases 中找到的最新版本

如果你的设备存在网络限制,你可以使用 git clone -c http.proxy=http://127.0.0.1:7890 -c https.proxy=https://127.0.0.1:7890 https://github.com/mendableai/firecrawl.git 来克隆仓库(注意替换代理地址为自己的地址)

在 firecrawl 目录中,新建 .env 文件,内容参照下文进行修改:

# ===== 必须环境变量 ======

NUM_WORKERS_PER_QUEUE=8
PORT=3002
HOST=0.0.0.0

## Docker 部署的情况下不需要更改这些链接
REDIS_URL=redis://redis:6379
REDIS_RATE_LIMIT_URL=redis://redis:6379
PLAYWRIGHT_MICROSERVICE_URL=http://playwright-service:3000/html

## 开启 DB authentication,开启此项需要完成 supabase 配置
USE_DB_AUTHENTICATION=true

# ===== 可选环境变量 ======

# SearchApi key. Head to https://searchapi.com/ to get your API key
SEARCHAPI_API_KEY=
# SearchApi engine, defaults to google. Available options: google, bing, baidu, google_news, etc. Head to https://searchapi.com/ to explore more engines
SEARCHAPI_ENGINE=

# Supabase 配置(用于支持 DB authentication、高级日志记录等。)
SUPABASE_ANON_TOKEN=
SUPABASE_URL=
SUPABASE_SERVICE_TOKEN=

# 其他可选配置

# 如果您已经设置了认证,并想要使用真实的API密钥进行测试,请设置此值
TEST_API_KEY=
# 如果您想要测试单页爬取速率限制,请设置此值
RATE_LIMIT_TEST_API_KEY_SCRAPE=
# 如果您想要测试站点爬取速率限制,请设置此值
RATE_LIMIT_TEST_API_KEY_CRAWL=
# 如果您想要使用 Scraping Be 来处理 JS 阻塞,请设置此值
SCRAPING_BEE_API_KEY=
# 为依赖于 LLM 的功能添加(如图片 Alt 文本生成等)
OPENAI_API_KEY=
# 队列管理面板访问密钥,若 Firecrawl 为公开部署,则需要设置此值
BULL_AUTH_KEY=@
# 如果要使用 llamaparse 来解析 PDF 文件,请设置此值
LLAMAPARSE_API_KEY=
# 如果要将健康状态信息发送至 slack,请设置此值
SLACK_WEBHOOK_URL=
# 如果您想要发送如作业日志之类的 posthog 事件,请设置此值
POSTHOG_API_KEY=
POSTHOG_HOST=

# 文档并未对此部分做出解释
STRIPE_PRICE_ID_STANDARD=
STRIPE_PRICE_ID_SCALE=
STRIPE_PRICE_ID_STARTER=
STRIPE_PRICE_ID_HOBBY=
STRIPE_PRICE_ID_HOBBY_YEARLY=
STRIPE_PRICE_ID_STANDARD_NEW=
STRIPE_PRICE_ID_STANDARD_NEW_YEARLY=
STRIPE_PRICE_ID_GROWTH=
STRIPE_PRICE_ID_GROWTH_YEARLY=

# Fire Engine 的封测版配置,保留为空
FIRE_ENGINE_BETA_URL=

# Playwright 服务的代理设置(另外,你还可以使用像 oxylabs 这样的代理服务,这样就可以每次请求时自动更换IP)
PROXY_SERVER=
PROXY_USERNAME=
PROXY_PASSWORD=
# 设置此项阻止媒体链接来节省代理流量/带宽
BLOCK_MEDIA=

# 本地部署 FireCrawl 时,设置此项为 webhook 的 URL
SELF_HOSTED_WEBHOOK_URL=

# 用于邮件服务的 Resend API Key
RESEND_API_KEY=

# LOGGING_LEVEL,输出日志等级,可选项如下
# NONE - No logs will be output.
# ERROR - For logging error messages that indicate a failure in a specific operation.
# WARN - For logging potentially harmful situations that are not necessarily errors.
# INFO - For logging informational messages that highlight the progress of the application.
# DEBUG - For logging detailed information on the flow through the system, primarily used for debugging.
# TRACE - For logging more detailed information than the DEBUG level.
# Set LOGGING_LEVEL to one of the above options to control logging output.
LOGGING_LEVEL=INFO

如果你觉得头大,那么按照本文的教程指引,你只需要将 .env 文件设置为如下内容:

NUM_WORKERS_PER_QUEUE=8
PORT=3002
HOST=0.0.0.0

REDIS_URL=redis://redis:6379
REDIS_RATE_LIMIT_URL=redis://redis:6379
PLAYWRIGHT_MICROSERVICE_URL=http://playwright-service:3000/html

USE_DB_AUTHENTICATION=false
BULL_AUTH_KEY=@

保存 .env 文件,之后执行以下命令来构建和运行 Firecrawl:

sudo docker compose build
sudo docker compose up

从源代码构建时,镜像给构建完成之后可以直接启动,访问 http://<Firecrawl-IP>:3002/admin/@/queues 即可打开数据抓取队列管理页面,此处 URL 中的 @ 为 .env 文件中的 BULL_AUTH_KEY 设置值。

从 GitHub Actions 构建

Github Actions 简单理解就是可以利用 Github 的公共服务器资源做一些事情,由于服务器是 Github 的,就没有什么网络问题。

此处对此不多介绍,可以直接使用封装好的仓库:MitsuhaYuki/firecrawl-docker-image

如果你对 Github Actions Workflow 感兴趣,此处使用的脚本源代码可以点击这里查看。

首先打开 Releases 页面,下载最新版中附件中的 docker-images.zip 文件,在本地进行解压得到 api-image.tar 和 playwright-image.tar,将这两个文件上传到服务器,运行以下指令导入镜像到 Docker:

sudo docker load -i api-image.tar
sudo docker tag api:v1.6.0 firecrawl/api:v1.6.0
sudo docker load -i playwright-image.tar
sudo docker tag playwright:v1.6.0 firecrawl/playwright:v1.6.0

之后就可以按照通常流程,首先创建容器编排 docker-compose.yaml

x-common-env: &common-env
  REDIS_URL: ${REDIS_URL:-redis://redis:6379}
  REDIS_RATE_LIMIT_URL: ${REDIS_URL:-redis://redis:6379}
  PLAYWRIGHT_MICROSERVICE_URL: ${PLAYWRIGHT_MICROSERVICE_URL:-http://playwright-service:3000/scrape}
  USE_DB_AUTHENTICATION: ${USE_DB_AUTHENTICATION}
  OPENAI_API_KEY: ${OPENAI_API_KEY}
  OPENAI_BASE_URL: ${OPENAI_BASE_URL}
  MODEL_NAME: ${MODEL_NAME}
  MODEL_EMBEDDING_NAME: ${MODEL_EMBEDDING_NAME}
  OLLAMA_BASE_URL: ${OLLAMA_BASE_URL}
  SLACK_WEBHOOK_URL: ${SLACK_WEBHOOK_URL}
  BULL_AUTH_KEY: ${BULL_AUTH_KEY}
  TEST_API_KEY: ${TEST_API_KEY}
  POSTHOG_API_KEY: ${POSTHOG_API_KEY}
  POSTHOG_HOST: ${POSTHOG_HOST}
  SUPABASE_ANON_TOKEN: ${SUPABASE_ANON_TOKEN}
  SUPABASE_URL: ${SUPABASE_URL}
  SUPABASE_SERVICE_TOKEN: ${SUPABASE_SERVICE_TOKEN}
  SCRAPING_BEE_API_KEY: ${SCRAPING_BEE_API_KEY}
  SELF_HOSTED_WEBHOOK_URL: ${SELF_HOSTED_WEBHOOK_URL}
  SERPER_API_KEY: ${SERPER_API_KEY}
  SEARCHAPI_API_KEY: ${SEARCHAPI_API_KEY}
  LOGGING_LEVEL: ${LOGGING_LEVEL}
  PROXY_SERVER: ${PROXY_SERVER}
  PROXY_USERNAME: ${PROXY_USERNAME}
  PROXY_PASSWORD: ${PROXY_PASSWORD}
  SEARXNG_ENDPOINT: ${SEARXNG_ENDPOINT}
  SEARXNG_ENGINES: ${SEARXNG_ENGINES}
  SEARXNG_CATEGORIES: ${SEARXNG_CATEGORIES}

services:
  playwright-service:
    environment:
      PORT: 3000
      PROXY_SERVER: ${PROXY_SERVER}
      PROXY_USERNAME: ${PROXY_USERNAME}
      PROXY_PASSWORD: ${PROXY_PASSWORD}
      BLOCK_MEDIA: ${BLOCK_MEDIA}
    image: firecrawl/playwright:v1.6.0
    networks:
      - backend

  api:
    command: ["pnpm", "run", "start:production"]
    depends_on:
      - redis
      - playwright-service
    environment:
      <<: *common-env
      HOST: "0.0.0.0"
      PORT: ${INTERNAL_PORT:-3002}
      FLY_PROCESS_GROUP: app
    image: firecrawl/api:v1.6.0
    networks:
      - backend
      - default
    ports:
      - "${PORT:-3002}:${INTERNAL_PORT:-3002}"

  worker:
    command: ["pnpm", "run", "workers"]
    depends_on:
      - redis
      - playwright-service
      - api
    environment:
      <<: *common-env
      FLY_PROCESS_GROUP: worker
    image: firecrawl/api:v1.6.0
    networks:
      - backend

  redis:
    command: redis-server --bind 0.0.0.0
    image: redis:alpine
    networks:
      - backend

networks:
  backend:
    driver: bridge

在容器编排同目录下,创建环境变量配置文件 .env,.env 文件详细配置参照上文 从源代码构建 有详细说明。

NUM_WORKERS_PER_QUEUE=8
PORT=3002
HOST=0.0.0.0

REDIS_URL=redis://redis:6379
REDIS_RATE_LIMIT_URL=redis://redis:6379
PLAYWRIGHT_MICROSERVICE_URL=http://playwright-service:3000/html

USE_DB_AUTHENTICATION=false
BULL_AUTH_KEY=@

使用命令 sudo docker compose -p firecrawl up -d 即可启动 firecrawl 服务,访问 http://<Firecrawl-IP>:3002/admin/@/queues 即可打开数据抓取队列管理页面,此处 URL 中的 @ 为 .env 文件中的 BULL_AUTH_KEY 设置值。

Firecrawl WebUI

当你访问队列管理页面时,会打开如下页面:

2025-03-25_13-04-02.png

这是由于社区版目前无法调用 Fire Engine,所以没有后台管理页面。这个页面实际是内部数据抓取队列管理页面,对于基本操作管理也算是够用。

在 Dify 中集成 Firecrawl

配置 Firecrawl 集成

打开 Dify 工作室,点击右上角 头像-设置 来打开 Dify 设置:

2025-03-25_13-22-48.png

此处的设置项中,API Key 设置为先前 .env 文件配置中的 BULL_AUTH_KEY 的值,Base URLhttp://<Firecrawl-IP>:3002。设置完成后点击保存,稍等片刻即可看到提示保存完成:

2025-03-25_13-22-55.png

此时 Dify 的 Firecrawl 集成即配置完成。

在知识库中使用 Firecrawl

在 Dify 的知识库页面,选择 创建知识库 - 同步自 Web 站点 即可打开 Firecrawl 数据抓取配置。

2025-03-25_15-29-10.png

在这个页面中,最上方的输入框用于输入要抓取的 URL,下方是具体的数据爬取设置。

  • 爬取子页面:如果给定链接所在的页面中存在子页面链接,是否要自动跟随并爬取子页面内容。

  • 限制数量:最大允许爬取的页面数量,此处仅做测试设为 1,即只爬取给定页面。

  • 最大深度:相对于给定链接的最大 URL 爬取深度,假设给定链接 http://testdomain.com/test/ ,如果此值设为 1 时,Firecrawl 只会爬取 http://testdomain.com/test/*/ 的页面内容。

  • 排除路径:即黑名单,不允许抓取的 URL 路径。

  • 仅包含路径:即白名单,只允许抓取给定的 URL 路径。

  • 仅提取主要内容:顾名思义,抓取页面内容时排除无用块内容。

当配置完成后,点击 运行,开始爬取数据:

2025-03-25_15-30-44.png

此处会显示除所有爬取到的页面,勾选你想要保留的页面,点击下一步进入知识库创建流程。

2025-03-25_15-32-19.png

此处我是用的 nomic-embed-text 作为 Embedding 模型,jina-reranker-v2-base-multilingual 作为 Reranker 模型进行知识库创建。点击保存后稍等片刻等待知识库索引完成。

2025-03-25_15-33-05.png

测试知识库调用

在聊天助手中知识库设置里添加刚刚创建的知识库,然后在 调试和预览 中点击右上角刷新就可以进行测试:

2025-03-25_16-03-24.png

当调试区域显示正确的知识调用即代表知识库已可用。

拓展内容

Dify 调用错误,Firecrawl 后台报错 All scraping engines failed! Please double check...

检查你的 docker-compose.yaml 文件。在 api 服务的 netowork 设定中,除了 -backend 以外,还需要添加 -default 网络才能让容器正确连接网络。可以参照 从 GitHub Actions 构建 章节中的 docker-compose.yamlservice - api 块进行修改。

Dify 知识库创建时,爬取到快完成时卡住

截至写作时版本的 Dify(v1.1.3)在调用自部署版本的 Firecrawl 时,在抓取页面时有概率出现抓取到页面但不创建爬取任务的情况,此 Bug 在 Dify 使用云服务版本的 Firecrawl 时不存在。

其他 Firecrawl 调用问题

实际上在你使用自部署版 Firecrawl 时,受限制相比云服务版多很多,比如你只能爬取 https 站点、无法设置爬取速率限制、没有后台管理面板、没有自动 IP 池等等。如果你确实需要类似 Firecrawl 这样的工具,那么优先推荐使用云服务版本,会省心很多。

目前如果你要使用自部署 Firecrawl,那么只能推荐你提前区分好要爬取的站点,设置好只爬取自己需要的页面,或者干脆只用 Firecrawl 来爬取单一页面,那么基本就不会遇到问题。


Firecrawl 快速部署指引
https://blog.tihus.com//archives/78fdbc89-6faf-42a9-8369-616f8bb19e50
作者
MitsuhaYuki
发布于
2025年03月25日
更新于
2025年03月25日
许可协议