chore(deploy): подготовить отдельный тестовый Docker-стенд

This commit is contained in:
Denozordec committed 2026-10-07 21:04:28 +07:00
1 parent 6255f44975
commit 4d88b97d49
6 files changed
+195 -5

No files matched your search

+119
View File
@@ -0,0 +1,119 @@
name: mmapp-test
services:
postgres:
image: ${POSTGRES_IMAGE_TAG:-postgres:18-alpine}
container_name: mmapp-test-postgres
restart: unless-stopped
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
shm_size: "256mb"
environment:
POSTGRES_USER: mmapp
POSTGRES_DB: mmapp
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?set POSTGRES_PASSWORD in .env}
POSTGRES_INITDB_ARGS: "--encoding=UTF8 --locale=C.UTF-8 --data-checksums"
TZ: UTC
PGTZ: UTC
command:
- postgres
- -c
- timezone=UTC
- -c
- listen_addresses=*
- -c
- max_connections=100
- -c
- shared_buffers=256MB
- -c
- work_mem=16MB
- -c
- maintenance_work_mem=128MB
- -c
- wal_compression=lz4
- -c
- default_toast_compression=lz4
- -c
- io_method=worker
- -c
- io_workers=3
- -c
- effective_io_concurrency=200
- -c
- max_wal_size=2GB
- -c
- checkpoint_timeout=15min
- -c
- checkpoint_completion_target=0.9
volumes:
# PostgreSQL 18+: VOLUME is /var/lib/postgresql (PGDATA = .../18/docker)
- mmapp-pgdata:/var/lib/postgresql
healthcheck:
test: ["CMD-SHELL", "pg_isready -U mmapp -d mmapp"]
interval: 5s
timeout: 5s
retries: 10
backend:
image: mmapp-test/backend:${MMAPP_IMAGE_TAG:?set MMAPP_IMAGE_TAG}
container_name: mmapp-test-backend
restart: unless-stopped
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
depends_on:
postgres:
condition: service_healthy
ports:
- "127.0.0.1:8000:8000"
# IPFIX: только на WG-адресе хоста после `wg-quick up wg-flow`, не 0.0.0.0
# - "10.255.254.1:4739:4739/udp"
environment:
CORS_ORIGIN: ${CORS_ORIGIN:-http://localhost:3000}
DATABASE_URL: postgres://mmapp:${POSTGRES_PASSWORD}@postgres:5432/mmapp
DATABASE_PATH: /app/data/mikrotik.db
AUTH_REQUIRED: ${AUTH_REQUIRED:-false}
AUTH_JWT_SECRET: ${AUTH_JWT_SECRET:?set AUTH_JWT_SECRET}
AUTH_ISSUER: ${AUTH_ISSUER:-https://auth.test.local}
AUTH_PORTAL_URL: ${AUTH_PORTAL_URL:-http://localhost:5175}
# IPFIX: внутри контейнера слушаем все интерфейсы; на хосте UDP 4739 публикуется только на WG-IP
FLOW_LISTEN_HOST: "0.0.0.0"
volumes:
- ./data:/app/data
healthcheck:
test:
[
"CMD",
"node",
"-e",
"fetch('http://127.0.0.1:8000/health').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))",
]
interval: 30s
timeout: 5s
retries: 3
start_period: 300s
frontend:
image: mmapp-test/frontend:${MMAPP_IMAGE_TAG:?set MMAPP_IMAGE_TAG}
container_name: mmapp-test-frontend
restart: unless-stopped
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
depends_on:
- backend
ports:
- "127.0.0.1:3000:3000"
environment:
BACKEND_INTERNAL_URL: http://backend:8000
volumes:
mmapp-pgdata:
+9
View File
@@ -0,0 +1,9 @@
# Save as /opt/mmapp-test/.env on the test server (mode 0600).
# Generate unique hex secrets on that server; never reuse production credentials.
POSTGRES_PASSWORD=
AUTH_JWT_SECRET=
MMAPP_IMAGE_TAG=ux-6255f44
AUTH_REQUIRED=false
AUTH_ISSUER=https://auth.test.local
AUTH_PORTAL_URL=http://localhost:5175
CORS_ORIGIN=http://localhost:3000
+2 -2
View File
@@ -1,12 +1,12 @@
# План реализации UX/UI по пятичасовым окнам
Актуальное продолжение 2026-10-07: блоки12.3.79–83 и общая локальная приёмка завершены. Main:1186/1186 на9680a64; context:221/221 на683148d с тем же runtime;44 чистых теста и HTTP/RBAC прошли. План и оба журнала согласованы, все записи этапа12 датированы. Следующий этап12.5 — внешняя приёмка по подготовленному протоколу; она не выполнена и требует отдельного стенда PostgreSQL/RouterOS/интеграций.
Актуальное продолжение 2026-10-07: 12.5.1 — сервер161.104.46.222 подготовлен: Docker29.8.2,Compose5.6.0,Buildx,4GiB swap,отдельный тестовый Compose и PostgreSQL18.6 healthy. Следующий12.5.2: сборка закреплённых frontend/backend образов и bootstrap/smoke. Реальные сценарии12.5 ещё не выполнены; предыдущие main1186/context221 и44 чистых теста сохранены.
Общий план проекта MikrotikManager. Основан на согласованном плане из задачи; точка продолжения обновлена 2026-10-07. Источник фактического прогресса, проверок и ограничений — [журнал реализации](ux-ui-progress.md). Этот документ задаёт объём и критерии завершения, журнал фиксирует результат.
## Актуальная точка продолжения — 2026-10-07
Этапы0–11 завершены в описанных локальных границах. Локальная часть этапа12 проверена до12.3.83: main12.4.10 —1186/1186 на9680a64, context12.4.11 —221/221 на683148d с тем же runtime. Дополнительно прошли44 чистых теста, HTTP/DI/RBAC speed API и сборки. Этап12 остаётся открытым: следующая внешняя12.5 требует отдельного стенда. Протокол и ограничения: [внешняя приёмка](ux-ui-external-acceptance.md); точные результаты: [подробный журнал этапа12](ux-ui-stage-12.md).
Этапы0–11 завершены в описанных локальных границах. Локальная часть этапа12 проверена до12.3.83: main12.4.10 —1186/1186 на9680a64, context12.4.11 —221/221 на683148d с тем же runtime. Дополнительно прошли44 чистых теста, HTTP/DI/RBAC speed API и сборки. Этап12 остаётся открытым: стенд12.5.1 подготовлен на161.104.46.222;следующий12.5.2 — сборка и bootstrap/smoke,затем внешние сценарии. Протокол и ограничения: [внешняя приёмка](ux-ui-external-acceptance.md); точные результаты: [подробный журнал этапа12](ux-ui-stage-12.md).
Реальные pg_dump/pg_restore, PG rollback и остановка UDP worker требуют внешней приёмки. Датированные продолжения ниже — история; точный следующий шаг также указан в начале [журнала](ux-ui-progress.md).
+10 -2
View File
@@ -1,6 +1,6 @@
# UX/UI: журнал реализации
Актуальное продолжение 2026-10-07: блоки12.3.79–83 и общая локальная приёмка завершены. Main:1186/1186 на9680a64; context:221/221 на683148d с тем же runtime;44 чистых теста и HTTP/RBAC прошли. План и оба журнала согласованы, все записи этапа12 датированы. Следующий этап12.5 — внешняя приёмка по подготовленному протоколу; она не выполнена и требует отдельного стенда PostgreSQL/RouterOS/интеграций.
Актуальное продолжение 2026-10-07: 12.5.1 — сервер161.104.46.222 подготовлен: Docker29.8.2,Compose5.6.0,Buildx,4GiB swap,отдельный тестовый Compose и PostgreSQL18.6 healthy. Следующий12.5.2: сборка закреплённых frontend/backend образов и bootstrap/smoke. Реальные сценарии12.5 ещё не выполнены; предыдущие main1186/context221 и44 чистых теста сохранены.
Общий план: [UX/UI по этапам и пятичасовым окнам](ux-ui-plan.md). План задаёт объём, этот журнал фиксирует выполненные блоки и ограничения. Записи расположены от новых к старым; подробная история этапа12 также сохранена в [ux-ui-stage-12.md](ux-ui-stage-12.md).
@@ -32,7 +32,15 @@
| 10 | Маршрутизация, диагностика, карта и терминал | Завершён в границах локальной приёмки 2026-10-01; блоки 10.1–10.71, внешние ограничения в 10.71 |
| 11А | Пользователи, контейнеры, сертификаты и резервные копии | Завершён в границах локальной приёмки 2026-10-01; 11А.1–11А.33, внешние ограничения в 11А.33 |
| 11Б | Оповещения, сбор данных, интеграции, релизы и настройки | Завершён в границах локальной приёмки 2026-10-03; ограничения и evidence в11Б.7 |
| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Локальная приёмка завершена в описанных границах:12.3.83,main1186/1186,context221/221. Этап остаётся в работе: внешняя12.5 не выполнена. |
| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Локальная приёмка завершена в описанных границах:12.3.83,main1186/1186,context221/221. Этап остаётся в работе: стенд12.5.1 подготовлен,bootstrap/сценарии12.5 не выполнены. |
## 12.5.1 — подготовка удалённого тестового Docker-стенда (2026-10-07)
По прямому поручению пользователя подготовлен временный сервер161.104.46.222,root,Debian13.7 trixie/x86_64. До установки Docker отсутствовал;1CPU/1973MiB RAM,23GiB свободно. Установлены Docker Engine29.8.2,Compose5.6.0,Buildx0.37.1 из официального apt repository,git/python3 и4GiB swap. Docker systemd enabled/active,hello-world passed. SSH и сетевые настройки подключения сохранены.
Создан /opt/mmapp-test (0700),Compose по main с отдельными именами/project/data,ограничением logs,loopback3000/8000 и фиксированными тегами. Пароль SSH не сохранён в репозитории; PG/JWT secrets сгенерированы на сервере в.env0600 без вывода. Compose config --quiet passed; SHA256 совпал с локальным шаблоном. Реальный PostgreSQL18.6 запущен,healthy и SELECT version() passed; порт БД не опубликован. [Паспорт и дальнейшие команды](ux-ui-test-server.md), [Compose](../deploy/docker-compose.test.yml), [env-шаблон](../deploy/env.test.example).
Это подготовка инфраструктуры, не приёмка PG-1/restore/native: backend/frontend ещё не собраны и не запущены, bootstrap не выполнен. Следующий12.5.2 — чистые CI build contexts,закреплённые образы без push,bootstrap/health и начало PG-протокола. Локально docker CLI отсутствует; серверный Docker готов. Публикация Gitea/CI не выполнялась; локальный коммит без push. Ресурсы стенда не представляют production performance.
## 12.4.11 — общая context регрессия после speed API/UI (2026-10-07)
+9 -1
View File
@@ -1,6 +1,6 @@
# Этап 12: итоговая приёмка UX/UI
Актуальное продолжение 2026-10-07: блоки12.3.79–83 и общая локальная приёмка завершены. Main:1186/1186 на9680a64; context:221/221 на683148d с тем же runtime;44 чистых теста и HTTP/RBAC прошли. План и оба журнала согласованы, все записи этапа12 датированы. Следующий этап12.5 — внешняя приёмка по подготовленному протоколу; она не выполнена и требует отдельного стенда PostgreSQL/RouterOS/интеграций.
Актуальное продолжение 2026-10-07: 12.5.1 — сервер161.104.46.222 подготовлен: Docker29.8.2,Compose5.6.0,Buildx,4GiB swap,отдельный тестовый Compose и PostgreSQL18.6 healthy. Следующий12.5.2: сборка закреплённых frontend/backend образов и bootstrap/smoke. Реальные сценарии12.5 ещё не выполнены; предыдущие main1186/context221 и44 чистых теста сохранены.
План: [ux-ui-plan.md](ux-ui-plan.md). Фактические результаты: [ux-ui-progress.md](ux-ui-progress.md). Подготовлен после сводных проверок 11Б; завершение каждого блока требует локального коммита без push.
@@ -952,3 +952,11 @@ Runtime HEAD9680a6422ba951a1737207663acbd6d562710b62:1186/1186passed,193files,0u
Main1186/1186 на9680a64 и эта context матрица теперь включают runtime блоков79–83. Дополнительно7 чистых producer DTO checks подтвердили ISO преобразование PostgreSQL timestamp с сохранением instant, nullable/zero и отказ от неверных записей. Вместе с предыдущими37 —44 чистых теста; HTTP/DI/RBAC speed command/catalog и contracts/backend/frontend builds passed. Реального подключения к PostgreSQL/RouterOS не было.
Следующий12.5: [подготовленный протокол внешней приёмки](ux-ui-external-acceptance.md). По имеющимся локальным мокам нельзя подтвердить реальные PG rollback/row locks/commit acknowledgement, RouterOS и внешние интеграции. Для этого нужен отдельный стенд. Этап12 остаётся открытым до внешней приёмки; локальные матрицы не являются заявлением о полной production готовности. Локальные коммиты без push; чужие изменения сохранены.
## 12.5.1 — подготовка удалённого тестового Docker-стенда (2026-10-07)
По прямому поручению пользователя подготовлен временный сервер161.104.46.222,root,Debian13.7 trixie/x86_64. До установки Docker отсутствовал;1CPU/1973MiB RAM,23GiB свободно. Установлены Docker Engine29.8.2,Compose5.6.0,Buildx0.37.1 из официального apt repository,git/python3 и4GiB swap. Docker systemd enabled/active,hello-world passed. SSH и сетевые настройки подключения сохранены.
Создан /opt/mmapp-test (0700),Compose по main с отдельными именами/project/data,ограничением logs,loopback3000/8000 и фиксированными тегами. Пароль SSH не сохранён в репозитории; PG/JWT secrets сгенерированы на сервере в.env0600 без вывода. Compose config --quiet passed; SHA256 совпал с локальным шаблоном. Реальный PostgreSQL18.6 запущен,healthy и SELECT version() passed; порт БД не опубликован. [Паспорт и дальнейшие команды](ux-ui-test-server.md), [Compose](../deploy/docker-compose.test.yml), [env-шаблон](../deploy/env.test.example).
Это подготовка инфраструктуры, не приёмка PG-1/restore/native: backend/frontend ещё не собраны и не запущены, bootstrap не выполнен. Следующий12.5.2 — чистые CI build contexts,закреплённые образы без push,bootstrap/health и начало PG-протокола. Локально docker CLI отсутствует; серверный Docker готов. Публикация Gitea/CI не выполнялась; локальный коммит без push. Ресурсы стенда не представляют production performance.
+46
View File
@@ -0,0 +1,46 @@
# Тестовый сервер UX/UI — 2026-10-07
Сервер161.104.46.222 предоставлен пользователем для временного тестирования с последующим удалением. Подготовка выполнена по структуре deploy/docker-compose.yml из main. Приложение ещё не собрано и не запущено.
| Параметр | Проверенное состояние |
| --- | --- |
| ОС / архитектура | Debian13 trixie13.7 / x86_64 |
| Ресурсы | 1CPU,1973MiB RAM,4GiB swap; исходно23GiB свободного диска |
| Docker Engine | 29.8.2;systemd enabled/active;hello-world passed |
| Compose / Buildx | v5.6.0 / v0.37.1 |
| Каталог | /opt/mmapp-test;0700 |
| Конфигурация | /opt/mmapp-test/compose.yaml;0600;docker compose config --quiet passed |
| Секреты | Сгенерированы только на сервере в /opt/mmapp-test/.env;0600;в Git не сохранены |
| PostgreSQL | postgres:18-alpine,18.6;mmapp-test-postgres healthy;SELECT version() passed |
| Данные | Отдельный Compose project mmapp-test,том mmapp-test_mmapp-pgdata и каталог ./data |
| Доступ | PostgreSQL не публикуется;frontend3000/backend8000 привязаны к127.0.0.1 после запуска |
| Образы приложения | mmapp-test/backend:ux-6255f44 и mmapp-test/frontend:ux-6255f44;ещё не созданы |
Compose SHA256:99900547ed18b62e2cdcf9aae3975cbd6c3598a699a79dc04a4b7a0fec295348. Локальный и удалённый файлы совпали. Шаблоны: [Compose](../deploy/docker-compose.test.yml), [env без секретов](../deploy/env.test.example).
## Развёртывание приложения
Следующий блок: подготовить чистые frontend/backend build contexts по .gitea/workflows/docker.yml для проверенного runtime и собрать закреплённые образы без push. Локально docker CLI сейчас отсутствует, на сервере доступен Docker. В корневом .dockerignore исключён backend, поэтому обычный backend build из корня не повторяет CI: использовать отдельный backend context, как main workflow. Не передавать .env.local,backend/.env,ключи и локальные node_modules/.next.
После сборки/загрузки образов выполнить на сервере:
~~~bash
cd /opt/mmapp-test
docker compose config --quiet
docker compose up -d --wait --wait-timeout 300 postgres backend frontend
docker compose ps
curl -fsS http://127.0.0.1:8000/health
curl -fsS http://127.0.0.1:3000/health
~~~
Для браузера на рабочем ПК открыть SSH-туннель в отдельном терминале:
~~~powershell
ssh -N -L 3000:127.0.0.1:3000 -L 8000:127.0.0.1:8000 root@161.104.46.222
~~~
После запуска frontend открыть http://localhost:3000. AUTH_REQUIRED=false допустим для этого доступа через loopback/SSH; при приёмке прав включить AUTH_REQUIRED и согласованный тестовый issuer/Portal, используя серверный JWT secret. Конфигурация фиксирует конкретный image tag; автообновление main:latest не используется.
## Границы результата
Это подготовка инфраструктуры12.5.1, не закрытие PostgreSQL PG-1: bootstrap/migrations ещё не выполнялись backend. Backup/restore,отказы транзакций,concurrency,workers,RouterOS,Telegram и остальные сценарии [12.5](ux-ui-external-acceptance.md) не выполнены. Для сети потребуются отдельные тестовые устройства/CHR; для интеграций — тестовые учётные записи. 1CPU/2GiB не представляют production performance.