rpi: запустить и проверить туннель вебхука Маруси

This commit is contained in:
2026-10-11 18:26:59 +03:00
parent 258367d22d
commit aece60da74
3 changed files with 23 additions and 1 deletions
+1
View File
@@ -154,6 +154,7 @@ Docker CE 29.9 + Compose v5.6 из репо download.docker.com (в Debian ст
- Индикатор работы добавлен 2026-10-11: [astra-bot `20a8ffc`](https://git.ruzzy.dev/ruzzy/astra-bot/commit/20a8ffc). Раньше typing отправлялся один раз и пропадал через несколько секунд; теперь при распознавании голосовых и выполнении задачи отдельное тихое сообщение с машинкой 🚗 редактируется каждые 4 с, typing обновляется. Один индикатор на чат, перекрывающиеся задачи учитываются; после окончания сообщение удаляется. Проверки: 46 тестов, включая перекрытие задач, редактирование/удаление и неудачную отправку. Резервная копия `/opt/astra-bot/bot.py.bak-20261011-waiting-car`; установка выполнена, перезапуск через `restart-check.py` после ответа.
## Разговорный навык Маруси (подготовлен 2026-10-11)
- Туннель Маруси запущен и проверен 2026-10-11 (ранее не был подключён): `astra-marusia-tunnel.service`, источник `stacks/astra-marusia/astra-marusia-tunnel.service`, автозапуск и Restart=always/10 с, SSH keepalive 30 с × 3. `~astra/.ssh/known_hosts_marusia` (600) содержит публичный ключ fr1, сверенный по отпечатку из документации; используется StrictHostKeyChecking. Вход `marusia-tunnel@fr1.ruzzy.dev:22`, reverse `127.0.0.1:18788` → rpi `127.0.0.1:8788`, отдельный ключ `marusia_tunnel`. Через `https://astra.ruzzy.dev/marusia/webhook/…` подтверждены 404 на неверный секрет и 403 на правильный секрет с посторонним skill/user; TLS проверяется штатно. Shell, другой reverse-порт 18789 и direct forwarding через этот SSH-ключ отклонены fr1. Навык/разрешённые user IDs ещё не настроены; колонка пока не подключена. Публичная часть fr1 подготовлена его агентом (infra e2bd908); ограниченный ключ не даёт читать ss/firewall/логи fr1, loopback bind там проверяет агент fr1.
- Ограничения Маруси усилены 2026-10-11 по решению владельца: только обычная беседа, действия подключать отдельно. [astra-bot `b39c9d5`](https://git.ruzzy.dev/ruzzy/astra-bot/commit/b39c9d5), проверки [ `52b07b8`](https://git.ruzzy.dev/ruzzy/astra-bot/commit/52b07b8). В `/etc/astra-marusia.env` добавлен пустой `MARUSIA_ALLOWED_USER_IDS`: до явного добавления проверенных идентификаторов Маруси все запросы запрещены; Telegram ID не подходит, первого неизвестного пользователя автоматически не принимать. Секрет URL и skill_id сохранены, но не доказывают происхождение от VK. Schema/Content-Type проверяются, тело до 16 KiB (было 64), вопрос до 1000 символов, TTS-разметка экранируется. Один запрос к модели одновременно (было два), 10 вопросов/мин и 60/час; приём POST ограничен 30/мин. ⚠️ Бюджеты в памяти и сбрасываются после рестарта. systemd: MemoryMax=512M, CPUQuota=100%, TasksMax=64; служба active и `/health`=200 после установки. 57 тестов прошли, в том числе отказ чужому/пустому списку до модели. Предыдущий сервер `/opt/astra-marusia/server.py.bak-before-limits`. Агент fr1 параллельно подготовил публичный vhost astra.ruzzy.dev и ограниченного пользователя туннеля (infra e2bd908); его изменения сохранены при rebase. Локальные ограничения действуют; дополнительное ужесточение nginx на fr1 до 16 KiB и 30 запросов/мин ещё не выполнено.
- Установлен и включён `astra-marusia.service`, код — [astra-bot `27e39ea`](https://git.ruzzy.dev/ruzzy/astra-bot/commit/27e39ea), `/opt/astra-marusia/server.py`; юнит и инструкция — `stacks/astra-marusia/`. Это отдельная беседа без инструментов управления сервером; семейные ответы для 10 лет. История до 16 реплик на user_id в памяти, очищается после перезапуска/суток простоя; тексты не пишутся в access log.
- Слушает только `127.0.0.1:8788`, `/health` проверен. Секрет пути webhook — `/etc/astra-marusia.env` (root 600), `MARUSIA_SKILL_ID` пока пуст: POST закрыты до регистрации навыка. Публичного HTTPS URL, туннеля и привязки колонки ещё нет. ⚠️ Это готовая локальная часть, не подключённая колонка.
+3 -1
View File
@@ -1,7 +1,7 @@
# Разговор с Астрой через Марусю
Код: `ruzzy/astra-bot`, `marusia/server.py`, тесты `test_marusia.py`.
Сервис на rpi слушает только `127.0.0.1:8788`; доступ через fr1 подготовлен; SSH-туннель на rpi ещё нужно запустить.
Сервис на rpi слушает только `127.0.0.1:8788`; доступ через fr1 подготовлен; SSH-туннель `astra-marusia-tunnel.service` на rpi включён и проверен 2026-10-11.
Webhook: `POST /webhook/<секрет из /etc/astra-marusia.env>`.
Проверка: `GET /health`.
@@ -59,3 +59,5 @@ skill_id не является криптографическим доказат
и приватный доступ навыка обеспечивают первичное ограничение доступа.
С 2026-10-11 обязателен `MARUSIA_ALLOWED_USER_IDS`: список точных идентификаторов пользователя Маруси из проверенного запроса отладчика VK. Пустой список закрывает доступ всем; автоматически первого пришедшего пользователя не добавлять. Это не Telegram ID. Schema: version 1.0, SimpleUtterance, ограниченные session_id/message_id, вопрос до 1000 символов, Content-Type application/json, без chunked transfer. TTS экранирует разметку. Только разговор, любые действия подключаются отдельно по решению владельца. systemd: MemoryMax 512M, CPUQuota 100%, TasksMax 64. На fr1 агент уже установил nginx 1 r/s с burst 5; дополнительное ужесточение до 30 r/m и тела 16 KiB рекомендовано, но ещё не установлено на fr1. Локальный сервис уже применяет 30 POST/мин и 16 KiB.
Проверка 2026-10-11 с rpi через публичный HTTPS: неверный секрет → 404; правильный секрет + посторонние skill/user → 403. SSH-ключ fr1 сверён с указанным отпечатком; туннель active с ExitOnForwardFailure. Тем же клиентским ключом попытки shell, другого reverse-порта (18789) и direct forwarding (`ssh -W`) отклонены сервером. До регистрации навыка и разрешённых пользователей разговор через колонку недоступен. Проверка не даёт административного доступа к fr1 для чтения его firewall/ss/logs; live loopback bind на fr1 проверяет его агент.
@@ -0,0 +1,19 @@
[Unit]
Description=Private reverse SSH tunnel for Marusia webhook
After=network-online.target astra-marusia.service
Wants=network-online.target
[Service]
User=astra
Group=astra
ExecStart=/usr/bin/ssh -NT -i /home/astra/.ssh/marusia_tunnel -o BatchMode=yes -o IdentitiesOnly=yes -o StrictHostKeyChecking=yes -o UserKnownHostsFile=/home/astra/.ssh/known_hosts_marusia -o ExitOnForwardFailure=yes -o ServerAliveInterval=30 -o ServerAliveCountMax=3 -o ConnectTimeout=10 -R 127.0.0.1:18788:127.0.0.1:8788 marusia-tunnel@fr1.ruzzy.dev
Restart=always
RestartSec=10
NoNewPrivileges=yes
ProtectSystem=strict
ProtectHome=read-only
PrivateTmp=yes
UMask=0077
[Install]
WantedBy=multi-user.target