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/api → image: 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:15和redis: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.json → projects./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:15和redis: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)