From 26621f5d082da49cd9143e6765e8c1532192b5cb Mon Sep 17 00:00:00 2001 From: Repinoid Date: Sun, 11 Oct 2026 19:33:15 +0300 Subject: [PATCH] =?UTF-8?q?fix(config):=20=D0=B4=D0=B5=D1=84=D0=BE=D0=BB?= =?UTF-8?q?=D1=82=20SQS=5FENDPOINT=20->=20https://sqs.sinefo.ru;=20MQTT=5F?= =?UTF-8?q?HOST=20=D1=82=D0=B5=D0=BF=D0=B5=D1=80=D1=8C=20=D0=BE=D0=B1?= =?UTF-8?q?=D1=8F=D0=B7=D0=B0=D1=82=D0=B5=D0=BB=D0=B5=D0=BD=20(=D0=BF?= =?UTF-8?q?=D1=83=D1=81=D1=82=D0=BE=D0=B9=20=D0=B4=D0=B5=D1=84=D0=BE=D0=BB?= =?UTF-8?q?=D1=82=20=E2=80=94=20EMQX=20=D0=B2=20=D0=B4=D1=80=D1=83=D0=B3?= =?UTF-8?q?=D0=BE=D0=BC=20namespace)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 2 +- internal/service/config/config.go | 11 +++++++++-- internal/service/config/defaults.go | 14 ++++++++------ 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/Dockerfile b/Dockerfile index 9768ae9..9de3981 100644 --- a/Dockerfile +++ b/Dockerfile @@ -24,7 +24,7 @@ USER 65532:65532 EXPOSE 9090 ENV API_PORT=9090 \ - SQS_ENDPOINT=http://containerk8s.f1ffb134-7d16-45bd-8bef-69f6ec8ab33c.svc.cluster.local:4100 \ + SQS_ENDPOINT=https://sqs.sinefo.ru \ SQS_QUEUE_NAME=iot-telemetry \ SQS_REGION=us-east-1 \ SQS_LONG_POLL_SECONDS=20 \ diff --git a/internal/service/config/config.go b/internal/service/config/config.go index 5b1aaee..a5d096b 100644 --- a/internal/service/config/config.go +++ b/internal/service/config/config.go @@ -123,13 +123,17 @@ func Load() (*Config, error) { LogLevel: parseLogLevel(os.Getenv("LOG_LEVEL"), slog.LevelInfo), } - // MQTT broker URL: либо полный MQTT_BROKER_URL, либо из HOST/PORT/WS_PATH + // MQTT broker URL: либо полный MQTT_BROKER_URL, либо из HOST/PORT/WS_PATH. + // MQTT_HOST обязателен: EMQX в другом namespace платформы, дефолта нет + // (см. DefaultMQTTHost). cfg.MQTTBrokerURL = os.Getenv("MQTT_BROKER_URL") if cfg.MQTTBrokerURL == "" { host := getEnv("MQTT_HOST", DefaultMQTTHost) port := getEnv("MQTT_PORT", DefaultMQTTPort) path := getEnv("MQTT_WS_PATH", DefaultMQTTWSPath) - cfg.MQTTBrokerURL = "ws://" + host + ":" + port + path + if host != "" { + cfg.MQTTBrokerURL = "ws://" + host + ":" + port + path + } } else if !strings.HasPrefix(cfg.MQTTBrokerURL, "ws://") && !strings.HasPrefix(cfg.MQTTBrokerURL, "wss://") { return nil, fmt.Errorf("MQTT_BROKER_URL must start with ws:// or wss://, got %q", cfg.MQTTBrokerURL) @@ -139,6 +143,9 @@ func Load() (*Config, error) { if cfg.IOTPGDSN == "" { missing = append(missing, "IOT_PG_DSN") } + if cfg.MQTTBrokerURL == "" { + missing = append(missing, "MQTT_HOST (или MQTT_BROKER_URL)") + } if cfg.SQSAccessKey == "" { missing = append(missing, "SQS_ACCESS_KEY") } diff --git a/internal/service/config/defaults.go b/internal/service/config/defaults.go index d3367dd..74c52f2 100644 --- a/internal/service/config/defaults.go +++ b/internal/service/config/defaults.go @@ -6,9 +6,9 @@ const ( // DefaultAPIPort — единственный порт контейнера: API + /health + /metrics. DefaultAPIPort = "9090" - // DefaultSQSEndpoint — внутренний адрес shared-sqs в том же кластере Nubes. - // Обходит внешний шлюз платформы (таймауты 31-33с, MSS 1448, ~150с). - DefaultSQSEndpoint = "http://containerk8s.f1ffb134-7d16-45bd-8bef-69f6ec8ab33c.svc.cluster.local:4100" + // DefaultSQSEndpoint — публичный endpoint shared-sqs (ВМ 213), внешний доступ + // обязателен: shared-sqs живёт НЕ в кластере Nubes. Переопределяется SQS_ENDPOINT. + DefaultSQSEndpoint = "https://sqs.sinefo.ru" // DefaultSQSQueueName — очередь телеметрии IoT. DefaultSQSQueueName = "iot-telemetry" @@ -21,9 +21,11 @@ const ( // DefaultSQSRegion — регион для self-hosted SQS (не важен, оставлен для SDK). DefaultSQSRegion = "us-east-1" - // DefaultMQTTHost — внутреннее имя EMQX-контейнера на платформе. - // Реальный UUID namespace EMQX задаётся в deck-UI (MQTT_HOST) при создании. - DefaultMQTTHost = "emqx" + // DefaultMQTTHost — пусто: вменяемого дефолта нет, EMQX живёт в ДРУГОМ + // namespace платформы и доступен только по FQDN + // containerk8s..svc.cluster.local. Поэтому MQTT_HOST обязателен + // (задаётся Terraform'ом из state EMQX), иначе config.Load вернёт ошибку. + DefaultMQTTHost = "" // DefaultMQTTPort — WebSocket-листенер EMQX (wss внутри платформы). DefaultMQTTPort = "8083"