clickhouse-client a través de WebSocket. Está disponible en cualquier puerto HTTP de ClickHouse en la ruta /webterminal.
El terminal web es una función experimental y está desactivado de forma predeterminada; consulta Habilitar la función a continuación.
Habilitar la funcionalidad
/webterminal está controlado por la configuración del servidor allow_experimental_webterminal. Cuando esta configuración es false (el valor predeterminado), las solicitudes a /webterminal devuelven el estado HTTP 403 Forbidden.
Para habilitarlo, añade lo siguiente a la configuración del servidor:
/webterminal en cualquier puerto HTTP de ClickHouse (por ejemplo, http://localhost:8123/webterminal) para abrir el terminal.
Autenticación
Session y de control de acceso que el protocolo HTTP, pero las credenciales se intercambian por el propio canal a través de la conexión WebSocket ya establecida, en lugar de hacerlo mediante la solicitud HTTP de actualización. Una vez completado el handshake de WebSocket, el navegador envía el primer mensaje en formato JSON:
Authorization enviados con la solicitud de actualización, donde podrían acabar en el historial del navegador, en los registros de acceso del servidor y en los registros del proxy inverso. Los parámetros de URL, HTTP Basic y los encabezados X-ClickHouse-User/X-ClickHouse-Key de la solicitud de actualización deliberadamente no se tienen en cuenta en /webterminal.
Las credenciales no válidas hacen que el servidor cierre el WebSocket con el código 1008; la interfaz de usuario del navegador vuelve a solicitar las credenciales.
Cómo es la sesión
clickhouse-client asociado a un pseudoterminal y canaliza su entrada y salida a través de WebSocket. La sesión ofrece toda la experiencia de clickhouse-client, lo que incluye:
- Resaltado de sintaxis.
- Autocompletado.
- Consultas de varias líneas.
- Historial de comandos (almacenado en el servidor mientras dura la sesión).
Integración con /play
/play incorpora el terminal web como un panel acoplable. Actívalo con el icono del terminal en la barra lateral o pulsa la tecla ~ cuando el editor de consultas esté vacío. La página /play detecta la disponibilidad de /webterminal al cargarse y oculta los controles del terminal cuando el endpoint no está disponible (por ejemplo, cuando la configuración experimental no está activada).
Consideraciones de seguridad
- Sirve siempre
/webterminalmediante HTTPS en entornos no confiables para proteger las credenciales y el tráfico de la sesión. - Restringe el acceso a nivel de red (
firewall, proxy inverso o la configuraciónlisten_host) del mismo modo que restringes el acceso al protocolo HTTP. - El endpoint valida el encabezado
OriginconHostpara mitigar el secuestro de WebSocket entre orígenes; configura los proxies inversos en consecuencia si terminas TLS de forma externa. - Detrás de un proxy inverso que termina TLS, la conexión ascendente a ClickHouse usa
httpsin cifrar aunque el navegador usehttps, por lo que la comprobación estricta del mismo origen rechazaría conexiones legítimas. Para estas implementaciones, establecewebterminal_allowed_originscomo una lista de orígenes completos separados por comas a los que se permite abrir sesiones de WebSocket; cuando esta configuración no está vacía, reemplaza la comprobación predeterminada del mismo origen. Ejemplo:<webterminal_allowed_origins>https://example.com,https://app.example.com:8443</webterminal_allowed_origins>.
Disponibilidad de la plataforma
clickhouse-client está implementada sobre primitivas POSIX portátiles (posix_openpt/grantpt/unlockpt), con una implementación específica para Linux que utiliza ptsname_r, que es seguro para hilos. Los enlaces a /webterminal en la página de inicio de ClickHouse y en /play se ocultan automáticamente cuando el endpoint no está disponible (por ejemplo, cuando allow_experimental_webterminal no está habilitado).