Docker

Run the Proxer server or client from the OCI image.

The image is published to Docker Hub as tinyrack/proxer and to GHCR as ghcr.io/tinyrack-net/proxer.

Check the version:

docker run --rm tinyrack/proxer --version

Run a server

docker run --rm -p 8080:8080 \
  -e PROXER_TOKEN="$PROXER_TOKEN" \
  tinyrack/proxer \
  server --listen 0.0.0.0:8080 --domain proxy.example.com

The server does not need a volume. Tunnel registrations are in memory and are recreated when clients reconnect.

Use dev-token only for local demos. For anything exposed outside your machine, set PROXER_TOKEN from a secret store instead of putting a long-lived token in the command line.

Docker Compose

services:
  proxer:
    image: ghcr.io/tinyrack-net/proxer:latest
    command:
      - server
      - --listen
      - 0.0.0.0:8080
      - --domain
      - proxy.example.com
    environment:
      PROXER_TOKEN: ${PROXER_TOKEN:?set PROXER_TOKEN}
      PROXER_TRUSTED_PROXIES: loopback,private
    ports:
      - "8080:8080"
    healthcheck:
      test: ["CMD", "proxer", "--version"]
      interval: 30s
      timeout: 5s
      retries: 3

Client containers

proxer http <port> forwards to 127.0.0.1:<port> from inside the client process. In a container, that means the loopback interface inside that container.

On Linux, use host networking when the app is listening on the Docker host:

docker run --rm --network host \
  -e PROXER_TOKEN="$PROXER_TOKEN" \
  tinyrack/proxer \
  http 3000 --server ws://127.0.0.1:8080 --subdomain demo

On Docker Desktop, host.docker.internal is not enough by itself because the client currently has no upstream host flag. Run the client on the host, or run it in the same container/network namespace as the app it should reach.

Kubernetes probes

Use the fixed health endpoints when your platform can probe HTTP paths:

/__proxer__/health/live
/__proxer__/health/ready

The control endpoint is also fixed:

/__proxer__/control

Do not point probes at the control endpoint; it expects a WebSocket upgrade.

Environment variables

The server can be configured with PROXER_ environment variables:

docker run --rm -p 8080:8080 \
  -e PROXER_LISTEN=0.0.0.0:8080 \
  -e PROXER_DOMAIN=proxy.example.com \
  -e PROXER_TOKEN="$PROXER_TOKEN" \
  -e PROXER_TRUSTED_PROXIES=loopback,private \
  ghcr.io/tinyrack-net/proxer server

Set --trusted-proxy or PROXER_TRUSTED_PROXIES only for reverse proxies you control.