> ## Documentation Index
> Fetch the complete documentation index at: https://docs.hyperprobe.co/llms.txt
> Use this file to discover all available pages before exploring further.

# Self-Hosting Deployment Guide

> Deploy the HyperProbe server, database, and telemetry broker on your own infrastructure using Docker Compose.

export const HypertestVersionNotice = () => {
  const [version, setVersion] = useState(null);
  const [loading, setLoading] = useState(true);
  const [error, setError] = useState(false);
  const [copied, setCopied] = useState(false);
  useEffect(() => {
    fetch('https://registry.npmjs.org/@hyperprobe/node-sdk/latest').then(res => {
      if (!res.ok) throw new Error('Failed to fetch version');
      return res.json();
    }).then(data => {
      if (data && data.version) {
        setVersion(data.version);
      } else {
        setError(true);
      }
    }).catch(err => {
      console.error('Error fetching @hyperprobe/node-sdk version:', err);
      setError(true);
    }).finally(() => {
      setLoading(false);
    });
  }, []);
  const copyToClipboard = () => {
    if (!version) return;
    navigator.clipboard.writeText(`HYPERTEST_VERSION=${version}`).then(() => {
      setCopied(true);
      setTimeout(() => setCopied(false), 2000);
    });
  };
  if (error) {
    return <div className="mt-3 rounded-lg border border-amber-500/20 bg-amber-500/10 p-3 text-xs text-amber-700 dark:text-amber-300">
        Could not automatically fetch the latest version tag from npm. Please check{' '}
        <a href="https://www.npmjs.com/package/@hyperprobe/node-sdk" target="_blank" rel="noopener noreferrer" className="underline font-semibold">
          @hyperprobe/node-sdk on npm
        </a>{' '}
        and set <code className="font-mono">HYPERTEST_VERSION</code> to the latest release tag.
      </div>;
  }
  return <div className="mt-3 overflow-hidden rounded-lg border border-zinc-200 dark:border-zinc-800 bg-zinc-50/50 dark:bg-zinc-900/50 p-3">
      <div className="flex items-center justify-between gap-2 pb-2">
        <div className="flex items-center gap-2">
          <span className="inline-flex items-center rounded-full bg-emerald-500/10 px-2 py-0.5 text-xs font-medium text-emerald-600 dark:text-emerald-400">
            <span className="mr-1.5 h-1.5 w-1.5 rounded-full bg-emerald-500 animate-pulse"></span>
            Latest Tag (npm)
          </span>
          <span className="text-xs text-zinc-500 dark:text-zinc-400 font-mono">
            {loading ? 'fetching...' : `@hyperprobe/node-sdk@${version}`}
          </span>
        </div>
        <button onClick={copyToClipboard} disabled={loading || !version} className="inline-flex items-center gap-1 rounded bg-zinc-200 hover:bg-zinc-300 dark:bg-zinc-800 dark:hover:bg-zinc-700 px-2 py-1 text-xs font-medium text-zinc-700 dark:text-zinc-200 transition-colors disabled:opacity-50">
          {copied ? <>
              <svg className="h-3.5 w-3.5 text-emerald-500" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth={2}>
                <path strokeLinecap="round" strokeLinejoin="round" d="M5 13l4 4L19 7" />
              </svg>
              <span>Copied!</span>
            </> : <>
              <svg className="h-3.5 w-3.5" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth={2}>
                <path strokeLinecap="round" strokeLinejoin="round" d="M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z" />
              </svg>
              <span>Copy .env value</span>
            </>}
        </button>
      </div>
      <div className="flex items-center justify-between rounded bg-zinc-900 px-3 py-2 text-zinc-100 font-mono text-xs">
        <code>HYPERTEST_VERSION={loading ? '...' : version}</code>
      </div>
      <p className="mt-2 text-xs text-zinc-500 dark:text-zinc-400 mb-0">
        Set this value in your <code className="font-mono">.env</code> file to ensure your self-hosted platform matches the latest SDK release.
      </p>
    </div>;
};

For teams with strict compliance mandates or isolated VPC requirements, you can self-host the entire HyperProbe architecture (Dashboard UI, Telemetry Broker, Database, and Traefik reverse proxy) on a single Linux VM.

***

## 🖥️ System Requirements

Ensure your host VM meets these minimum hardware profiles:

| Resource | Recommended Minimum |
| :- | :- |
| **Operating System** | Ubuntu 22.04 LTS or 24.04 LTS |
| **CPU** | 4 vCPU |
| **RAM** | 16 GB |
| **Storage** | 50 GB SSD |
| **Docker** | Docker v26+ and Docker Compose v2+ |

***

## 🛠️ Step-by-Step Installation

<Steps>
  <Step title="Verify Docker Engine">
    Verify that your VM is running the latest Docker Engine:

    ```bash theme={null}
    docker -v
    ```

    If Docker is not yet installed or is below version 25, run the official utility script to bootstrap it:

    ```bash theme={null}
    curl -fsSL https://get.docker.com -o get-docker.sh && sudo sh get-docker.sh
    ```
  </Step>

  <Step title="Download the Deployment Package">
    Create a secure home directory and fetch the official HyperProbe starter bundle:

    ```bash theme={null}
    sudo mkdir -p /opt/hyperprobe
    cd /opt/hyperprobe
    sudo curl -O https://hyperprobe-assets.s3.ap-south-1.amazonaws.com/static/hyperprobe.tar.xz
    sudo tar -xf hyperprobe.tar.xz
    ```
  </Step>

  <Step title="Configure Environment Variables (.env)">
    Inside the extracted bundle, open the `.env` file and customize the port bindings and versions. Ensure these ports are open on your VM's firewall/security group rules:

    * `HOST_BACKEND_PORT_TRAEFIK` - The port used by developers to access the HyperProbe web dashboard.
    * `HOST_LOGGER_PORT_TRAEFIK` - The secure port that connected SDK agents will use to transmit dynamic log, counter, and snapshot payloads.
    * `HOST_CONSUL_HTTP_PORT_TRAEFIK` - Internal registry port.
    * `HYPERTEST_VERSION` - The platform version tag to pull. Set this to the latest `@hyperprobe/node-sdk` tag shown below. Platform and Node SDK always share the same the release tag value.

    <HypertestVersionNotice />
  </Step>

  <Step title="AWS ECR Public Authentication (Optional: only if you get this error continuously)">
    To avoid hitting pull rate limits (`toomanyrequests: Rate exceeded`) when pulling images from `public.ecr.aws`, authenticate Docker with AWS ECR before running Docker Compose.<br />**Note:** Authentication with AWS ECR Public requires `--region us-east-1` regardless of your default AWS region setup.

    ```bash theme={null}
    aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws
    ```
  </Step>

  <Step title="Boot the Platform Stack">
    Run Docker Compose in detached mode to download and launch the services:<br />Complete aws login for better

    ```bash theme={null}
    sudo docker compose up -d
    ```
  </Step>

  <Step title="Sign In & License">
    Navigate your browser to:

    ```text theme={null}
    http://<your-vm-ip-or-domain>:<HOST_BACKEND_PORT_TRAEFIK>
    ```

    Sign in, create your primary admin account, and enter your license key to activate the workspace!
  </Step>

  <Step title="Create a team">
    * Go to teams page from left navigation menu.
    * Click **<kbd>Create Team</kbd>** and enter the required details to set up a non-admin team.

      *Note: Only non-admin teams can be associated with services.*
    * Create a service under your non-admin team.
    * Integrate the HyperProbe SDK automatically by clicking [Integration using AI agent](/sdks/with-ai-agent) or select your programming language from options below to follow steps and set up manually.<br />
  </Step>
</Steps>

<Columns cols={4}>
  <Column>
    [Node.js SDK Setup Guide](/sdks/node)
  </Column>

  <Column>
    [Java Agent Setup Guide](/sdks/java)
  </Column>

  <Column>
    [Python SDK Setup Guide](/sdks/python)
  </Column>

  <Column>
    [Ruby SDK Setup Guide](/sdks/ruby)
  </Column>
</Columns>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.