콘텐츠로 이동
ProxerProxerv0.13.0

Docker

OCI 이미지로 Proxer 서버 또는 클라이언트를 실행합니다.

이미지는 Docker Hub의 tinyrack/proxer와 GHCR의 ghcr.io/tinyrack-net/proxer로 게시됩니다.

버전을 확인합니다.

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

서버에는 볼륨이 필요하지 않습니다. 터널 등록은 메모리에 있고, 클라이언트가 재연결하면 다시 등록됩니다.

dev-token은 로컬 데모에서만 사용하세요. 외부에 노출하는 환경에서는 긴 토큰을 명령줄에 직접 쓰기보다 secret 저장소에서 PROXER_TOKEN으로 넘기는 편이 낫습니다.

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

proxer http <port>는 클라이언트 프로세스 안에서 127.0.0.1:<port>로 전달합니다. 컨테이너 안에서 실행하면 그 컨테이너의 loopback을 뜻합니다.

Linux에서 앱이 Docker host에 떠 있다면 host networking을 쓰는 방식이 보통입니다.

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

Docker Desktop에서는 host.docker.internal만으로는 부족합니다. 현재 클라이언트에는 upstream host를 지정하는 flag가 없습니다. 클라이언트를 host에서 직접 실행하거나, 클라이언트가 접근해야 하는 앱과 같은 컨테이너 또는 같은 network namespace에서 실행하세요.

플랫폼에서 HTTP 경로를 probe할 수 있다면 고정 헬스 엔드포인트를 사용합니다.

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

제어 엔드포인트도 고정입니다.

/__proxer__/control

제어 엔드포인트는 WebSocket upgrade를 기대하므로 probe 대상으로 쓰지 마세요.

서버는 PROXER_ 환경변수로 설정할 수 있습니다.

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

--trusted-proxy 또는 PROXER_TRUSTED_PROXIES는 직접 관리하는 reverse proxy에만 설정하세요.