diff --git a/.gitignore b/.gitignore index fbe076c..4ee4276 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ /kafka-consumer /sqs-consumer bin/ +ws-probe/ws-probe # Go *.exe diff --git a/ws-probe/Dockerfile b/ws-probe/Dockerfile new file mode 100644 index 0000000..21cb112 --- /dev/null +++ b/ws-probe/Dockerfile @@ -0,0 +1,17 @@ +# ws-probe — проверка WebSocket через платформенный ingress Nubes. +# Образ: naeel/iot-ws-probe (Docker Hub, публичный — платформа тянет только публичные). + +FROM golang:1.25 AS builder +WORKDIR /workspace +COPY go.mod go.sum ./ +RUN go mod download +COPY main.go ./ +ARG VERSION=dev +RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -ldflags "-X main.version=${VERSION}" -o ws-probe . + +FROM gcr.io/distroless/static:nonroot +WORKDIR / +COPY --from=builder /workspace/ws-probe . +USER 65532:65532 +EXPOSE 8080 +ENTRYPOINT ["/ws-probe"] diff --git a/ws-probe/Makefile b/ws-probe/Makefile new file mode 100644 index 0000000..3a8e107 --- /dev/null +++ b/ws-probe/Makefile @@ -0,0 +1,19 @@ +# ws-probe — тестовый WS echo-сервер для проверки wss на платформе Nubes. + +VERSION ?= v0.1.0 +IMAGE ?= naeel/iot-ws-probe + +.PHONY: build tidy docker-build docker-push + +build: + CGO_ENABLED=0 go build -ldflags "-X main.version=$(VERSION)" -o ws-probe . + +tidy: + go mod tidy + +docker-build: + docker build --build-arg VERSION=$(VERSION) -t $(IMAGE):$(VERSION) -t $(IMAGE):latest . + +docker-push: + docker push $(IMAGE):$(VERSION) + docker push $(IMAGE):latest diff --git a/ws-probe/go.mod b/ws-probe/go.mod new file mode 100644 index 0000000..fd6464b --- /dev/null +++ b/ws-probe/go.mod @@ -0,0 +1,5 @@ +module ws-probe + +go 1.25 + +require github.com/gorilla/websocket v1.5.3 diff --git a/ws-probe/go.sum b/ws-probe/go.sum new file mode 100644 index 0000000..25a9fc4 --- /dev/null +++ b/ws-probe/go.sum @@ -0,0 +1,2 @@ +github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= +github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= diff --git a/ws-probe/main.go b/ws-probe/main.go new file mode 100644 index 0000000..663eb62 --- /dev/null +++ b/ws-probe/main.go @@ -0,0 +1,117 @@ +// ws-probe — тестовый контейнер для проверки WebSocket (wss) через платформенный ingress Nubes. +// +// Назначение: подтвердить, что «Простой HTTP контейнер» платформы пропускает +// WebSocket upgrade (101 Switching Protocols) и держит долгоживущие соединения. +// +// Эндпоинты: +// +// GET / — инфо-страница (HTML) +// GET /health — {"status":"ok","version":...} +// GET /ws — WebSocket echo: отвечает на сообщения, шлёт ping каждые 20с +// +// Без кредов, без внешних зависимостей — только echo. +package main + +import ( + "encoding/json" + "log" + "net/http" + "os" + "time" + + "github.com/gorilla/websocket" +) + +var version = "dev" + +const pageHTML = ` +
WebSocket echo: /ws
Health: /health