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 defaultDocker 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.
.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
--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.targetKubernetes
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
| SCENARIO | EKMIRE_UPSTREAM VALUE |
|---|---|
Compose service named app on port 3000 | http://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 network | http://container-name:3000 |
| Kubernetes ClusterIP service | http://svc-name.namespace.svc.cluster.local:80 |
| Remote staging server | https://staging.example.com |