> For the complete documentation index, see [llms.txt](https://docs.eyepop.ai/developer-documentation/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.eyepop.ai/developer-documentation/deploying/vms/milestone/prerequisites.md).

# Prerequisites

Stand up Milestone XProtect and the AI Bridge before installing EyePop

The EyePop runtimes runs as an additional container inside an existing **Milestone AI Bridge** deployment. Before you install EyePop, you need XProtect and the AI Bridge running. This page gets the AI Bridge up; Milestone's own documentation is the authority for XProtect and administration.

{% hint style="info" %}
Milestone documentation for the AI Bridge lives at [doc.milestonesys.com/AIB/Help/Latest/en-US](https://doc.milestonesys.com/AIB/Help/Latest/en-US). It covers the concepts, administration, roles, and users.
{% endhint %}

### Requirements

* Milestone XProtect with **AI Bridge**.
* Docker and Docker Compose on the host that will run the AI Bridge and the EyePop runtime.
* Outbound access from that host to EyePop Cloud (`compute.eyepop.ai`) for inference.
* One inbound port (default **7070**) reachable from wherever Management Client runs, so its embedded browser can load the EyePop management page.
* An EyePop account and API key.

### 1. XProtect, roles, and users

Install XProtect and configure it per Milestone's documentation. AI Bridge's **preconfiguration lives in Milestone's configuration**:

* The AI Bridge **admin plugin** in Management Client.
* A **role** with the permissions the bridge needs.
* A dedicated **user** for the bridge to authenticate to the VMS.

That user's credentials become `VMS_USER` and `VMS_PASS` in the AI Bridge `.env` in the next step. Follow Milestone's docs for the exact steps — [doc.milestonesys.com/AIB/Help/Latest/en-US](https://doc.milestonesys.com/AIB/Help/Latest/en-US).

You also need at least one camera feeding video into XProtect. If you don't have a physical camera, Milestone's [**StableFPS**](https://doc.developer.milestonesys.com/mipsdk/gettingstarted/StableFPS.html) driver adds synthetic test devices; confirm the camera shows live video in Smart Client before continuing.

### 2. Run the AI Bridge

The AI Bridge ships as a Docker Compose deployment. Milestone provides the files, and here are the steps to use those milestone resources:

1. **Download the AI Bridge resources** from [milestonesys.com/…?prod=2128](https://www.milestonesys.com/my-milestone/download-software/?prod=2128). This downloads a zip; unzip it.
2. **Go to the AWS Compose deployment** inside the unzipped folder:

   ```
   Milestone_AI_Bridge_3.0.1_Resources/aibridge_compose_deployment/aws
   ```

Name of the version can be different depending on the version of the AI bridge you downloaded it.

It contains `docker-compose-production.yml` and an `.env` file. The container images it pulls come from the public AWS ECR gallery, [gallery.ecr.aws/milestonesys/aibridge](https://gallery.ecr.aws/milestonesys/aibridge).

3. **Set the VMS connection in `.env`:**

   | Variable   | Value                                                                                              |
   | ---------- | -------------------------------------------------------------------------------------------------- |
   | `VMS_USER` | The bridge user you created in step 1.                                                             |
   | `VMS_PASS` | That user's password.                                                                              |
   | `VMS_URL`  | The XProtect address — depends on your layout, **2A - Same Host** or **2B - External Host** below. |

If you are unsure what value to put for VMS\_URL, it can be found in Management Client on the left panel "Site Navigation", you will see your server name, right click on Properties..., you will see the URL Alternate Addreses i.e. `http://opa-1:80/`

Milestone supports running the AI bridge on the same host or external host. In step 2 we are going to pick the layout that matches where XProtect runs relative to the AI Bridge host.

#### 2A. Same host as XProtect

In this deployment: XProtect, the AI Bridge, and the EyePop app all run on one Windows host.

The bridge's containers can't resolve the XProtect hostname through Docker DNS, so you need to map it to the host gateway. To do so, find `docker-compose-production.yml`, add an `extra_hosts` entry — pointing your computer name at `host-gateway` — on each service that talks to the VMS:

```yaml
extra_hosts:
  - "<your-computer-name>:host-gateway"
```

`host-gateway` resolves to the host machine automatically, so you don't hardcode an IP. Set `VMS_URL` to your XProtect address using that same name, e.g. `https://<your-computer-name>`.

#### 2B. External host

In this deployment: The AI Bridge and the EyePop runtime are deployed together on a dedicated host, separate from XProtect but on the same network. Set `VMS_URL` to XProtect's address on the network — a hostname or IP reachable from the AI Bridge host.

#### Start the AI Bridge

```shell
docker compose -f docker-compose-production.yml up -d
```

The AI Bridge registers itself with XProtect and appears in Management Client under **Processing Servers**.

{% hint style="warning" %}
Note the `KAFKA_LOG_RETENTION_MS` value in this AI Bridge `.env`. The EyePop app's own `.env` **must set the same value** — a mismatch silently breaks detection of a camera being unsubscribed. See [Configuration](/developer-documentation/deploying/vms/milestone/configuration.md).
{% endhint %}

### Next steps

With XProtect and the AI Bridge running, install the EyePop runtime on the AI Bridge host.

* [Configuration](/developer-documentation/deploying/vms/milestone/configuration.md) — install the EyePop container, `.env`, and the API key
* [Running Detection](/developer-documentation/deploying/vms/milestone/running-detection.md) — subscribe a camera and see bounding boxes
