📚 离职知识库

Firecrawl 自建实例 —— 这次做了什么 & 以后怎么删干净

部署日期:2026-07-25 目的:替代官方 api.firecrawl.dev(免费额度快耗尽),网页抓取/搜索全走自己的东京 VPS。 详细凭据与运维命令见 ~/Desktop/配置信息/Firecrawl自建实例.md这份文档的重点是:以后想拆掉的时候,照第二部分从上到下执行即可。


#第一部分:这次到底动了哪些东西

一共动了 5 个地方,删的时候要一一对应清掉,漏了哪个就会留垃圾。

#1. Vercel DNS(saveme505.help)

新增一条 A 记录:

类型 名称 记录 ID
A firecrawl <IP>(tky 的 IPv4) <ID>

#2. tky 服务器上的文件

路径 说明
<HOME>/firecrawl/ 整个项目目录(GitHub 仓库克隆 + 配置),约 83MB
<HOME>/firecrawl/.env 环境变量(含数据库密码、队列台密钥)
<HOME>/firecrawl/docker-compose.override.yaml 我加的本机配置(SearXNG、端口只绑 127.0.0.1、重启策略)
<HOME>/firecrawl/searxng/settings.yml SearXNG 配置(开 JSON 输出)
<HOME>/firecrawl/docker-compose.yaml 被我改过一行build: apps/apiimage: ghcr.io/firecrawl/firecrawl:latest
<HOME>/firecrawl/build.log 那次失败的本地构建日志,留着做记录

#3. tky 上的 Docker 资源

容器(6 个,全部 restart: unless-stopped,重启机器会自己回来):

firecrawl-api-1                 主服务 + 10 个 worker 进程
firecrawl-playwright-service-1  无头浏览器渲染
firecrawl-nuq-postgres-1        队列数据库
firecrawl-redis-1               缓存/限流
firecrawl-rabbitmq-1            消息队列
firecrawl-searxng-1             自建搜索后端(/v1/search 靠它)

镜像(合计约 5.5GB):

ghcr.io/firecrawl/firecrawl:latest      2.5GB   官方预构建
firecrawl-playwright-service:latest     1.93GB  本地构建
firecrawl-nuq-postgres:latest           642MB   本地构建
searxng/searxng:latest                  377MB
rabbitmq:3-management                   392MB
redis:alpine                            155MB

⚠️ 删镜像时千万别顺手删掉 postgres:15redis:latest——那两个是 llm-relay(relay.saveme505.help)在用的,跟 Firecrawl 无关。Firecrawl 用的是 redis:alpine

firecrawl_fdb-cluster-file 网络firecrawl_backend(子网 172.19.0.0/16)

#4. tky 上的 nginx 与证书

路径 说明
/etc/nginx/sites-available/firecrawl.saveme505.help 反代配置,含 Bearer token 校验 + /admin/ 屏蔽
/etc/nginx/sites-enabled/firecrawl.saveme505.help 上面那个的软链
/etc/letsencrypt/live/firecrawl.saveme505.help/ Let's Encrypt 证书(certbot 已排了自动续期)

#5. 你 Mac 上的 Claude Code 配置

~/.claude.jsonprojects./Users/<user>/.mcpServers.firecrawl,从官方托管 MCP 改成了自建:

// 改之前(官方云端)
{
  "type": "http",
  "url": "https://mcp.firecrawl.dev/v2/mcp",
  "headers": { "Authorization": "Bearer <KEY>" }
}

// 改之后(自建)
{
  "command": "npx",
  "args": ["-y", "firecrawl-mcp"],
  "env": {
    "FIRECRAWL_API_URL": "https://firecrawl.saveme505.help",
    "FIRECRAWL_API_KEY": "<KEY>"
  }
}

整份文件已备份~/.claude.json.bak-firecrawl-20260725-145519

另外还写了:

  • ~/Desktop/配置信息/Firecrawl自建实例.md(凭据 + 运维 + 踩坑)
  • 记忆文件 ~/.claude/projects/-Users-<user>/memory/project_firecrawl_selfhosted.md,并在 MEMORY.md 加了一行索引
  • 顺带更新了 project_tky_kworker_storm.md(把这次「重量级 docker build 打爆机器」的教训补了进去)

#第二部分:以后怎么删干净

新开窗口时,把这份文档拖进去,跟 Claude 说「按这份文档第二部分卸载 Firecrawl 自建实例」即可。 下面 6 步按顺序执行,每步都给了验证方法。

#步骤 0:先决定 MCP 之后怎么办

删掉自建实例后,Claude Code 的 firecrawl MCP 会失效。两个选择:

  • A. 换回官方云端 MCP(第一部分第 5 节有原配置,或直接用备份文件恢复)
  • B. 彻底不要 firecrawl,把 mcpServers 里的 firecrawl 整个条目删掉

先想好再往下走,否则删完会发现搜索/抓取工具全没了。

#步骤 1:改 Mac 上的 MCP 配置

最省事的办法是直接恢复备份:

cp ~/.claude.json.bak-firecrawl-20260725-145519 ~/.claude.json

⚠️ 这会把 .claude.json 整份回滚到 2026-07-25 14:55 的状态。如果那之后你又装过别的 MCP 或改过别的设置,会一并丢失。 不确定的话,改用下面这段只动 firecrawl 一项:

# 选 A:换回官方云端 MCP
python3 - <<'PY'
import json
p='/Users/<user>/.claude.json'
d=json.load(open(p))
d['projects']['/Users/<user>']['mcpServers']['firecrawl']={
  "type":"http",
  "url":"https://mcp.firecrawl.dev/v2/mcp",
  "headers":{"Authorization":"Bearer <KEY>"}
}
json.dump(d,open(p,'w'),ensure_ascii=False,indent=2)
print('已换回官方云端 MCP')
PY

# 选 B:彻底删掉 firecrawl MCP
python3 - <<'PY'
import json
p='/Users/<user>/.claude.json'
d=json.load(open(p))
d['projects']['/Users/<user>']['mcpServers'].pop('firecrawl',None)
json.dump(d,open(p,'w'),ensure_ascii=False,indent=2)
print('已删除 firecrawl MCP 条目')
PY

改完要重启 Claude Code 才生效。

#步骤 2:停掉并删除 tky 上的容器

ssh <VPS>
cd <HOME>/firecrawl

# 停止并删除容器、网络、卷(-v 会一并删掉 firecrawl_fdb-cluster-file 卷)
docker compose down -v --remove-orphans

# 验证:应该一个都不剩
docker ps -a --filter name=firecrawl
docker volume ls -q | grep -i firecrawl
docker network ls --format '{{.Name}}' | grep -i firecrawl

#步骤 3:删镜像(回收约 5.5GB 磁盘)

docker rmi ghcr.io/firecrawl/firecrawl:latest \
           firecrawl-playwright-service:latest \
           firecrawl-nuq-postgres:latest \
           searxng/searxng:latest \
           rabbitmq:3-management \
           redis:alpine

# 清掉构建缓存(本地那次失败的构建可能留了不少)
docker builder prune -af

⚠️ 再强调一次:别删 postgres:15redis:latest,那是 llm-relay 的。 验证 llm-relay 没被误伤:docker ps --filter name=llm-relay 应该还有两个容器在跑, 且 curl -s -o /dev/null -w '%{http_code}\n' https://relay.saveme505.help/ 返回 200。

#步骤 4:删项目目录

rm -rf <HOME>/firecrawl

#步骤 5:删 nginx 配置与证书

# nginx
rm -f /etc/nginx/sites-enabled/firecrawl.saveme505.help
rm -f /etc/nginx/sites-available/firecrawl.saveme505.help
nginx -t && systemctl reload nginx

# 证书(连同自动续期任务一起删)
certbot delete --cert-name firecrawl.saveme505.help --non-interactive

nginx -t 可能会报 conflicting server name "scribe-api.saveme505.help" 的警告—— 那是 sites-enabled 里一个叫 scribe-api.saveme505.help.bak-20260722-2323 的残留软链造成的, 跟 Firecrawl 无关,本来就有。顺手清掉也行:rm -f /etc/nginx/sites-enabled/*.bak-*

#步骤 6:删 DNS 记录

在 Mac 上执行:

vercel dns rm <ID>

# 验证:应该查不到 firecrawl 这条
vercel dns ls saveme505.help | grep firecrawl

#收尾验证

# 域名应该不再解析到 tky,或直接连不上
curl -s -o /dev/null -w '%{http_code}\n' -m 15 https://firecrawl.saveme505.help/

# 其余站点必须都还活着
for u in relay hub line scribe-api; do
  curl -s -o /dev/null -w "$u -> %{http_code}\n" -m 15 https://$u.saveme505.help/
done

# tky 上的常驻服务
ssh <VPS> "ss -ltnp | grep -E ':(8646|11434|8080)'; systemctl is-active actions.runner.* | head -1"

#可选:清理笔记与记忆

rm -f ~/Desktop/配置信息/Firecrawl自建实例.md
rm -f ~/Desktop/Firecrawl自建实例-部署与卸载.md   # 就是这份
rm -f ~/.claude/projects/-Users-<user>/memory/project_firecrawl_selfhosted.md
# 再手动把 MEMORY.md 里那行「Firecrawl自建实例」删掉

project_tky_kworker_storm.md 里补的那段教训建议留着——它记的是「tky 上不要跑重量级本地构建」,跟 Firecrawl 删不删无关。


#附:删之前值得先想一下

  • 官方免费额度还剩多少? 当初自建就是因为额度快耗尽。删回官方前先确认额度够用,否则删完还是没得抓。

  • 磁盘压力大吗? 这套占 5.5GB 镜像 + 83MB 代码。tky 是 450G 盘、目前用了 22%,不删也完全不占地方。

  • 只是不想让它常驻跑? 那不用整套删,docker compose stop 就行,需要时再 up -d 起来,几秒钟的事:

    ssh <VPS> "cd <HOME>/firecrawl && docker compose stop"
    # 想恢复
    ssh <VPS> "cd <HOME>/firecrawl && docker compose up -d api playwright-service redis rabbitmq nuq-postgres searxng"

来源:沉淀/01-云与基础设施/Firecrawl自建实例-部署与卸载.md(整理于 2026-08-18)