AnyCrawl

Docker-Bereitstellung

Schritt-für-Schritt: AnyCrawl mit Docker selbst hosten – Konfiguration und Best Practices

Docker mit vorgefertigten Images

AnyCrawl stellt vorgebaute Docker-Images über die GitHub Container Registry bereit. Sie können AnyCrawl schnell deployen, ohne aus dem Quellcode zu bauen.

Verfügbare Images

Folgende Images sind unter GitHub Container Registry verfügbar:

  • anycrawl: All-in-one-Image für AnyCrawl mit allen Services und Abhängigkeiten
  • anycrawl-api: Haupt-API-Service
  • anycrawl-scrape-cheerio: Cheerio-Scraping-Engine
  • anycrawl-scrape-playwright: Playwright-Scraping-Engine
  • anycrawl-scrape-puppeteer: Puppeteer-Scraping-Engine

Schnellstart

Für AnyCrawl gibt es ein All-in-one-Image: ghcr.io/any4ai/anycrawl:latest mit allen Services und Abhängigkeiten. Start:

docker run -p 8080:8080 ghcr.io/any4ai/anycrawl:latest
  • Hinweis: Das arm64-Image enthält keinen scrape-puppeteer-Service. Wenn Sie Puppeteer brauchen, setzen Sie die Plattform z. B. auf linux/amd64:
docker run -p 8080:8080 --platform linux/amd64 ghcr.io/any4ai/anycrawl:latest

Das kann die Performance gegenüber nativem arm64 beeinträchtigen.

Im Hintergrund:

docker run -d -p 8080:8080 ghcr.io/any4ai/anycrawl:latest

Unter Arm64 ohne Puppeteer-Unterstützung alternativ:

docker run -p 8080:8080 ghcr.io/any4ai/anycrawl:latest-arm64

Mit Umgebungsvariablen

docker run -d \
  -p 8080:8080 \
  -e NODE_ENV=production \
  -e ANYCRAWL_API_AUTH_ENABLED=false \
  -e ANYCRAWL_HEADLESS=true \
  ghcr.io/any4ai/anycrawl:latest

Mit .env-Datei

docker run -d \
  -p 8080:8080 \
  -v $(pwd)/.env:/usr/src/app/.env:ro \
  ghcr.io/any4ai/anycrawl:latest

Eigenes Image bauen

Voraussetzungen

  • Docker: Version 20.10 oder höher
  • Docker Compose: Version 2.0 oder höher

Docker und Docker Compose installieren

macOS

brew install docker docker-compose
# oder Docker Desktop: https://www.docker.com/products/docker-desktop

Ubuntu/Debian

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
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

Schnellstart (Quellcode)

1. Repository klonen

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

2. Services starten

docker compose up --build
docker compose up --build -d

3. Deployment prüfen

docker compose ps
curl http://localhost:8080/health

Service-Architektur

AnyCrawl nutzt eine Microservice-Architektur:

Kern-Services

ServiceBeschreibungPortAbhängigkeiten
apiAPI-Gateway und Hauptschnittstelle8080redis
scrape-puppeteerPuppeteer-Engine-redis
scrape-playwrightPlaywright-Engine-redis
scrape-cheerioCheerio-Engine (kein SPA)-redis
redisWarteschlange und Cache6379-

Umgebungsvariablen

Basis

VariableBeschreibungStandardBeispiel
NODE_ENVLaufzeitumgebungproductionproduction, development
ANYCRAWL_API_PORTAPI-Port80808080

Scraping

VariableBeschreibungStandardBeispiel
ANYCRAWL_HEADLESSHeadless-Modustruetrue, false
ANYCRAWL_PROXY_URLBasis-Proxy-http://proxy:8080
ANYCRAWL_PROXY_STEALTH_URLStealth-Proxy-http://residential-proxy:8080
ANYCRAWL_PROXY_STEALTH_CREDITSZusätzliche Credits bei Stealth55
ANYCRAWL_STEALTH_TIMEOUT_MSStandard-Timeout Stealth/auto (ms)120000120000
ANYCRAWL_IGNORE_SSL_ERRORSSL-Fehler ignorierentruetrue, false

Datenbank

VariableBeschreibungStandard
ANYCRAWL_API_DB_TYPEDB-Typsqlite
ANYCRAWL_API_DB_CONNECTIONDB-Pfad/usr/src/app/db/database.db

Redis

VariableBeschreibungStandard
ANYCRAWL_REDIS_URLRedis-URLredis://redis:6379

Authentifizierung

VariableBeschreibungStandard
ANYCRAWL_API_AUTH_ENABLEDAPI-Auth aktivierenfalse

Benutzerdefinierte Konfiguration

cp .env.example .env

Beispiel .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
ANYCRAWL_REDIS_URL=redis://redis:6379
ANYCRAWL_API_AUTH_ENABLED=false

Datenpersistenz

volumes:
    - ./storage:/usr/src/app/storage
    - ./db:/usr/src/app/db
    - redis-data:/data

Backup

docker compose exec api cp /usr/src/app/db/database.db /usr/src/app/storage/backup.db
docker compose exec redis redis-cli SAVE
docker compose cp redis:/data/dump.rdb ./backup/

Häufige Befehle

docker compose up -d
docker compose down
docker compose restart api
docker compose logs -f api

Skalierung

docker compose up -d --scale scrape-puppeteer=3
docker compose up -d --scale scrape-playwright=2

Monitoring

docker compose ps
docker stats
docker compose logs -f --tail=100 api

Fehlerbehebung

Port-Konflikte

lsof -i :8080
# In docker-compose.yml z. B. "8081:8080"

Zu wenig Speicher

docker stats; unter Docker Desktop Arbeitsspeicher erhöhen.

Datenbank

ls -la ./db/
docker compose down -v
docker compose up --build

Redis

docker compose exec redis redis-cli ping
docker compose logs redis

Debug

export NODE_ENV=development
export DEBUG=anycrawl:*
docker compose up --build

Produktion

Authentifizierung

ANYCRAWL_API_AUTH_ENABLED=true

API-Key generieren (Repo-Root):

pnpm --filter api key:generate
pnpm --filter api key:generate -- default

Schlüssel im Header Authorization: Bearer <KEY> verwenden.

In Docker

docker compose exec api pnpm --filter api key:generate
docker compose exec api pnpm --filter api key:generate -- default
docker exec -it <container_name_or_id> pnpm --filter api key:generate
docker exec -it <container_name_or_id> pnpm --filter api key:generate -- default

HTTPS

Beispiel Reverse Proxy:

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

Updates

docker compose pull
docker compose up --build -d
docker image prune -f