> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-postgresql-tls-support.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Local mode only

> Deploying ClickStack with Local mode only - The ClickHouse Observability Stack

export const Image = ({img, alt, size = "lg"}) => {
  const normalizedSize = ["sm", "md", "lg"].includes(size) ? size : "lg";
  return <div className={`ch-image-${normalizedSize}`}>
      <Frame>
        <img src={img} alt={alt} />
      </Frame>
    </div>;
};

Similar to the [all-in-one image](/clickstack/deployment/docker-compose), this comprehensive Docker image bundles all ClickStack components:

* **ClickHouse**
* **HyperDX**
* **OpenTelemetry (OTel) collector** (exposing OTLP on ports `4317` and `4318`)
* **MongoDB** (for persistent application state)

**However, user authentication is disabled for this distribution of HyperDX**

<h3 id="suitable-for">
  Suitable for
</h3>

* Demos
* Debugging
* Development where HyperDX is used

<h2 id="deployment-steps">
  Deployment steps
</h2>

<br />

<Steps>
  <Step title="Deploy with Docker" id="deploy-with-docker">
    Local mode deploys the HyperDX UI on port 8080.

    ```shell theme={null}
    docker run -p 8080:8080 clickhouse/clickstack-local:latest
    ```
  </Step>

  <Step title="Navigate to the HyperDX UI" id="navigate-to-hyperdx-ui">
    Visit [http://localhost:8080](http://localhost:8080) to access the HyperDX UI.

    **You won't be prompted to create a user, as authentication isn't enabled in this deployment mode.**

    Connect to your own external ClickHouse cluster e.g. ClickHouse Cloud.

    <Image img="https://mintcdn.com/private-7c7dfe99-postgresql-tls-support/YHiln7HS6gMhByZR/images/use-cases/observability/hyperdx-2.webp?fit=max&auto=format&n=YHiln7HS6gMhByZR&q=85&s=e11a3aa203cf609d1572d1b862222b27" alt="Create login" size="md" width="1966" height="1392" data-path="images/use-cases/observability/hyperdx-2.webp" />

    Create a source, retain all default values, and complete the `Table` field with the value `otel_logs`. All other settings should be auto-detected, allowing you to click `Save New Source`.

    <Image img="https://mintcdn.com/private-7c7dfe99-postgresql-tls-support/YHiln7HS6gMhByZR/images/use-cases/observability/hyperdx-logs.webp?fit=max&auto=format&n=YHiln7HS6gMhByZR&q=85&s=8008bba036c45b5ce60aa05f9b6db986" alt="Create logs source" size="md" width="1944" height="1572" data-path="images/use-cases/observability/hyperdx-logs.webp" />
  </Step>
</Steps>

<h2 id="schema-choice-map-vs-json">
  Schema choice: Map vs JSON
</h2>

ClickStack stores attributes as `Map(LowCardinality(String), String)` columns by default. This is the recommended schema for observability workloads. Combined with [bucketed map serialization](/reference/data-types/map#bucketed-map-serialization) and text indexes on map keys and values, it provides selective lookups without the per-key ingest overhead of dynamic JSON subcolumns.

A `JSON`-typed schema is available in beta for evaluation on workloads with a small, stable attribute key-set. It is **not recommended** as the default. See [Map vs JSON type](/clickstack/ingesting-data/schema/map-vs-json) for the full comparison and the env vars required to enable JSON support.
