部署教程:AnyCrawl

1. 准备工作与环境要求

无论选择哪种方式,请先确保你的系统满足以下基本要求:

  • 操作系统:macOS 或 Linux(Ubuntu/Debian 等)。Windows 可通过 WSL2 支持。
  • 核心工具
    • Git:用于克隆仓库。
    • Node.js: 版本 20 或更高。AnyCrawl 基于 Node.js/TypeScript 构建。
    • 包管理器: pnpm。项目使用 pnpm workspace 进行管理。
    • DockerDocker Compose:版本 20.10 和 2.0 或更高(如果选择 Docker 方式)。

2. 方式一:使用 Docker 部署(推荐)

这是最快捷的方式,AnyCrawl 提供了预构建的 Docker 镜像。

  1. 克隆仓库(可选)
    虽然可以直接拉取镜像,但为了配置方便,建议克隆仓库以获取示例配置文件。

    1
    2
    git clone https://github.com/any4ai/anycrawl.git
    cd anycrawl
  2. 配置环境变量(关键步骤)
    创建 .env 文件来配置服务。你可以基于 .env.example 来创建。

    1
    cp .env.example .env

    编辑 .env 文件,至少需要关注以下核心变量:

    变量名 描述 示例值
    ANYCRAWL_API_PORT API 服务端口 8080
    ANYCRAWL_API_AUTH_ENABLED 是否启用 API 认证 true (生产环境建议开启)
    ANYCRAWL_REDIS_URL Redis 连接地址 redis://redis:6379
    ANYCRAWL_HEADLESS 浏览器引擎是否无头运行 true

    配置LLM提供商(用于AI提取)
    如果需要使用AI提取结构化JSON功能,需要配置LLM提供商。AnyCrawl支持OpenAI兼容的API,例如Atlas Cloud。

    1
    2
    3
    4
    5
    # 以 Atlas Cloud 为例
    ATLASCLOUD_BASE_URL=https://api.atlascloud.ai/v1
    ATLASCLOUD_API_KEY=你的AtlasCloud_API_Key
    DEFAULT_LLM_MODEL=atlascloud/deepseek-v3
    DEFAULT_EXTRACT_MODEL=atlascloud/deepseek-v3
  3. 启动服务
    使用 Docker Compose 一键启动所有相关服务(API, Redis, 及各种抓取引擎)。

    1
    docker-compose up -d

    这会以后台模式启动服务。首次启动可能需要拉取镜像,请耐心等待。

  4. 验证部署
    检查服务是否正常运行。

    1
    2
    curl http://localhost:8080/health
    # 应返回 ok

    你也可以通过访问 http://localhost:8080 来查看 API 是否响应。

  5. 生成 API 密钥(如果启用了认证)
    如果设置了 ANYCRAWL_API_AUTH_ENABLED=true,你需要生成一个 API 密钥才能调用 API。

    1
    2
    3
    4
    # 在运行中的 api 容器内执行
    docker compose exec api pnpm --filter api key:generate
    # 或为密钥命名
    docker compose exec api pnpm --filter api key:generate -- default

    命令会打印出 uuidkeycredits。请保存好这个 key,后续调用 API 时需要作为 Bearer Token 使用。

3. 方式二:从源码部署(开发/定制)

如果你需要对 AnyCrawl 进行二次开发或定制,可以选择从源码部署。

  1. 克隆仓库并安装依赖

    1
    2
    3
    git clone https://github.com/any4ai/anycrawl.git
    cd anycrawl
    pnpm install
  2. 构建项目

    1
    pnpm build
  3. 配置环境
    同样需要创建 .env 文件进行配置,参考方式一中的步骤2。

  4. 启动开发服务

    1
    2
    3
    # 启动 API 服务
    pnpm --filter api dev
    # 其他服务(如 scrape engines)需要在各自的包中启动

    源码部署更复杂,涉及多个微服务,建议参考项目中的 docker-compose.yml 文件来理解完整的服务架构。

4. 基本使用示例

部署成功后,可以通过 API 进行调用。以下示例假设你部署在本地 8080 端口,且未启用认证。

1. 抓取单个页面(Scrape)

1
2
3
4
5
6
7
curl -X POST http://localhost:8080/v1/scrape \
-H 'Content-Type: application/json' \
-d '{
"url": "https://example.com",
"engine": "cheerio",
"formats": ["markdown"]
}'
  • engine: 可选 cheerio (最快,静态HTML), playwright (支持JavaScript渲染), puppeteer (Chrome引擎)。
  • formats: 输出格式,如 markdown, html, json, screenshot 等。

2. 带LLM提取的结构化数据抓取

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
curl -X POST http://localhost:8080/v1/scrape \
-H 'Content-Type: application/json' \
-d '{
"url": "https://github.com/any4ai/AnyCrawl",
"engine": "auto",
"formats": ["markdown", "json"],
"json_options": {
"schema": {
"type": "object",
"properties": {
"project_name": { "type": "string" },
"core_features": { "type": "array", "items": { "type": "string" } }
},
"required": ["project_name"]
},
"user_prompt": "Extract the project name and its core features from the page."
}
}'

注意:使用 json_options 时,formats 数组中必须包含 "json",否则响应中不会返回提取的JSON数据。

3. 爬取整个网站(Crawl)

1
2
3
4
5
6
7
8
curl -X POST http://localhost:8080/v1/crawl \
-H 'Content-Type: application/json' \
-d '{
"url": "https://example.com",
"max_depth": 2,
"limit": 10,
"strategy": "same-domain"
}'

这会创建一个异步爬取任务,返回一个 job_id,你可以通过轮询 /v1/crawl/{job_id}/status 来获取结果。

5. 重要配置与注意事项

  • 代理配置:AnyCrawl 支持灵活的代理配置,可以通过环境变量 ANYCRAWL_PROXY_URL 设置全局代理,或通过 ANYCRAWL_PROXY_CONFIG 文件设置基于URL规则的代理路由。
  • 认证与安全:生产环境务必启用 ANYCRAWL_API_AUTH_ENABLED=true 并使用 key:generate 命令创建强密钥。
  • 数据持久化:Docker 部署默认使用 SQLite 作为数据库,数据库文件位于容器内。如需持久化,请挂载卷或配置使用 PostgreSQL。
  • 性能与资源:对于大规模抓取任务,建议监控内存和CPU使用情况,并考虑使用 ANYCRAWL_PROXY_URL 配置代理池来避免IP被封禁。
  • 浏览器引擎:在 Apple Silicon (ARM64) 架构上使用 Docker 时,puppeteer 引擎可能不被支持,可以设置 platform: linux/amd64 或使用 playwright 引擎。