test: verify production proxy form routing
This commit is contained in:
@@ -18,7 +18,7 @@ Web Docker-образ устанавливает зависимости чере
|
||||
|
||||
Идёт исправление аудита: актуальные изменения и ограничения перечислены в [AUDIT_FIXES.md](docs/AUDIT_FIXES.md). Production Compose включает community scheduler; страницы rules/privacy реализованы. Для запуска остаются сервер, DNS/TLS, секреты, внешний backup и контакты. Шкала 72 часов использует полную выборку по времени поступления; одинаковые поля разных источников больше не считаются доказательством одного события. Фоновая публикация обновляет кэш API в пределах TTL, не мгновенно.
|
||||
|
||||
Полный аудит 8 сентября: [отчёт](docs/PROJECT_AUDIT_2026-09-08.md), [приоритетный план](docs/ROADMAP.md#ближайший-рабочий-пакет). Перед production нужно исправить Caddy-маршруты формы, конфликт Basic/Bearer admin-аутентификации и исходящую сеть community scheduler. Затем — клиентский rate limit, надёжность парсеров, согласованность фильтров/оценок и HTTP/SEO-контракт ошибок.
|
||||
Полный аудит 8 сентября: [отчёт](docs/PROJECT_AUDIT_2026-09-08.md), [приоритетный план](docs/ROADMAP.md#ближайший-рабочий-пакет). T01 выполнен: Caddy-маршруты формы исправлены и проверены через временный proxy командой `sh deploy/test-proxy-routing.sh` на запущенном локальном Compose. Перед production остаются конфликт Basic/Bearer admin-аутентификации и исходящая сеть community scheduler. Затем — клиентский rate limit, надёжность парсеров, согласованность фильтров/оценок и HTTP/SEO-контракт ошибок.
|
||||
|
||||
На ширинах 320, 390, 768 и 1280 px ранее проверено отсутствие горизонтального переполнения основных страниц. Это не полная визуальная приёмка: аудит обнаружил неверную desktop-компоновку фильтров; наполненные карточки, длинные названия, клавиатура и zoom остаются отдельной задачей.
|
||||
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
#!/bin/sh
|
||||
# Verify the actual production Caddy routes against an already running local stack.
|
||||
# Invalid form submissions exercise Astro redirects without creating database rows.
|
||||
set -eu
|
||||
repo=$(CDPATH= cd -- "$(dirname "$0")/.." && pwd)
|
||||
cd "$repo"
|
||||
web_id=$(docker compose ps -q web)
|
||||
test -n "$web_id" || { echo "Start the local Compose stack first" >&2; exit 1; }
|
||||
network=$(docker inspect --format '{{range $name, $_ := .NetworkSettings.Networks}}{{$name}}{{println}}{{end}}' "$web_id")
|
||||
test "$(printf '%s\n' "$network" | wc -l)" -eq 1 || {
|
||||
echo "Routing test requires a local web container with exactly one network" >&2; exit 1;
|
||||
}
|
||||
container="rf4-proxy-routing-$$"
|
||||
cleanup() { docker stop "$container" >/dev/null 2>&1 || true; }
|
||||
trap cleanup EXIT INT TERM
|
||||
# Test-only Basic Auth hash from the Caddy documentation. No production secrets.
|
||||
docker run --rm -d --name "$container" --network "$network" \
|
||||
-p 127.0.0.1::8080 \
|
||||
-e SITE_DOMAIN=http://localhost:8080 \
|
||||
-e FILES_DOMAIN=http://localhost:8081 \
|
||||
-e ACME_EMAIL=routing-test@example.com \
|
||||
-e ADMIN_BASIC_USER=route-test \
|
||||
-e 'ADMIN_BASIC_PASSWORD_HASH=$2a$14$Zkx19XLiW6VYouLHR5NmfOFU0z2GTNmpkT/5qqR7hx4IjWJPDhjvG' \
|
||||
-v "$repo/deploy/Caddyfile:/etc/caddy/Caddyfile:ro" \
|
||||
caddy:2.10.2-alpine >/dev/null
|
||||
port=$(docker inspect --format '{{(index (index .NetworkSettings.Ports "8080/tcp") 0).HostPort}}' "$container")
|
||||
base="http://127.0.0.1:$port"
|
||||
attempt=0
|
||||
until curl -fsS --max-time 2 -H 'Host: localhost:8080' "$base/health" >/dev/null 2>&1; do
|
||||
attempt=$((attempt + 1))
|
||||
if [ "$attempt" -ge 20 ]; then docker logs "$container" >&2; exit 1; fi
|
||||
sleep 1
|
||||
done
|
||||
check_redirect() {
|
||||
headers=$(curl -sS --max-time 15 -D - -o /dev/null \
|
||||
-H 'Host: localhost:8080' -H 'Origin: http://localhost:8080' --data '' "$base$1")
|
||||
if ! printf '%s\n' "$headers" | grep -Eq '^HTTP/[0-9.]+ 303 ' ||
|
||||
! printf '%s\n' "$headers" | grep -Fi "location: $2" >/dev/null; then
|
||||
printf 'Unexpected response for %s:\n%s\n' "$1" "$headers" >&2
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
check_redirect /api/report '/report?state=create_error'
|
||||
check_redirect /api/report-screenshot '/report?state=screenshot_error&report_id='
|
||||
curl -fsS --max-time 15 -H 'Host: localhost:8080' "$base/api/v1/fishes?limit=1" >/dev/null
|
||||
curl -fsS --max-time 15 -H 'Host: localhost:8080' "$base/ready" >/dev/null
|
||||
echo "Proxy routing passed: Astro form redirects, FastAPI catalog and health/readiness"
|
||||
@@ -4,6 +4,8 @@
|
||||
|
||||
## Исправлено в рабочей версии
|
||||
|
||||
- [x] T01 полного аудита: маршруты `/api/report` и `/api/report-screenshot` достигают Astro через Caddy; FastAPI получает `/api/v1/*`, health/readiness. 9 сентября: `sh deploy/test-proxy-routing.sh` проходит на локальном стенде с корректным Origin; создание реальной заявки через production proxy остаётся частью T06.
|
||||
|
||||
- [x] Очередь внешних наблюдений фильтруется в SQL до limit/offset; UI показывает по 50 записей с навигацией, опубликованные записи не вытесняют ожидающие проверки.
|
||||
|
||||
- [x] Таймаут SSR-запроса к API: 8 секунд. Все пять страниц каталогов возвращают 503, Retry-After и no-store при сбое API; отсутствие сущности по-прежнему даёт 404.
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
# Аудит RF4 Spotter — 8 сентября 2026
|
||||
|
||||
Обновление 9 сентября: T01 исправлен (`bb61d21`) и проверен скриптом `deploy/test-proxy-routing.sh`. Ниже сохранены исходные находки аудита; актуальные отметки выполнения — в ROADMAP. T02/T03 остаются блокерами production.
|
||||
|
||||
База проверки: commit `486b4e9`. Аудит охватывает production-конфигурацию, API, импорт и публикацию данных, Astro, пользовательские сценарии, визуальную идентичность и SEO. Это отчёт о текущем состоянии, а не подтверждение готовности к запуску. Исправления приложения в этот пакет не входят.
|
||||
|
||||
## Вывод
|
||||
|
||||
+2
-2
@@ -180,11 +180,11 @@
|
||||
|
||||
## Ближайший рабочий пакет
|
||||
|
||||
Production-контур требует исправлений до запуска. Доказательства и критерии приёмки каждого ID находятся в [полном аудите](PROJECT_AUDIT_2026-09-08.md). Следующая задача — **T01**, затем T02 и T03. Инфраструктурные изменения можно объединить в один проверочный Compose-прогон.
|
||||
Production-контур требует исправлений до запуска. Доказательства и критерии приёмки каждого ID находятся в [полном аудите](PROJECT_AUDIT_2026-09-08.md). Следующая задача — **T02**, затем T03. Инфраструктурные изменения можно объединить в один проверочный Compose-прогон.
|
||||
|
||||
### P0 — блокеры production
|
||||
|
||||
- [ ] T01: исправить Caddy-маршруты формы и повторной загрузки скриншота.
|
||||
- [x] T01: Caddy направляет в FastAPI только `/api/v1/*`, `/health`, `/ready`, обработчики формы остаются в Astro (правка `bb61d21`). Проверено 9 сентября: `sh deploy/test-proxy-routing.sh`, оба POST дают ожидаемый 303, каталог и readiness доступны. Тест использует временный proxy и не создаёт уловов; успешная отправка с сохранением входит в T06.
|
||||
- [ ] T02: согласовать Basic/Bearer admin-аутентификацию через production proxy.
|
||||
- [ ] T03: обеспечить исходящую сеть community scheduler при изоляции БД/MinIO.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user