92 lines
No EOL
5.2 KiB
Markdown
92 lines
No EOL
5.2 KiB
Markdown
# Хардас для клиента студии — инсталлятор (hardass deploy playbook)
|
||
|
||
Источник: задача t-261002072440-c482ca (голосовое Alex, m-516173358):
|
||
«поставить хардас клиентам студии, которые уже сталкиваются с проблемами и
|
||
ждут его; агент сам собирает их потребности и постепенно реализует; Alex
|
||
дёргать в процессе поменьше».
|
||
|
||
Реплицируется наша собственная живая установка (`/root/simbiot-harness`,
|
||
проверено на этом хосте 2026-10-02): тот же код, те же юниты, тот же ритм.
|
||
|
||
## Что ставится
|
||
|
||
| Компонент | Юнит | Что делает |
|
||
|---|---|---|
|
||
| scheduler | `simbiot-harness.service` | лестница тактов sec/min/hour/day, задачи, дайджесты |
|
||
| TG-инбокс | `simbiot-harness-tg.service` | голосовые/сообщения клиента → харнес, ответы, идемпотентная доставка |
|
||
| портал-канал | `SIMBIOT_PORTAL_CHAT=1` + `harness/portal_channel.py` | чат клиент ↔ харнес через портал кооператива |
|
||
| аудито-ключ | `<root>/.audit/ed25519.key` 0600 | подпись событий и команд (крипто-цепочка) |
|
||
|
||
## Шаги (у каждого клиента, отдельный root/venv)
|
||
|
||
1. **Код**: скопировать репозиторий `simbiot-harness/` (rsync/git) на
|
||
машину клиента; создать venv: `python3 -m venv venv &&
|
||
venv/bin/pip install -q -r requirements.txt` (или установить deps по
|
||
импортам: flask, cryptography, requests).
|
||
2. **Секреты**: в `<root>/.env`:
|
||
- `SIMBIOT_TG_TOKEN` — токен **личного** TG-бота клиента (БотФазер,
|
||
у каждого свой — не наш);
|
||
- `SIMBIOT_TG_ALLOWED` — TG-ID владельца клиента (его чат, не наш);
|
||
- `ROUTER_KEY`, `ROUTER_BASE_URL` — доступ к 9router (или свои ключи
|
||
модели, если хочет свой биллинг);
|
||
- `SIMBIOT_PORTAL_CHAT=1` + `SIMBIOT_AGENT_NAME=<имя агента на портале>`.
|
||
3. **Бот клиента в TG чат**: клиент нажимает «подключить» на портале,
|
||
вставляет токен бота — портал хранит его в `agents.tg_bot_token`
|
||
(порядок такой же, как у агентов портала, e-«portal channel»).
|
||
4. **Юниты systemd**: положить оба unit-файла (шаблоны ниже), ExecStart
|
||
с путями клиента, `systemctl daemon-reload && enable --now` обоих.
|
||
5. **Инициализация**: `./venv/bin/python cli.py init` → создаёт ES-стор.
|
||
6. **Аудит-ключ**: `./venv/bin/python cli.py audit-key` → отпечаток
|
||
публичного ключа клиента — записать в реестр установок
|
||
(`docs/hardass/INSTALLS.md`), это его `key_id` для сверки «что сделал
|
||
харнес».
|
||
7. **Проверка**: `./venv/bin/python cli.py verify` → OK; `cli status`;
|
||
отправить боту «ping» — ответ приходит в его чат сам.
|
||
8. **Онбординг потребностей**: запустить `scripts/needs_survey.py survey`
|
||
(см. SURVEY.md) — опросник уходит клиенту в его чат, ответы копятся в
|
||
`docs/hardass/needs/`.
|
||
|
||
## Шаблоны юнитов
|
||
|
||
```ini
|
||
# /etc/systemd/system/simbiot-harness.service
|
||
[Unit]
|
||
Description=Simbiot Harness (client)
|
||
After=network-online.target
|
||
[Service]
|
||
Type=simple
|
||
WorkingDirectory=/root/simbiot-harness
|
||
ExecStart=/root/simbiot-harness/venv/bin/python -m harness.scheduler
|
||
Restart=always
|
||
RestartSec=5
|
||
Environment=PYTHONUNBUFFERED=1
|
||
[Install]
|
||
WantedBy=multi-user.target
|
||
|
||
# /etc/systemd/system/simbiot-harness-tg.service
|
||
[Unit]
|
||
Description=Simbiot Harness TG inbox (client)
|
||
After=network-online.target simbiot-harness.service
|
||
[Service]
|
||
Type=simple
|
||
WorkingDirectory=/root/simbiot-harness
|
||
ExecStart=/root/simbiot-harness/venv/bin/python -m harness.tg_inbox
|
||
Restart=always
|
||
RestartSec=5
|
||
Environment=PYTHONUNBUFFERED=1
|
||
[Install]
|
||
WantedBy=multi-user.target
|
||
```
|
||
|
||
## Смоук-проверка инсталлятора (сделано 2026-10-02)
|
||
|
||
Бута свежей копии на этом хосте с разделёнными `SIMBIOT_DB` и
|
||
`SIMBIOT_AUDIT_KEY_DIR`: init → verify OK (подписи и цепочка валидны,
|
||
ключ клиента отличается от нашего — своя крипто-граница). Параллельный
|
||
рестарт двух демонов безопасен (init_db идемпотентен, race закрыт
|
||
t-261002072440).
|
||
|
||
## Реестр установок — docs/hardass/INSTALLS.md
|
||
|
||
Каждая установка: клиент, машина, дата, key_id (audit-key), TG-бот,
|
||
статус, потребности (ссылка на needs/<client>). |