AnyCrawl

Docker deployment

Using docker to run AnyCrawl

前置要求

在开始之前,请确保您的系统已安装以下软件:

  • Docker: 版本 20.10 或更高
  • Docker Compose: 版本 2.0 或更高

安装 Docker 和 Docker Compose

macOS

# 使用 Homebrew 安装
brew install docker docker-compose

# 或者下载 Docker Desktop
# https://www.docker.com/products/docker-desktop

Ubuntu/Debian

# 安装 Docker
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

快速开始

1. 克隆项目

git clone https://github.com/any4ai/AnyCrawl.git
cd AnyCrawl

2. 启动服务

# 构建并启动所有服务
docker compose up --build

# 或者在后台运行
docker compose up --build -d

3. 验证部署

# 检查服务状态
docker compose ps

# 测试 API 是否正常运行
curl http://localhost:8080/health

服务架构

AnyCrawl 采用微服务架构,包含以下服务:

核心服务

服务名称描述端口依赖
apiAPI 网关和主要服务接口8080redis
scrape-puppeteerPuppeteer 爬虫引擎-redis
scrape-playwrightPlaywright 爬虫引擎-redis
scrape-cheerioCheerio 爬虫引擎(不支持 SPA)-redis
redis消息队列和缓存6379-

环境变量配置

基础配置

变量名描述默认值示例
NODE_ENV运行环境productionproduction, development
ANYCRAWL_API_PORTAPI 服务端口80808080

爬虫配置

变量名描述默认值示例
ANYCRAWL_HEADLESS是否使用无头模式truetrue, false
ANYCRAWL_PROXY_URL基础代理服务器地址-http://proxy:8080
ANYCRAWL_PROXY_STEALTH_URL隐身代理服务器地址-http://residential-proxy:8080
ANYCRAWL_PROXY_STEALTH_CREDITS使用隐身代理时额外消耗的积分55
ANYCRAWL_STEALTH_TIMEOUT_MS隐身/auto 代理模式默认超时(毫秒)120000120000
ANYCRAWL_IGNORE_SSL_ERROR忽略 SSL 错误truetrue, false

数据库配置

变量名描述默认值
ANYCRAWL_API_DB_TYPE数据库类型sqlite
ANYCRAWL_API_DB_CONNECTION数据库连接路径/usr/src/app/db/database.db

Redis 配置

变量名描述默认值
ANYCRAWL_REDIS_URLRedis 连接地址redis://redis:6379

认证配置

变量名描述默认值
ANYCRAWL_API_AUTH_ENABLED是否启用 API 认证false

自定义配置

创建环境配置文件

# 创建 .env 文件
cp .env.example .env

示例 .env 文件

# 基础配置
NODE_ENV=production
ANYCRAWL_API_PORT=8080

# 爬虫配置
ANYCRAWL_HEADLESS=true
ANYCRAWL_PROXY_URL=
ANYCRAWL_PROXY_STEALTH_URL=
ANYCRAWL_PROXY_STEALTH_CREDITS=5
ANYCRAWL_STEALTH_TIMEOUT_MS=120000
ANYCRAWL_IGNORE_SSL_ERROR=true

# 数据库配置
ANYCRAWL_API_DB_TYPE=sqlite
ANYCRAWL_API_DB_CONNECTION=/usr/src/app/db/database.db

# Redis 配置
ANYCRAWL_REDIS_URL=redis://redis:6379

# 认证配置
ANYCRAWL_API_AUTH_ENABLED=false

数据持久化

存储卷

AnyCrawl 使用以下卷来持久化数据:

volumes:
    - ./storage:/usr/src/app/storage # 爬虫数据存储
    - ./db:/usr/src/app/db # 数据库文件
    - redis-data:/data # Redis 数据

备份数据

# 备份数据库
docker compose exec api cp /usr/src/app/db/database.db /usr/src/app/storage/backup.db

# 备份 Redis 数据
docker compose exec redis redis-cli SAVE
docker compose cp redis:/data/dump.rdb ./backup/

常用命令

服务管理

# 启动服务
docker compose up -d

# 停止服务
docker compose down

# 重启特定服务
docker compose restart api

# 查看服务日志
docker compose logs -f api

# 进入容器
docker compose exec api bash

扩展服务

# 扩展爬虫服务实例
docker compose up -d --scale scrape-puppeteer=3
docker compose up -d --scale scrape-playwright=2

监控命令

# 查看服务状态
docker compose ps

# 查看资源使用情况
docker stats

# 查看特定服务日志
docker compose logs -f --tail=100 api

故障排除

常见问题

1. 端口冲突

# 检查端口占用
lsof -i :8080

# 修改端口映射
# 在 docker-compose.yml 中修改 ports 配置
ports:
  - "8081:8080"  # 将本地端口改为 8081

2. 内存不足

# 检查容器内存使用
docker stats

# 增加 Docker 可用内存(Docker Desktop)
# Docker Desktop -> Settings -> Resources -> Memory

3. 数据库连接失败

# 检查数据库文件权限
ls -la ./db/

# 重新创建数据库卷
docker compose down -v
docker compose up --build

4. Redis 连接失败

# 检查 Redis 服务状态
docker compose exec redis redis-cli ping

# 查看 Redis 日志
docker compose logs redis

调试模式

启用调试模式进行问题排查:

# 设置环境变量启用调试
export NODE_ENV=development
export DEBUG=anycrawl:*

# 启动服务
docker compose up --build

生产环境部署

安全配置

  1. 启用认证
ANYCRAWL_API_AUTH_ENABLED=true

启用认证后,需要添加 ApiKey 并在请求头中使用。

  1. 使用 HTTPS

参考:

services:
    nginx:
        image: nginx:alpine
        ports:
            - "443:443"
        volumes:
            - ./nginx.conf:/etc/nginx/nginx.conf
            - ./ssl:/etc/ssl/certs

通过 nginx 做反向代理。

更新和维护

更新服务

# 拉取最新镜像
docker compose pull

# 重新构建并启动
docker compose up --build -d

# 清理旧镜像
docker image prune -f