ekmire docs · by Flux8Labs
docs / proxy/install

Proxy installation

Works in front of any HTTP app — Docker Compose, standalone Docker, bare metal, Kubernetes.

How it fits

The ekmire proxy is a single static binary (or Docker image) that sits in front of your app and inspects every HTTP request. It doesn't care how your app is deployed — as long as you can point HTTP traffic through it, it works.

Three required env vars, one proxy in front of your app:

EKMIRE_API_KEY=<your key>      # from dashboard → Projects → API Keys
EKMIRE_UPSTREAM=<your app URL> # where to forward requests after inspection
EKMIRE_CLOUD=https://api.ekmire.com  # omit to use default

Docker Compose (existing compose file)

Add the proxy service alongside your app. Requests hit port 8080 on the proxy, which forwards clean traffic to your app on its internal port.

services:
  ekmire-proxy:
    image: ghcr.io/flux8labs/ekmire-proxy:latest
    ports: ["8080:8080"]
    environment:
      EKMIRE_API_KEY: ${EKMIRE_API_KEY}
      EKMIRE_UPSTREAM: http://app:3000
  app:
    build: .
    expose: ["3000"]   # app not exposed directly; traffic goes through proxy

Set EKMIRE_API_KEY in a .env file next to your compose file, or export it in your shell before running docker compose up.

WINDOWSOn Windows with Docker Desktop, set the variable in your shell session before starting — the .env file is read by docker compose config but may not propagate to the container on restart. In PowerShell: $env:EKMIRE_API_KEY = "your_key", then docker compose up -d.

Standalone Docker (no Compose)

Don't use Docker Compose? Run the proxy as a single container in front of any app — local process, remote host, or another container.

# App running on localhost:3000 (outside Docker)
docker run -d \
  -p 8080:8080 \
  -e EKMIRE_API_KEY=your_key \
  -e EKMIRE_UPSTREAM=http://host.docker.internal:3000 \
  -e EKMIRE_CLOUD=https://api.ekmire.com \
  ghcr.io/flux8labs/ekmire-proxy:latest

# App in another container on the same Docker network
docker run -d \
  -p 8080:8080 \
  --network my-app-network \
  -e EKMIRE_API_KEY=your_key \
  -e EKMIRE_UPSTREAM=http://my-app-container:3000 \
  -e EKMIRE_CLOUD=https://api.ekmire.com \
  ghcr.io/flux8labs/ekmire-proxy:latest
NOTEOn Linux, use --add-host=host.docker.internal:host-gateway to make host.docker.internal resolve to your host machine. On Docker Desktop (Mac/Windows) it resolves automatically.

Bare metal / systemd

Single static binary, ~8MB, zero runtime dependencies. Works on any Linux (amd64 or arm64), macOS (arm64), or Windows (amd64) host.

# Linux amd64
curl -Lo ekmire-proxy https://github.com/bhavyansh001/ekmire-backend/releases/latest/download/ekmire-proxy-linux-amd64
chmod +x ekmire-proxy

# Run inline
EKMIRE_API_KEY=your_key \
EKMIRE_UPSTREAM=http://localhost:3000 \
EKMIRE_CLOUD=https://api.ekmire.com \
./ekmire-proxy

systemd unit (Linux)

[Unit]
Description=ekmire proxy
After=network.target

[Service]
Environment=EKMIRE_API_KEY=your_key
Environment=EKMIRE_UPSTREAM=http://localhost:3000
Environment=EKMIRE_CLOUD=https://api.ekmire.com
ExecStart=/usr/local/bin/ekmire-proxy
Restart=on-failure

[Install]
WantedBy=multi-user.target

Kubernetes

Two patterns: sidecar (proxy in the same pod as your app) or gateway (proxy as a separate Deployment in front of your Service).

Sidecar

Add the proxy as a second container in your existing Pod spec. Traffic hits the proxy container on 8080, which forwards to your app container on localhost:

containers:
  - name: app
    image: your-app:latest
    ports: [{ containerPort: 3000 }]
  - name: ekmire-proxy
    image: ghcr.io/flux8labs/ekmire-proxy:latest
    ports: [{ containerPort: 8080 }]
    env:
      - name: EKMIRE_API_KEY
        valueFrom:
          secretKeyRef: { name: ekmire-secret, key: api-key }
      - name: EKMIRE_UPSTREAM
        value: http://localhost:3000
      - name: EKMIRE_CLOUD
        value: https://api.ekmire.com

Gateway

Deploy the proxy as its own Deployment with a Service of its own. Point EKMIRE_UPSTREAM to the internal ClusterIP DNS name of your app: http://my-service.default.svc.cluster.local:80.

EKMIRE_UPSTREAM patterns

SCENARIOEKMIRE_UPSTREAM VALUE
Compose service named app on port 3000http://app:3000
App on host machine (Docker Desktop)http://host.docker.internal:3000
App on host machine (Linux Docker)http://172.17.0.1:3000 (host gateway IP)
Another Docker container on same networkhttp://container-name:3000
Kubernetes ClusterIP servicehttp://svc-name.namespace.svc.cluster.local:80
Remote staging serverhttps://staging.example.com