Firecrawl Docker Compose 自托管排查:镜像、Redis、队列和 Playwright

环境和问题

最近在整理一套给 AI 应用使用的网页数据入口,选型里会看到 Firecrawl。它可以把网页搜索、抓取、页面内容转换成 Markdown 或结构化数据,再交给 RAG、Agent 或后续清洗流程。

自托管 Firecrawl 时,不能只看 docker compose up 有没有跑起来。它不是单容器服务,通常会涉及 API、Playwright service、Redis、RabbitMQ、Postgres、端口、队列管理 UI 和环境变量。

常见问题有这些:

text 复制代码
docker compose pull 卡在 GHCR 镜像
API 容器启动了,但 3002 端口没有响应
Redis connection refused
RabbitMQ healthcheck 一直失败
动态网页抓不到正文
Bull Queue 管理入口还是默认密钥

下面按排查顺序整理一遍。

1. 先做镜像预检

官方 Compose 中 Firecrawl API、Playwright service、nuq-postgres 可使用 GHCR 镜像,Redis 和 RabbitMQ 来自 Docker Hub。团队网络如果访问 GHCR 或 Docker Hub 不稳定,建议先把镜像入口单独测掉。

bash 复制代码
docker pull ghcr.1ms.run/firecrawl/firecrawl:latest
docker pull ghcr.1ms.run/firecrawl/playwright-service:latest
docker pull ghcr.1ms.run/firecrawl/nuq-postgres:latest
docker pull docker.1ms.run/library/redis:alpine
docker pull docker.1ms.run/library/rabbitmq:3-management

这里用毫秒镜像做的是镜像预检,不是改 Firecrawl 的功能。生产环境还要固定 tag 或 digest,并按团队安全流程做扫描和审批。

如果这一步都过不了,先不要排 API、Redis、Playwright。否则后面日志会很乱。

2. 检查 .env

自托管最少要关心这些变量:

env 复制代码
PORT=3002
HOST=0.0.0.0
USE_DB_AUTHENTICATION=false
BULL_AUTH_KEY=change-a-strong-value
REDIS_URL=redis://redis:6379
REDIS_RATE_LIMIT_URL=redis://redis:6379
PLAYWRIGHT_MICROSERVICE_URL=http://playwright-service:3000/scrape

几个注意点:

  • BULL_AUTH_KEY 不要用示例值。
  • 如果部署在公网机器,3002 端口不要直接暴露给所有来源。
  • PLAYWRIGHT_MICROSERVICE_URL 在 Compose 网络里应指向服务名,不要误填宿主机地址。
  • 如果启用代理、OpenAI-compatible API 或本地模型,先确认对应服务从容器网络里能访问。

3. 启动后看容器状态

bash 复制代码
docker compose ps
docker compose logs -f api
docker compose logs -f playwright-service
docker compose logs -f redis
docker compose logs -f rabbitmq

建议按这个表判断:

现象 优先看哪里
API 端口不响应 api 日志、端口映射、安全组
抓取任务提交后无结果 Redis、RabbitMQ、worker 日志
动态页面内容为空 Playwright service 是否正常
容器反复退出 .env、资源限制、镜像版本
队列管理页可访问但密钥很弱 立刻换 BULL_AUTH_KEY 并限制来源

4. 测本地 API

在服务启动后,可以先对内网页面或测试页面发起 crawl 请求:

bash 复制代码
curl -X POST http://127.0.0.1:3002/v2/crawl \
  -H 'Content-Type: application/json' \
  -d '{
    "url": "https://docs.example.local",
    "limit": 3
  }'

如果你使用的是旧接口或文档示例里的 v1 路径,要确认当前代码和 SDK 版本是否匹配。Firecrawl 近期版本对 v2 API 做了不少更新,路径不一致会造成"服务活着但调用失败"的错觉。

5. Playwright service 要单独给资源

Firecrawl 自托管里,动态页面渲染通常不是 API 容器自己扛,而是依赖 Playwright service。官方 Compose 给这个服务设置了 CPU/内存相关限制,说明它不是轻量旁路组件。

建议:

  • 动态页面多时,不要把 API 和浏览器服务挤在 1C1G 的机器上。
  • /tmp、日志和浏览器缓存留空间。
  • 如果只抓静态页面,可以减少并发。
  • 如果抓内网页面,先确认容器网络到目标站点的 DNS、路由和权限。

6. Redis 和 RabbitMQ 不要只看启动

Redis 和 RabbitMQ 启动成功不代表任务链路正常。至少要看:

bash 复制代码
docker compose exec redis redis-cli ping
docker compose exec rabbitmq rabbitmq-diagnostics -q check_running

再看任务提交后队列是否变化。如果任务堆积,优先查 worker、并发、资源和目标页面超时,不要只重启 API。

7. 上线前检查清单

检查项 建议
镜像版本 固定 tag 或 digest,不长期漂浮
队列入口 BULL_AUTH_KEY 使用强随机值
端口 API 和队列 UI 只对可信网络开放
数据库 不直接暴露 Postgres 端口
资源 Playwright service 单独规划 CPU/内存
结果 抓取结果进知识库前做去重和审核
合规 明确哪些页面能抓,哪些页面不能抓

总结

Firecrawl 自托管适合放在 RAG 和 Agent 的前面,解决网页搜索、抓取和内容转换问题。真正部署时,最容易卡住的往往不是 API 代码,而是镜像入口、队列、Redis、RabbitMQ、Playwright service 和资源限制。

毫秒镜像在这条链路里适合做第一层预检:先确认 GHCR 和 Docker Hub 相关镜像能不能进入环境,再继续排 Compose 配置和服务状态。这样比直接盯着 api 日志有效得多。

相关推荐
无小道9 小时前
Redis——集群
redis·集群
想你依然心痛10 小时前
AtomCode 在 DevOps 场景中的实战:CI/CD 流水线脚本自动生成
运维·ci/cd·docker·devops·自动化部署·github actions
用户67570498850210 小时前
Redis 分布式锁的 5个坑,真的是又大又深!!
redis·后端
摇滚侠10 小时前
DockerHub 在国内有没有替代
docker
spider_xcxc10 小时前
Redis 深度实践:安全管控、性能压测与持久化分析(二)
运维·前端·redis·云计算·bootstrap·运维开发
是大强11 小时前
Docker中文件修改的三种方法
运维·docker·容器
spider_xcxc1 天前
Redis 数据库高质量实践指南(一)
运维·数据库·redis·oracle·云计算
梦梦代码精1 天前
电商系统不是技术堆叠:LikeShop如何用分层Hold住复杂业务?
java·docker·代码规范
云烟成雨TD1 天前
Kubernetes 系列【4】基础概念
云原生·容器·kubernetes
YOU OU1 天前
Redis初识
数据库·redis·缓存