> 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/configuration.md).

# Configuration

The .env file, AI Bridge configMaps, and the EyePop API key

There are two parts of the configuration that live in the `.env` and are read once at startup. Deployment settings and how the container finds the AI Bridge

### Install the EyePop app

With XProtect and the AI Bridge already running ([Prerequisites](/developer-documentation/deploying/vms/milestone/prerequisites.md)), install the EyePop runtime **on the same host as the AI Bridge**, joined to the bridge's Docker network.

1. Make a directory for the deployment, and inside it create `compose.release.yaml`:

### compose.release.yaml

```yaml
name: eyepop

services:
  eyepop-milestone-iva:
    container_name: eyepop-milestone-iva
    image: ${EYEPOP_IMAGE}:${EYEPOP_IMAGE_TAG}
    env_file:
      - .env
    ports:
      - "7070:7070"
    networks:
      - aibridge
    tmpfs:
      - /tmp
    read_only: true
    restart: unless-stopped

networks:
  aibridge:
    external: true
    name: ${AIBRIDGE_NETWORK:-aibridge_default}
```

2. Create `.env` next to `compose.release.yaml`. Start from this template, then fill in the values described below. Never commit it with real values.

### .env

```dotenv
# EyePop image
EYEPOP_IMAGE=registry.eyepop.ai/vms-bridge/eyepop-milestone-iva
EYEPOP_IMAGE_TAG=v0.9.1

# Must match the AI Bridge deployment's own KAFKA_LOG_RETENTION_MS exactly.
KAFKA_LOG_RETENTION_MS=300000

# Docker network the AI Bridge containers are on (read by compose).
AIBRIDGE_NETWORK=aibridge_default

# Stable app-registration id. Keep it constant across restarts and upgrades.
EYEPOP_APP_ID=8b601dca-1fcf-44ef-ac66-80bb4659611d

# Where Management Client loads the management page. Must be reachable from it.
APP_URL=http://localhost:7070/
```

3. Start it:

   ```shell
   docker compose -f compose.release.yaml up -d
   ```
4. Confirm in Management Client under **Processing Servers → Registered applications** — "EyePop" appears in the list. Open that entry to load the management page, then set your [EyePop API key](https://docs.eyepop.ai/developer-documentation/api-keys) on the **Configuration** tab.

{% hint style="info" %}
The EyePop runtime always runs on the same host as the AI Bridge and joins its Docker network, so the bridge's service names resolve and the networking defaults below work unchanged.
{% endhint %}

| Variable                                                                                 | Description                                                                                                                                               |
| ---------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `KAFKA_LOG_RETENTION_MS`                                                                 | **Required, no default.** Must match the AI Bridge deployment's own `KAFKA_LOG_RETENTION_MS` exactly (in its `.env`).                                     |
| `EYEPOP_IMAGE`, `EYEPOP_IMAGE_TAG`                                                       | The image path and version to pull                                                                                                                        |
| `EYEPOP_APP_ID`                                                                          | The stable GUID for the "EyePop" app registration.                                                                                                        |
| `APP_URL`                                                                                | The address Management Client uses to load the management page, e.g. `http://<host>:7070/`. Must be reachable from wherever Management Client runs.       |
| `AIB_GRAPHQL_URL`, `KAFKA_BOOTSTRAP_SERVERS`, `AIB_ENDPOINT_REWRITE`, `AIBRIDGE_NETWORK` | Networking. Defaults target the AI Bridge's container names and work in every supported layout, since the app always runs in the bridge's Docker network. |

### EyePop API key

API key is **not** in `.env`. It needs to be set from the management page once the app is registered:

1. Get a key from your [EyePop dashboard](https://dashboard.eyepop.ai). ([Instructions](https://docs.eyepop.ai/developer-documentation/api-keys))
2. In Management Client, open the "EyePop" entry under **Processing Servers → Registered applications** to load the management page.
3. On the **Configuration** tab, paste your EyePop API key and apply.

### Next steps

* [Running Detection](/developer-documentation/deploying/vms/milestone/running-detection.md) — subscribe a camera and see bounding boxes
* [Workflows](/developer-documentation/deploying/vms/milestone/workflows.md) — control what each camera detects
