From cf369736a09fbd33b38e312d287bad4a6ac4aa41 Mon Sep 17 00:00:00 2001 From: Repinoid Date: Sat, 10 Oct 2026 14:04:04 +0300 Subject: [PATCH] =?UTF-8?q?doc:=20QueueUrl=20=D0=B8=D1=81=D0=BF=D1=80?= =?UTF-8?q?=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=20(ExternalURLBase)=20+=20=D0=BE?= =?UTF-8?q?=D1=88=D0=B8=D0=B1=D0=BA=D0=B8=20=D0=BF=D0=BE=20=D0=BF=D1=83?= =?UTF-8?q?=D1=82=D0=B8;=20=D0=B4=D0=B5=D1=84=D0=B5=D0=BA=D1=82=20=D1=81?= =?UTF-8?q?=D0=BD=D1=8F=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HISTORY/2026-10-10-session-log.md | 18 ++++++++++----- .../vm-public-entrypoint-2026-10-10.md | 22 ++++++++++++++----- 2 files changed, 30 insertions(+), 10 deletions(-) diff --git a/HISTORY/2026-10-10-session-log.md b/HISTORY/2026-10-10-session-log.md index 80c9c55..e2d5219 100644 --- a/HISTORY/2026-10-10-session-log.md +++ b/HISTORY/2026-10-10-session-log.md @@ -81,6 +81,17 @@ (квинтет: `iot.kube5s.ru`→`iot.nubes.ru`, `qu.kube5s.ru`×3→`sqs.containerk8s.dev.nubes.ru`), коммит `a47743f`. В `doc/legacy/` (история) не трогал. +### 2.10. Фикс QueueUrl (кодинг) +- Проблема: `QueueUrl` = `http://region.host:port/...` (плейсхолдеры) — клиенты без `endpoint_url` сломаны. +- Реализовано: `Environment.ExternalURLBase` + env `SHARED_SQS_EXTERNAL_URL_BASE`. +- **Ошибка по пути №1:** env-override сначала поместил после `models.CurrentEnvironment = envs[env]` + — не сработал: `LoadYamlConfig` делает ранний `return` без `goaws.yaml`. Перенёс в + `applyEnvironmentDefaults` (вызывается через defer → всегда). +- **Ошибка по пути №2:** после переноса всё равно не работало — демо-seed (`app/cmd/seed.go`) собирал + URL **своей копией** логики, а не через `tenantQueueURL`. Вынес `gosqs.TenantQueueURL`, seed переведён на него. +- Коммиты `469132b`, `ca0372b`; тест `app/gosqs/tenant_helpers_test.go`. Проверено снаружи: + `list-queues` → `https://sqs.sinefo.ru/t-.../orders`. + ## 3. Грабли (для повторного использования) 1. **`proxy_set_header Host $host` теряет порт** → SigV4 `SignatureDoesNotMatch`. @@ -110,9 +121,7 @@ ### 5.1. Итоговое состояние - **Работает:** `https://sqs.sinefo.ru` (443, TLS) → shared-sqs на ВМ 213 (memory-only, `127.0.0.1:4100`). - SQS: `~/sqs-test/shared-sqs`, лог `~/sqs-test/sqs.log`, pid меняется. Демо-тенант + 5 очередей. -- **Дефект:** `QueueUrl` в ответах = `http://region.host:port//` — реального хоста нет - (следствие отсутствия `goaws.yaml`). Клиенты **с** `endpoint_url` не страдают (берут только путь), - клиенты **без** него — сломаны. См. открытый вопрос 6.1. +- **QueueUrl — ИСПРАВЛЕНО** (см. 2.10): `https://sqs.sinefo.ru//`. ### 5.2. Как поднять заново ```bash @@ -134,7 +143,6 @@ pkill -x shared-sqs ## 6. Открытые вопросы -1. `QueueUrl` — внешний хост (`https://sqs.sinefo.ru`): нужен ли фикс формата (схема/host/порт) - и есть ли клиенты без явного `endpoint_url` (вопрос №5 мануала). +1. Клиенты без явного `endpoint_url` — есть ли такие (вопрос №5 мануала). `QueueUrl` уже корректный. 2. Egress ВМ: `curl https://api.ipify.org` с ВМ вернул пусто — влияет на billing (PG) и JWT-API. 3. Дальше по мануалу: Шаг 2 (разбиение data-plane/control-plane), Шаг 3 (вынос состояния). diff --git a/doc/thinking/vm-public-entrypoint-2026-10-10.md b/doc/thinking/vm-public-entrypoint-2026-10-10.md index a1da69c..e4ce7be 100644 --- a/doc/thinking/vm-public-entrypoint-2026-10-10.md +++ b/doc/thinking/vm-public-entrypoint-2026-10-10.md @@ -87,9 +87,21 @@ grep "seed: создан тенант" ~/sqs-test/sqs.log | tail -1 curl -sS https://sqs.sinefo.ru/health ``` -## 7. Известный дефект +## 7. QueueUrl — ИСПРАВЛЕНО (2026-10-10) -`QueueUrl` в ответах = `http://region.host:port//` (плейсхолдеры — нет `goaws.yaml`). -Причина: `app/gosqs/tenant_helpers.go:29-37` (схема `http://`, формат `{region}.{host}:{port}`; -Host/Port/Region только из `app/conf/goaws.yaml`, env-переменных нет). Клиенты с `endpoint_url` -не страдают (используют путь), клиенты без него — сломаны. +**Было:** `QueueUrl` = `http://region.host:port//` (плейсхолдеры — на ВМ нет `goaws.yaml`). + +**Стало:** база URL задаётся через `ExternalURLBase` (config `goaws.yaml` **или** env +`SHARED_SQS_EXTERNAL_URL_BASE`). На ВМ запускается с `SHARED_SQS_EXTERNAL_URL_BASE=https://sqs.sinefo.ru` → +`QueueUrl` = `https://sqs.sinefo.ru//` (проверено снаружи). + +Изменения (коммиты `469132b`, `ca0372b`): +- `app/models/configuration.go` — поле `Environment.ExternalURLBase`; +- `app/gosqs/tenant_helpers.go` — `tenantQueueURL` учитывает `ExternalURLBase`; добавлена + экспортированная `TenantQueueURL`; +- `app/conf/config.go` — env-override `SHARED_SQS_EXTERNAL_URL_BASE` в `applyEnvironmentDefaults` + (срабатывает и при отсутствии `goaws.yaml` — важная тонкость: `LoadYamlConfig` делает ранний + `return` без конфига, поэтому override там не срабатывал); +- `app/cmd/seed.go` — демо-очереди формируют URL через `gosqs.TenantQueueURL` (убрано + дублирование логики — оно и было причиной, что фикс «не применялся»); +- тест `app/gosqs/tenant_helpers_test.go`.