test: verify clean production bootstrap
This commit is contained in:
+8
-1
@@ -32,6 +32,14 @@ curl -fsS https://rf4spotter.ru/health
|
||||
curl -fsS https://rf4spotter.ru/ready
|
||||
```
|
||||
|
||||
До запуска на сервере можно воспроизвести полный production bootstrap на пустых изолированных volumes. Скрипт собирает образы, применяет миграции, проверяет отсутствие демо-уловов, readiness и отправку заявки:
|
||||
|
||||
```bash
|
||||
./deploy/test-production-bootstrap.sh
|
||||
```
|
||||
|
||||
По умолчанию временно используются только loopback-порты `14321` и `18000`; PostgreSQL и MinIO наружу не публикуются. Контур и volumes удаляются после проверки. Drill успешно пройден 6 сентября 2026 года.
|
||||
|
||||
API-контейнер перед стартом применяет Alembic-миграции и запускает идемпотентный seed. В production он добавляет только минимальные справочники и точки; демонстрационные уловы жёстко отключены настройкой `SEED_DEMO_DATA=false`.
|
||||
|
||||
Проверка TLS и маршрутизации:
|
||||
@@ -90,7 +98,6 @@ Drill успешно пройден 6 сентября 2026 года. На це
|
||||
|
||||
## 7. Что ещё блокирует приглашение альфа-пользователей
|
||||
|
||||
- проверка полного bootstrap на пустых volumes;
|
||||
- политика хранения и удаления пользовательских данных;
|
||||
- базовый мониторинг `/ready`, диска и срока TLS-сертификата.
|
||||
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
services:
|
||||
api:
|
||||
ports:
|
||||
- "127.0.0.1:${BOOTSTRAP_API_PORT:-18000}:8000"
|
||||
web:
|
||||
networks: [backend, edge]
|
||||
ports:
|
||||
- "127.0.0.1:${BOOTSTRAP_WEB_PORT:-14321}:4321"
|
||||
Executable
+32
@@ -0,0 +1,32 @@
|
||||
#!/bin/sh
|
||||
set -eu
|
||||
|
||||
repo=$(CDPATH= cd -- "$(dirname "$0")/.." && pwd)
|
||||
cd "$repo"
|
||||
project="rf4-bootstrap-$$"
|
||||
export COMPOSE_PROJECT_NAME="$project"
|
||||
export BOOTSTRAP_API_PORT=${BOOTSTRAP_API_PORT:-18000}
|
||||
export BOOTSTRAP_WEB_PORT=${BOOTSTRAP_WEB_PORT:-14321}
|
||||
export POSTGRES_PASSWORD=bootstrap-postgres-password
|
||||
export DATABASE_URL=postgresql+psycopg://rf4:bootstrap-postgres-password@db:5432/rf4_spotter
|
||||
compose="docker compose --env-file .env.production.example -f compose.production.yaml -f deploy/compose.bootstrap.yaml"
|
||||
|
||||
cleanup() {
|
||||
status=$?
|
||||
if [ "$status" -ne 0 ]; then
|
||||
$compose ps >&2 || true
|
||||
$compose logs --no-color api web db minio >&2 || true
|
||||
fi
|
||||
$compose down --volumes --remove-orphans >/dev/null 2>&1 || true
|
||||
}
|
||||
trap cleanup EXIT INT TERM
|
||||
|
||||
$compose up --build -d --wait db minio api web
|
||||
curl -fsS "http://127.0.0.1:$BOOTSTRAP_API_PORT/ready" >/dev/null
|
||||
curl -fsS "http://127.0.0.1:$BOOTSTRAP_WEB_PORT/" >/dev/null
|
||||
test "$($compose exec -T db psql -At -U rf4 -d rf4_spotter -c 'select version_num from alembic_version')" = "0010"
|
||||
test "$($compose exec -T db psql -At -U rf4 -d rf4_spotter -c 'select count(*) from fish')" = "2"
|
||||
test "$($compose exec -T db psql -At -U rf4 -d rf4_spotter -c 'select count(*) from waterbody')" = "2"
|
||||
test "$($compose exec -T db psql -At -U rf4 -d rf4_spotter -c 'select count(*) from catch_report')" = "0"
|
||||
WEB_URL="http://127.0.0.1:$BOOTSTRAP_WEB_PORT" BOOTSTRAP_API_URL="http://127.0.0.1:$BOOTSTRAP_API_PORT" BOOTSTRAP_ADMIN_TOKEN=replace-with-at-least-32-random-characters npm --prefix apps/web run test:bootstrap
|
||||
echo "Production bootstrap passed from empty volumes"
|
||||
Reference in New Issue
Block a user