AnyCrawl

Déploiement Docker

Guide pas à pas pour auto-héberger AnyCrawl avec Docker, options de configuration et bonnes pratiques

Docker avec images préconstruites

AnyCrawl fournit des images Docker préconstruites via GitHub Container Registry. Vous pouvez déployer AnyCrawl rapidement sans compilation depuis les sources.

Images préconstruites disponibles

Les images suivantes sont disponibles sur GitHub Container Registry :

  • anycrawl : image tout-en-un pour AnyCrawl. Elle inclut tous les services et dépendances.
  • anycrawl-api : service API principal
  • anycrawl-scrape-cheerio : moteur de scraping Cheerio
  • anycrawl-scrape-playwright : moteur de scraping Playwright
  • anycrawl-scrape-puppeteer : moteur de scraping Puppeteer

Démarrage rapide

AnyCrawl propose une image tout-en-un ; l’image préconstruite est ghcr.io/any4ai/anycrawl:latest, qui inclut tous les services et dépendances. Vous pouvez l’exécuter avec :

docker run -p 8080:8080 ghcr.io/any4ai/anycrawl:latest
  • Remarque : l’image d’architecture arm64 n’inclut pas le service scrape-puppeteer. Si vous avez vraiment besoin de Puppeteer, vous pouvez définir la plateforme sur linux/amd64 dans la commande docker run, par exemple :
docker run -p 8080:8080 --platform linux/amd64 ghcr.io/any4ai/anycrawl:latest

Remarque : cela a un impact sur les performances, inférieur à l’image arm64 native.

Exécution en arrière-plan :

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

Pour une architecture Arm64 (sans prise en charge de Puppeteer), utilisez :

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

Avec des variables d’environnement

# Exécution avec configuration personnalisée
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

Avec un fichier .env

# Exécution avec un fichier .env local
docker run -d \
  -p 8080:8080 \
  -v $(pwd)/.env:/usr/src/app/.env:ro \
  ghcr.io/any4ai/anycrawl:latest

Construction Docker

Pour construire votre propre image, suivez les étapes ci-dessous.

Prérequis

Avant de commencer, assurez-vous d’avoir installé :

  • Docker : version 20.10 ou supérieure
  • Docker Compose : version 2.0 ou supérieure

Installation de Docker et Docker Compose

macOS

# Installation via Homebrew
brew install docker docker-compose

# Ou téléchargez Docker Desktop
# https://www.docker.com/products/docker-desktop

Ubuntu/Debian

# Installation de Docker
# Ajouter la clé GPG officielle de Docker :
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

# Ajouter le dépôt aux sources Apt :
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

Démarrage rapide

1. Cloner le dépôt

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

2. Démarrer les services

# Construire et démarrer tous les services
docker compose up --build

# Ou en arrière-plan
docker compose up --build -d

3. Vérifier le déploiement

# Vérifier l’état des services
docker compose ps

# Tester que l’API répond
curl http://localhost:8080/health

Architecture des services

AnyCrawl adopte une architecture microservices avec les services suivants :

Services principaux

Nom du serviceDescriptionPortDépendances
apiPasserelle API et interface principale8080redis
scrape-puppeteerMoteur de scraping Puppeteer-redis
scrape-playwrightMoteur de scraping Playwright-redis
scrape-cheerioMoteur Cheerio (pas de SPA)-redis
redisFile d’attente et cache6379-

Variables d’environnement

Configuration de base

VariableDescriptionDéfautExemple
NODE_ENVEnvironnement d’exécutionproductionproduction, development
ANYCRAWL_API_PORTPort du service API80808080

Configuration du scraping

VariableDescriptionDéfautExemple
ANYCRAWL_HEADLESSMode sans interfacetruetrue, false
ANYCRAWL_PROXY_URLAdresse du proxy de base-http://proxy:8080
ANYCRAWL_PROXY_STEALTH_URLAdresse du proxy furtif-http://residential-proxy:8080
ANYCRAWL_PROXY_STEALTH_CREDITSCrédits supplémentaires si proxy furtif55
ANYCRAWL_STEALTH_TIMEOUT_MSDélai par défaut mode furtif/auto (ms)120000120000
ANYCRAWL_IGNORE_SSL_ERRORIgnorer les erreurs SSLtruetrue, false

Configuration de la base de données

VariableDescriptionDéfaut
ANYCRAWL_API_DB_TYPEType de basesqlite
ANYCRAWL_API_DB_CONNECTIONChemin de connexion/usr/src/app/db/database.db

Configuration Redis

VariableDescriptionDéfaut
ANYCRAWL_REDIS_URLURL de connexion Redisredis://redis:6379

Configuration de l’authentification

VariableDescriptionDéfaut
ANYCRAWL_API_AUTH_ENABLEDActiver l’auth APIfalse

Configuration personnalisée

Créer le fichier d’environnement

# Créer le fichier .env
cp .env.example .env

Exemple de fichier .env

# Configuration de base
NODE_ENV=production
ANYCRAWL_API_PORT=8080

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

# Base de données
ANYCRAWL_API_DB_TYPE=sqlite
ANYCRAWL_API_DB_CONNECTION=/usr/src/app/db/database.db

# Redis
ANYCRAWL_REDIS_URL=redis://redis:6379

# Authentification
ANYCRAWL_API_AUTH_ENABLED=false

Persistance des données

Volumes de stockage

AnyCrawl utilise les volumes suivants pour la persistance :

volumes:
    - ./storage:/usr/src/app/storage # Données de scraping
    - ./db:/usr/src/app/db # Fichiers de base
    - redis-data:/data # Données Redis

Sauvegarde

# Sauvegarder la base
docker compose exec api cp /usr/src/app/db/database.db /usr/src/app/storage/backup.db

# Sauvegarder Redis
docker compose exec redis redis-cli SAVE
docker compose cp redis:/data/dump.rdb ./backup/

Commandes courantes

Gestion des services

# Démarrer les services
docker compose up -d

# Arrêter les services
docker compose down

# Redémarrer un service
docker compose restart api

# Journaux
docker compose logs -f api

Mise à l’échelle

# Augmenter le nombre d’instances de scraping
docker compose up -d --scale scrape-puppeteer=3
docker compose up -d --scale scrape-playwright=2

Surveillance

# État des services
docker compose ps

# Utilisation des ressources
docker stats

# Journaux d’un service
docker compose logs -f --tail=100 api

Dépannage

Problèmes courants

1. Conflits de ports

# Vérifier l’utilisation du port
lsof -i :8080

# Modifier le mappage de ports dans docker-compose.yml
ports:
  - "8081:8080"  # Port local 8081

2. Mémoire insuffisante

docker stats

# Augmenter la mémoire (Docker Desktop)
# Docker Desktop -> Settings -> Resources -> Memory

3. Échec de connexion à la base

ls -la ./db/

docker compose down -v
docker compose up --build

4. Échec de connexion à Redis

docker compose exec redis redis-cli ping

docker compose logs redis

Mode débogage

export NODE_ENV=development
export DEBUG=anycrawl:*

docker compose up --build

Déploiement en production

Sécurité

  1. Activer l’authentification :
ANYCRAWL_API_AUTH_ENABLED=true

Après activation, ajoutez une clé API et utilisez-la dans les en-têtes des requêtes.

Générer une clé API

Si l’authentification est activée (ANYCRAWL_API_AUTH_ENABLED=true), générez une clé depuis la racine du dépôt :

pnpm --filter api key:generate
# nom optionnel
pnpm --filter api key:generate -- default

La commande affiche uuid, key et credits. Utilisez la clé dans l’en-tête Authorization: Bearer <KEY>.

Dans le conteneur Docker

  • Avec Docker Compose :
docker compose exec api pnpm --filter api key:generate
docker compose exec api pnpm --filter api key:generate -- default
  • Conteneur unique (remplacez <container_name_or_id>) :
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
  1. Utiliser HTTPS :

Exemple :

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

Utilisez nginx comme reverse proxy.

Mises à jour et maintenance

Mettre à jour les services

docker compose pull

docker compose up --build -d

docker image prune -f