clickhouse-client via WebSocket. Il est accessible depuis n’importe quel port HTTP de ClickHouse à l’emplacement /webterminal.
Accédez à /webterminal sur n’importe quel port HTTP de ClickHouse (par exemple, http://localhost:8123/webterminal) pour ouvrir le terminal.
Activation et désactivation de la fonctionnalité
/webterminal est activé par défaut et contrôlé par le paramètre du serveur enable_webterminal. Pour le désactiver, définissez ce paramètre sur false ; les requêtes vers /webterminal renverront alors le code d’état HTTP 403 Forbidden.
enable_webterminal remplace l’ancien paramètre allow_experimental_webterminal. L’ancien nom reste pris en charge par souci de rétrocompatibilité lorsque enable_webterminal n’est pas défini.Authentification
Session et de contrôle d’accès que le protocole HTTP, mais les informations d’identification sont échangées directement sur la connexion WebSocket établie plutôt que via la requête de mise à niveau HTTP. Une fois la négociation initiale WebSocket terminée, le navigateur envoie le premier message au format JSON :
user est facultatif : lorsqu’il est omis ou vide, le nom d’utilisateur est défini par le paramètre du serveur default_session_user (ou son remplacement par point de terminaison dans une configuration de protocoles composables), à savoir default sauf configuration contraire. Si default_session_user est défini sur une chaîne vide, les connexions sans nom d’utilisateur sont interdites : un message auth dont le champ user est omis ou vide échoue à l’authentification, le serveur ferme le WebSocket avec le code 1008 et, lorsque la section session_log est activée dans la configuration du serveur, le refus est enregistré dans system.session_log en tant qu’événement LoginFailure avec un user vide.
Cela évite de placer des informations d’identification dans les paramètres d’URL ou les en-têtes Authorization associés à la requête d’upgrade, où ils pourraient se retrouver dans l’historique du navigateur, les journaux d’accès du serveur et les logs du proxy inverse. Les paramètres d’URL, l’authentification HTTP Basic et les en-têtes X-ClickHouse-User/X-ClickHouse-Key de la requête d’upgrade ne sont délibérément pas pris en compte par /webterminal.
Des informations d’identification invalides entraînent la fermeture du WebSocket par le serveur avec le code 1008 ; l’UI du navigateur redemande les informations d’identification.
À quoi ressemble la session
clickhouse-client, rattaché à un pseudoterminal, et transmet ses entrées et sorties via WebSocket. La session prend en charge l’expérience complète de clickhouse-client, y compris :
- Coloration syntaxique.
- Autocomplétion.
- Requêtes sur plusieurs lignes.
- Historique des commandes (stocké côté serveur pendant toute la durée de la session).
Intégration avec /play
/play intègre le terminal web dans un panneau ancrable. Affichez-le ou masquez-le à l’aide de l’icône du terminal dans la barre latérale, ou appuyez sur la touche ~ lorsque l’éditeur de requêtes est vide. La page /play détecte la disponibilité de /webterminal au chargement et masque les commandes du terminal lorsque le point de terminaison n’est pas disponible (par exemple, lorsque enable_webterminal est défini sur false).
Intégration au site web de documentation
play en lecture seule, afin de pouvoir essayer les exemples de n’importe quelle page sans la quitter. Le panneau fixe réserve un espace équivalent en fin de page afin de ne pas masquer les contrôles du pied de page. Lorsque le terminal est ouvert, la page de documentation est verrouillée et sa barre de défilement est masquée. Le défilement dans le terminal reste limité à son historique et ne déplace pas la page de documentation située derrière. Cliquez sur la barre « ClickHouse terminal » ou appuyez sur la touche ~ pour ouvrir le panneau avec marges internes au-dessus de la barre. Cliquez de nouveau sur la barre, utilisez son chevron, appuyez sur ~ ou Escape, ou faites glisser le bord supérieur du panneau vers le bas pour le replier ; ce bord supérieur permet également de le redimensionner. La fin de la session — exit ou Ctrl+D — replie également le panneau.
La fermeture du panneau conserve la session et son historique : la réouverture du terminal vous ramène à la même invite. La session est conservée dans la page ; elle persiste donc lors de la navigation entre les pages de documentation, mais pas lors du rechargement de l’onglet du navigateur — après un rechargement, le panneau revient avec une nouvelle session.
Le panneau du terminal fait partie de la mise en page pour ordinateur du site web et n’est pas disponible dans les fenêtres d’affichage étroites.
Considérations de sécurité
- Servez toujours
/webterminalvia HTTPS dans les environnements non fiables afin de protéger les informations d’identification et le trafic de session. - Restreignez l’accès au niveau du réseau (pare-feu, proxy inverse ou configuration
listen_host) de la même façon que vous restreignez l’accès au protocole HTTP. - Le point de terminaison valide l’en-tête
Originpar rapport àHostafin d’atténuer les détournements WebSocket inter-origines ; configurez les proxys inverses en conséquence si vous terminez TLS de façon externe. - Derrière un proxy inverse qui termine TLS, la connexion en amont vers ClickHouse se fait en
httpsimple même si le navigateur utilisehttps, de sorte que la vérification stricte de même origine rejetterait des connexions légitimes. Pour ces déploiements, définissezwebterminal_allowed_originssur une liste d’origines complètes autorisées à ouvrir des sessions WebSocket, séparées par des virgules ; lorsque ce paramètre n’est pas vide, il remplace la vérification de même origine par défaut. Exemple :<webterminal_allowed_origins>https://example.com,https://app.example.com:8443</webterminal_allowed_origins>.
Disponibilité de la plateforme
clickhouse-client intégré repose sur des primitives POSIX portables (posix_openpt/grantpt/unlockpt), avec un chemin de code spécifique à Linux qui utilise ptsname_r, thread-safe. Les liens vers /webterminal sur la page d’accueil de ClickHouse et dans /play sont automatiquement masqués lorsque le point de terminaison n’est pas disponible (par exemple, lorsque enable_webterminal est défini sur false).