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 surlinux/amd64dans la commandedocker run, par exemple :
docker run -p 8080:8080 --platform linux/amd64 ghcr.io/any4ai/anycrawl:latestRemarque : 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:latestPour une architecture Arm64 (sans prise en charge de Puppeteer), utilisez :
docker run -p 8080:8080 ghcr.io/any4ai/anycrawl:latest-arm64Avec 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:latestAvec 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:latestConstruction 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-desktopUbuntu/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-pluginDémarrage rapide
1. Cloner le dépôt
git clone https://github.com/any4ai/AnyCrawl.git
cd AnyCrawl2. Démarrer les services
# Construire et démarrer tous les services
docker compose up --build
# Ou en arrière-plan
docker compose up --build -d3. Vérifier le déploiement
# Vérifier l’état des services
docker compose ps
# Tester que l’API répond
curl http://localhost:8080/healthArchitecture des services
AnyCrawl adopte une architecture microservices avec les services suivants :
Services principaux
| Nom du service | Description | Port | Dépendances |
|---|---|---|---|
api | Passerelle API et interface principale | 8080 | redis |
scrape-puppeteer | Moteur de scraping Puppeteer | - | redis |
scrape-playwright | Moteur de scraping Playwright | - | redis |
scrape-cheerio | Moteur Cheerio (pas de SPA) | - | redis |
redis | File d’attente et cache | 6379 | - |
Variables d’environnement
Configuration de base
| Variable | Description | Défaut | Exemple |
|---|---|---|---|
NODE_ENV | Environnement d’exécution | production | production, development |
ANYCRAWL_API_PORT | Port du service API | 8080 | 8080 |
Configuration du scraping
| Variable | Description | Défaut | Exemple |
|---|---|---|---|
ANYCRAWL_HEADLESS | Mode sans interface | true | true, false |
ANYCRAWL_PROXY_URL | Adresse du proxy de base | - | http://proxy:8080 |
ANYCRAWL_PROXY_STEALTH_URL | Adresse du proxy furtif | - | http://residential-proxy:8080 |
ANYCRAWL_PROXY_STEALTH_CREDITS | Crédits supplémentaires si proxy furtif | 5 | 5 |
ANYCRAWL_STEALTH_TIMEOUT_MS | Délai par défaut mode furtif/auto (ms) | 120000 | 120000 |
ANYCRAWL_IGNORE_SSL_ERROR | Ignorer les erreurs SSL | true | true, false |
Configuration de la base de données
| Variable | Description | Défaut |
|---|---|---|
ANYCRAWL_API_DB_TYPE | Type de base | sqlite |
ANYCRAWL_API_DB_CONNECTION | Chemin de connexion | /usr/src/app/db/database.db |
Configuration Redis
| Variable | Description | Défaut |
|---|---|---|
ANYCRAWL_REDIS_URL | URL de connexion Redis | redis://redis:6379 |
Configuration de l’authentification
| Variable | Description | Défaut |
|---|---|---|
ANYCRAWL_API_AUTH_ENABLED | Activer l’auth API | false |
Configuration personnalisée
Créer le fichier d’environnement
# Créer le fichier .env
cp .env.example .envExemple 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=falsePersistance 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 RedisSauvegarde
# 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 apiMise à l’échelle
# Augmenter le nombre d’instances de scraping
docker compose up -d --scale scrape-puppeteer=3
docker compose up -d --scale scrape-playwright=2Surveillance
# État des services
docker compose ps
# Utilisation des ressources
docker stats
# Journaux d’un service
docker compose logs -f --tail=100 apiDé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 80812. Mémoire insuffisante
docker stats
# Augmenter la mémoire (Docker Desktop)
# Docker Desktop -> Settings -> Resources -> Memory3. Échec de connexion à la base
ls -la ./db/
docker compose down -v
docker compose up --build4. Échec de connexion à Redis
docker compose exec redis redis-cli ping
docker compose logs redisMode débogage
export NODE_ENV=development
export DEBUG=anycrawl:*
docker compose up --buildDéploiement en production
Sécurité
- Activer l’authentification :
ANYCRAWL_API_AUTH_ENABLED=trueAprè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 -- defaultLa 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- Utiliser HTTPS :
Exemple :
services:
nginx:
image: nginx:alpine
ports:
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
- ./ssl:/etc/ssl/certsUtilisez nginx comme reverse proxy.
Mises à jour et maintenance
Mettre à jour les services
docker compose pull
docker compose up --build -d
docker image prune -f