BotBrowser sans interface sur un serveur Ubuntu
Configurez BotBrowser sans interface sur Ubuntu avec Xvfb, les dépendances système, les services systemd et les contrôles de production.
Vous préférez la doc produit maintenue ?
Cet article a une page équivalente dans le centre de documentation. Utilisez les docs pour le flux canonique, les flags à jour et la référence durable.
Référence de production
Exécuter BotBrowser sur un serveur Ubuntu sans interface graphique constitue la base de nombreux déploiements en production. Les serveurs ne disposent pas d'écran physique, leurs pilotes graphiques diffèrent de ceux des postes de travail et les images minimales n'installent pas toujours les bibliothèques requises par le navigateur. Une préparation rigoureuse évite les arrêts intermittents et les écarts de rendu difficiles à diagnostiquer.
Les étapes ci-dessous couvrent les dépendances système, le choix de Xvfb selon la charge, la supervision avec systemd et l'exécution avec Playwright ou Puppeteer.
Pourquoi la configuration d'un serveur sans interface est importante
Les postes de travail gèrent automatiquement l'affichage, l'initialisation graphique et le rendu des polices. Une installation minimale d'Ubuntu Server ne fournit pas toujours les bibliothèques partagées requises par le navigateur, le serveur d'affichage X11 ni les paquets de polices qui influencent le rendu du texte.
Une configuration incomplète peut provoquer une erreur d'affichage, un arrêt pendant le rendu WebGL, une sortie Canvas vide ou l'absence de familles de polices attendues. Certains écarts n'empêchent pas le lancement, mais réduisent la cohérence du profil et la fiabilité des captures.
Définissez DISPLAY uniquement lorsque le déploiement utilise Xvfb ou un autre service X11. Le mode headless natif n'impose pas Xvfb au démarrage. Validez le choix avec les pages, le backend graphique et les médias de production.
Exigences d'affichage et de système
Xvfb (X Virtual Frame Buffer)
Xvfb fournit un serveur d'affichage virtuel qui implémente le protocole X11 sans nécessiter de matériel d'affichage physique. Le navigateur s'y connecte comme à un écran réel et peut ainsi terminer correctement l'initialisation du rendu.
Paramètres de configuration clés :
- Numéro d'affichage (
:10) : identifiant arbitraire. La valeur:10évite généralement les conflits avec:0, souvent réservé aux installations de bureau. - Définition de l'écran (
1920x1080x24) : largeur, hauteur et profondeur de couleur. Une profondeur de 24 bits fournit une base adaptée aux captures et au rendu visuel. - Variable d'environnement DISPLAY (
DISPLAY=:10.0) : avec Xvfb, utilisez le même numéro d'affichage dans le service et les scripts qui lancent le navigateur.
Dépendances système du navigateur
BotBrowser dépend de bibliothèques partagées pour le rendu, l'audio, le réseau et l'accessibilité. Sur une installation Ubuntu desktop, la plupart d'entre elles sont présentes. Sur une installation serveur, vous devez les installer explicitement.
Les catégories principales sont :
- Graphiques :
libdrm2,libgbm1,libxcomposite1,libxdamage1,libxrandr2pour la composition d'affichage - Toolkit UI :
libgtk-3-0,libatk-bridge2.0-0,libatk1.0-0pour l'accessibilité et le rendu des widgets - Sécurité :
libnss3,libnspr4pour TLS et la gestion des certificats - Audio :
libasound2pour l'initialisation du sous-système audio (même sans lecture audio) - Polices :
fonts-liberationpour disposer de polices de base - Intégration desktop :
xdg-utilspour la gestion des types MIME
<svg viewBox="0 0 700 300" xmlns="http://www.w3.org/2000/svg" role="img" aria-labelledby="headless-fr-title headless-fr-desc" style={{maxWidth: '100%', height: 'auto'}}>
Échecs courants de configuration
Exécuter sans Xvfb
Le mode headless natif peut fonctionner sans Xvfb. Utilisez Xvfb lorsque la charge dépend de X11, requiert un écran virtuel ou a déjà été validée avec ce chemin. Dans les deux cas, vérifiez les pages, les médias et les captures avec le backend graphique cible avant de retenir la configuration de production.
Paquets de polices manquants
Ubuntu Server est livré avec un jeu de polices minimal. Le navigateur peut afficher du texte sans paquet supplémentaire, mais la disponibilité des familles et les métriques peuvent alors s'écarter de la référence du profil. BotBrowser aligne le comportement des polices sur le profil sélectionné, tandis qu'un ensemble système correctement installé fournit un repli fiable pour le rendu des pages.
Profondeur d'affichage incorrecte
Si vous choisissez Xvfb, utilisez des dimensions et une profondeur de couleur validées. L'exemple emploie 24 bits; la configuration finale doit correspondre à la référence du déploiement.
Exécuter en tant que root sans paramètres sandbox
Le sandbox de BotBrowser nécessite des capacités kernel spécifiques. Dans un conteneur Docker ou lors d'une exécution en tant que root, suivez le guide de déploiement pour configurer les permissions et le sandbox.
Comportement de la version
BotBrowser prend en charge les déploiements sans interface sur serveur. Les profils coordonnent la plateforme, les polices et le comportement graphique avec l'identité choisie. Le backend graphique et les polices du serveur doivent toutefois rester conformes à la configuration validée pour le parcours.
Le profil réduit la dépendance aux caractéristiques de l'hôte et maintient les familles de signaux prises en charge dans la référence choisie. Le résultat doit néanmoins être validé sur le backend graphique et la charge utilisés en production.
Le serveur doit fournir les bibliothèques et le backend graphique attendus par la charge. Un serveur d'affichage n'est requis que pour le chemin X11 retenu.
Installation et lancement
Étape 1 : installer les dépendances système
sudo apt-get update && sudo apt-get install -y \
wget ca-certificates fonts-liberation \
libasound2 libatk-bridge2.0-0 libatk1.0-0 \
libcups2 libdbus-1-3 libdrm2 libgbm1 \
libgtk-3-0 libnspr4 libnss3 \
libxcomposite1 libxdamage1 libxrandr2 \
xdg-utils xvfb
Sous Ubuntu 24.04, certains noms de paquets ont changé. Si la première commande signale un paquet indisponible, utilisez les variantes suivantes :
sudo apt-get install -y \
libasound2t64 libatk-bridge2.0-0 libatk1.0-0 \
libcups2t64 libgbm1 libgtk-3-0t64 \
libnss3 libxcomposite1 libxdamage1 \
libxrandr2 xvfb fonts-liberation xdg-utils
Étape 2 : démarrer Xvfb si nécessaire
Pour un test immédiat :
Xvfb :10 -screen 0 1920x1080x24 &
export DISPLAY=:10.0
Pour la production, créez un service systemd :
# /etc/systemd/system/xvfb.service
[Unit]
Description=X Virtual Frame Buffer
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/Xvfb :10 -screen 0 1920x1080x24
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
Activez et démarrez le service :
sudo systemctl daemon-reload
sudo systemctl enable xvfb
sudo systemctl start xvfb
Étape 3 : installer BotBrowser
# Remplacez les marqueurs par l'actif Linux de la page des versions
curl -fL -o botbrowser.tar.gz \
"https://github.com/botswin/BotBrowser/releases/download/<release-tag>/<linux-archive>"
# Extraire vers /opt
sudo mkdir -p /opt/botbrowser
sudo tar -xzf botbrowser.tar.gz -C /opt/botbrowser/
sudo chmod +x /opt/botbrowser/chrome
# Vérifier l'installation
DISPLAY=:10.0 /opt/botbrowser/chrome --version
Étape 4 : télécharger les profils
sudo mkdir -p /opt/botbrowser/profiles
sudo install -m 600 /chemin/vers/<profil-compatible>.enc \
/opt/botbrowser/profiles/profile.enc
Étape 5 : tester le lancement
Utilisez la tâche Playwright minimale de l'étape 6 pour contrôler tout le parcours de démarrage. Exécutez-la avec le compte de service, le profil, le répertoire de travail et le chemin graphique prévus en production. Ajoutez DISPLAY=:10.0 uniquement pour la configuration Xvfb. Le test doit ouvrir la page approuvée, effectuer une petite action et se fermer normalement.
En mode headless, BotBrowser n'ouvre pas de fenêtre visible pour signaler un profil absent, non valide, expiré ou incompatible avec la version du navigateur. Le processus écrit cette indication dans le terminal, puis peut quitter avant la navigation. Conservez donc stdout, stderr et le code de sortie dans les journaux de la tâche d'arrière-plan.
Un contrôle de démarrage doit distinguer trois états : tâche prête, tâche arrêtée avec un message de profil, ou délai d'attente. Ne relancez pas indéfiniment un profil incompatible. Corrigez le paquet de profil ou la version du navigateur, puis démarrez une nouvelle session.
Le test le plus utile reste simple : lancez BotBrowser avec le profil de production, ouvrez une page autorisée, effectuez une action représentative et fermez proprement le navigateur. Cette séquence valide le binaire, le profil et les dépendances sans dépendre d'une interface graphique.
Étape 6 : intégrer Playwright
npm install playwright-core
const { chromium } = require('playwright-core');
(async () => {
const browser = await chromium.launch({
executablePath: '/opt/botbrowser/chrome',
args: [
'--disable-setuid-sandbox',
'--bot-profile=/opt/botbrowser/profiles/profile.enc',
'--proxy-server=socks5://user:pass@proxy.example.com:1080',
],
headless: true,
});
const context = await browser.newContext();
const page = await context.newPage();
await page.goto('https://example.com');
console.log('Title:', await page.title());
await browser.close();
})();
Exécutez avec la variable d'affichage :
DISPLAY=:10.0 node script.js
Étape 7 : créer un service systemd
Pour des tâches d'automatisation persistantes en arrière-plan :
# /etc/systemd/system/botbrowser-worker.service
[Unit]
Description=BotBrowser Automation Worker
After=xvfb.service
Requires=xvfb.service
[Service]
Type=simple
Environment=DISPLAY=:10.0
WorkingDirectory=/opt/scripts
ExecStart=/usr/bin/node /opt/scripts/worker.js
Restart=always
RestartSec=10
User=botbrowser
Group=botbrowser
[Install]
WantedBy=multi-user.target
Gérer une charge par service
Confiez à chaque unité une charge définie et un répertoire de données. L'application doit piloter le démarrage et l'arrêt du navigateur afin que le superviseur reçoive un état clair. Les journaux, les limites de ressources et la politique de redémarrage restent ainsi liés à la charge concernée.
Créez des unités distinctes lorsque les applications ont des calendriers de publication, des exigences graphiques ou des limites de sécurité différents. Évitez les boucles shell qui lancent plusieurs profils. Elles masquent l'origine d'un échec et peuvent laisser des processus actifs après l'arrêt du parent.
Dans un conteneur, montez les profils en lecture seule et attribuez un répertoire de données distinct à chaque tâche d'arrière-plan. Dimensionnez /dev/shm pour la charge réelle. Un espace partagé trop petit peut rendre les pages instables même si le navigateur démarre correctement.
Le mode headless ne doit jamais attendre une boîte de dialogue. Les erreurs de licence ou de profil doivent être traitées par la sortie du processus et par la supervision. Ajoutez une limite de redémarrage au service afin qu'une configuration non valide ne crée pas une boucle de démarrage continue.
Conservez le rendu graphique lorsque le parcours en dépend. Désactiver systématiquement le GPU ou le rendu logiciel peut modifier le comportement visuel et réduire la valeur des références. Appliquez ces options seulement après une validation sur les pages réelles du job.
Vérification
Après avoir complété la configuration, vérifiez que tout fonctionne :
# Vérifier que Xvfb fonctionne
systemctl status xvfb
# Vérifier que l'affichage est accessible
DISPLAY=:10.0 xdpyinfo | head -5
# Vérifier que les dépendances du navigateur sont satisfaites
ldd /opt/botbrowser/chrome | grep "not found"
# Lancer une navigation de contrôle
DISPLAY=:10.0 node -e "
const { chromium } = require('playwright-core');
(async () => {
const b = await chromium.launch({
executablePath: '/opt/botbrowser/chrome',
args: ['--bot-profile=/opt/botbrowser/profiles/profile.enc'],
headless: true,
});
const p = await (await b.newContext()).newPage();
await p.goto('https://example.com');
console.log('Page:', await p.title());
await b.close();
})();
"
Conservez le résultat de lancement, la version du binaire, la version du profil et une capture de la page autorisée dans la référence de déploiement.
État prêt et contrôle de santé
Définissez l'état prêt à partir du résultat de la charge, pas seulement de l'existence du processus. Un contrôle utile confirme que le service accepte sa configuration, crée une session, ouvre une page approuvée et effectue une petite action. Il doit s'arrêter rapidement si l'une de ces étapes échoue.
Séparez ce contrôle du trafic client. Utilisez un compte dédié ou une page publique sans données personnelles. Le résultat doit seulement indiquer si l'application peut démarrer, naviguer et se fermer correctement.
Distinguez la santé au démarrage de la santé continue. Cette dernière couvre l'avancement de la file, les tâches récemment terminées, le code de sortie, l'espace disque, la pression mémoire et l'état du service d'affichage. Un processus actif peut avoir cessé de progresser.
Lorsqu'un contrôle échoue, retirez le worker des nouvelles affectations avant de le redémarrer. Consignez la tâche interrompue et remettez le répertoire de données dans un état approuvé. Les nouvelles tentatives ne doivent pas masquer une configuration durablement défaillante.
Journaux et reprise après échec
Envoyez la sortie de l'application et du navigateur vers la destination normale des journaux. Ajoutez la révision du service, la version de BotBrowser, le paquet de profil, l'image et l'identifiant de tâche. Excluez le contenu des pages, les identifiants, les secrets de proxy et les dossiers clients.
Faites tourner les journaux et les artefacts avant qu'ils ne saturent le disque. Conservez assez d'historique pour comparer la version candidate à la dernière version approuvée, puis appliquez la politique habituelle de conservation et de confidentialité.
Classez les échecs selon l'action nécessaire. Une configuration doit être corrigée dans le service ou le profil. Une dépendance demande une nouvelle image. Une pression sur les ressources demande une revue de la charge ou de la capacité. Un échec applicatif revient au propriétaire de l'application.
Testez la reprise en préproduction. Arrêtez le service pendant une tâche autorisée, redémarrez l'hôte et rendez temporairement une dépendance indisponible. La supervision doit identifier le bon service, respecter la limite de redémarrage et retrouver un état approuvé.
Contrôle des changements de l'image
Considérez l'image système, BotBrowser, le profil, l'unité de service et l'application comme une combinaison enregistrée. Une modification de chaque couche peut affecter le démarrage, le rendu, les médias ou les ressources.
Faites passer les mises à jour système par le même parcours de préproduction que l'application. Les paquets de langue, bibliothèques graphiques, moteurs de conteneur et politiques de sécurité doivent être revus avec une tâche représentative.
Déployez de petits groupes de changements. Gardez la combinaison précédente et documentez l'ordre de retour arrière. Le retour doit restaurer une combinaison complète approuvée, sans mélanger un ancien navigateur avec un profil ou un service non contrôlé.
Démarrage headless et validation du profil
Une machine peut réussir un lancement isolé et devenir instable lorsque plusieurs tâches démarrent ensemble. Augmentez la concurrence par paliers, puis mesurez la mémoire, le processeur, l'espace partagé, les descripteurs de fichiers et la durée de fermeture. La capacité dépend davantage des pages chargées que du nombre initial de processus.
Évitez de créer toutes les sessions au même instant. Une file de démarrage avec une limite de concurrence maîtrisée réduit les pointes d'entrées-sorties et de processeur. Fermez les pages et les contextes terminés avant d'accepter un nouveau lot.
Sous une charge durable, surveillez aussi la vitesse de destruction. Une file de contextes en fermeture peut annoncer une pression sur les ressources avant que le service ne manque de mémoire. Le superviseur doit pouvoir arrêter proprement les nouveaux jobs, fermer les contextes restants, puis recycler le navigateur.
Règles d'exploitation
Définissez DISPLAY selon le chemin graphique. Ajoutez-le au service uniquement avec Xvfb ou un autre affichage X11.
Utilisez une profondeur de couleur de 24 bits pour Xvfb. Des profondeurs inférieures produisent une sortie de rendu incorrecte.
Surveillez l'utilisation du disque. BotBrowser écrit des rapports de plantage et des données de cache dans --user-data-dir. Mettez en place une rotation des logs ou un nettoyage périodique pour éviter l'épuisement du disque.
Gardez les dépendances à jour. Exécutez apt-get upgrade périodiquement. Les décalages de versions entre bibliothèques peuvent modifier le rendu ou la stabilité.
Définissez des limites de ressources. Utilisez MemoryLimit et CPUQuota de systemd pour empêcher les instances incontrôlées de consommer toutes les ressources du serveur.
Approbation de la version
Approuvez l'image serveur et la version de BotBrowser comme une seule combinaison. Consignez Ubuntu, BotBrowser, le paquet de profil, le chemin graphique, le choix de Xvfb, le service et l'application. Exécutez une tâche représentative après un démarrage à froid, un redémarrage du service et un redémarrage de l'hôte.
Contrôlez une page normale, une page riche en texte, une capture ou un document, ainsi que les médias utilisés par le produit. Augmentez la concurrence progressivement et conservez une marge pour le système. Vérifiez aussi que le superviseur enregistre un échec contrôlé et remet le worker dans un état connu. Ne déployez l'image qu'après validation de chaque classe d'hôte prévue.
Questions fréquentes
BotBrowser fonctionne-t-il sur Ubuntu 24.04 ?
Oui. Certains noms de paquets ont changé, par exemple libasound2, remplacé par libasound2t64. La commande alternative de l'étape 1 couvre ces variantes.
Puis-je utiliser une résolution Xvfb plus élevée ?
Oui. Vous pouvez définir Xvfb :10 -screen 0 2560x1440x24 ou toute résolution dont vous avez besoin. Faites-la correspondre à la résolution d'écran du profil pour de meilleurs résultats.
Ai-je besoin d'un GPU sur le serveur ?
Un GPU dédié n'est pas toujours nécessaire. Le profil coordonne les signaux graphiques pris en charge. Validez toutefois le backend graphique réel, car il influence la compatibilité et le rendu fonctionnel des pages.
Pourquoi ne pas simplement utiliser --headless=new sans Xvfb ?
Vous pouvez utiliser --headless=new sans Xvfb. Activez Xvfb et DISPLAY lorsque la charge dépend de X11 ou lorsque la référence de l'équipe a été validée avec un écran virtuel. Vérifiez le rendu, les médias et les captures dans les deux cas.
Pourquoi aucune fenêtre n'apparaît-elle après un échec headless ?
Le mode headless écrit les indications de démarrage dans la sortie du terminal au lieu d'ouvrir une fenêtre. Conservez cette sortie avec les journaux et corrigez le profil ou l'hôte avant de réessayer.
Combien d'instances puis-je exécuter par serveur ?
Cela dépend de l'hôte et de la charge. Mesurez des pages représentatives, gardez une marge pour le système et réduisez la concurrence lorsque la mémoire, le processeur ou l'espace d'échange montrent une pression durable.
Comment vérifier les bibliothèques manquantes ?
Exécutez ldd /opt/botbrowser/chrome | grep "not found". Toutes les bibliothèques listées comme "not found" doivent être installées. Utilisez apt-file search libname.so pour trouver le paquet qui fournit une bibliothèque spécifique.
Puis-je exécuter BotBrowser sur des serveurs Ubuntu ARM ?
BotBrowser fournit des builds Linux x86_64. Le support ARM dépend de la version spécifique. Consultez la page des releases GitHub pour les architectures disponibles.
Comment mettre à jour BotBrowser ?
Préparez la nouvelle version avec le paquet de profil correspondant. Contrôlez à nouveau le service, les dépendances, le chemin graphique et la charge représentative avant le déploiement. Conservez la combinaison précédente jusqu'à la fin de la période normale d'observation.
Décision de déploiement
La configuration de BotBrowser sur un serveur Ubuntu sans interface graphique nécessite les dépendances système, Xvfb et une gestion correcte des variables d'environnement. Une fois préparé, le serveur fournit une base stable pour exécuter des instances avec une identité de profil cohérente. La capacité maximale reste liée aux ressources de l'hôte et aux pages réellement chargées.
Pour les déploiements conteneurisés, consultez Docker. Pour ajuster les performances, consultez Performances en production. Pour les paramètres courants, consultez Recettes en ligne de commande.
Articles Connexes
Faites passer BotBrowser de la recherche à la production
Utilisez ces guides pour comprendre le modèle, puis passez à la validation multi-plateforme, aux contextes isolés et au déploiement navigateur prêt pour l'échelle.