99 lines
6.3 KiB
Markdown
99 lines
6.3 KiB
Markdown
# TRUF worker: установка и работа
|
||
|
||
Worker получает задания от сервера, скачивает публичные targets и отправляет
|
||
только результат сканирования. Для каждого компьютера или Docker volume нужен
|
||
отдельный device token.
|
||
|
||
Сервер: `https://pregnant.horsecock.store`
|
||
|
||
## Что получить у администратора
|
||
|
||
1. Проверенный artifact для своей платформы и соседний файл с SHA-256.
|
||
2. Одноразово показанный device token. Не отправляйте его в чат, лог или снимок
|
||
экрана.
|
||
3. Подтверждение, что server-side User и Device включены и artifact зарегистрирован.
|
||
|
||
Администратор создаёт отдельные User и Device на странице `Workers / Dispatch`,
|
||
выдаёт token и назначает положительный assignment cap. Один token нельзя
|
||
использовать на нескольких устройствах.
|
||
|
||
## Приватный install YAML
|
||
|
||
Token не нужно передавать в аргументах процесса. Создайте локальный
|
||
`worker-install.yaml` в приватной папке через текстовый редактор:
|
||
|
||
```yaml
|
||
server: https://pregnant.horsecock.store
|
||
token: PASTE_DEVICE_TOKEN_HERE
|
||
parallelism: 1
|
||
```
|
||
|
||
`parallelism` задаёт число локальных занятых slots и должен быть от 1 до 128.
|
||
После `install` worker сохраняет настройки в своём приватном
|
||
`worker.config.json`; исходный YAML нужно удалить. При обычных `start`, `stop`,
|
||
`status`, `attach` и `watch` token больше не вводится.
|
||
|
||
## Шпаргалки
|
||
|
||
- [Windows](remote-worker-cheatsheet-windows-ru.md)
|
||
- [Linux без Docker](remote-worker-cheatsheet-linux-ru.md)
|
||
- [Docker Engine / Docker Desktop](remote-worker-cheatsheet-docker-ru.md)
|
||
|
||
Каждая шпаргалка начинается из корня распакованного artifact или Compose bundle
|
||
и содержит проверенные команды установки и lifecycle.
|
||
|
||
## Что делают lifecycle-команды
|
||
|
||
| Команда | Результат |
|
||
| --- | --- |
|
||
| `start` | Запускает установленный worker в фоне; повторный запуск не создаёт второй instance. |
|
||
| `stop --timeout 120` | Локально закрывает новые claims, завершает текущую работу и требует clean drain receipt. |
|
||
| `status` | Показывает instance, slots, текущие phases, deadlines и retained state. |
|
||
| `attach` | Подключает live status/event view; `q` или `Ctrl-C` только отсоединяет. |
|
||
| `watch --follow-seconds 300` | Запускает bounded live status view и затем отсоединяется. |
|
||
| `logs --follow --follow-seconds 300` | Показывает bounded live event/log stream. |
|
||
| `doctor --json` | Проверяет package, config, пути, native tools, TLS endpoint и singleton state. |
|
||
|
||
`stop` управляет только выбранным локальным worker. Менять server assignment cap
|
||
для обычного stop, restart или обновления не требуется. Не завершайте процесс и
|
||
не удаляйте state, пока clean drain receipt не подтверждён.
|
||
|
||
## Capacity и backpressure
|
||
|
||
- Один result bundle имеет hard limit 64 MiB.
|
||
- При выдаче remote assignment server резервирует baseline 2 MiB для bundle и
|
||
2 MiB для projection; это не новый hard limit.
|
||
- Валидный результат больше baseline атомарно расширяет reservation по фактическому
|
||
размеру. При временной нехватке capacity worker повторяет upload позже.
|
||
- Server допускает не более 50 unresolved remote assignments глобально и
|
||
одновременно применяет положительный per-user cap. Фактический предел равен
|
||
меньшему из доступной capacity, global limit и user cap.
|
||
- Client `parallelism` ограничивает только локальные slots и не повышает server cap.
|
||
|
||
## Частые состояния
|
||
|
||
- `idle` или `claiming`: slot свободен или запрашивает задание.
|
||
- `downloading`, `cloning`, `scanning`: выполняется задание.
|
||
- `uploading`, `awaiting_receipt`: результат отправляется или ждёт подтверждения.
|
||
- `backoff`: временная ошибка; причину и следующую попытку показывает `status`.
|
||
- `draining`: новые локальные claims закрыты, текущая работа завершается.
|
||
- `stopped`: clean shutdown завершён.
|
||
|
||
При проблеме сохраните вывод `doctor --json`, `status --json` и
|
||
`logs --tail 200`. Никогда не прикладывайте device token, install YAML или
|
||
приватный `worker.config.json`.
|
||
|
||
## Безопасное обновление
|
||
|
||
1. Выполните локальный `stop --timeout 120 --json` и получите `drained: true`,
|
||
`exit_code: 0`.
|
||
2. Сохраните предыдущий точный artifact/image и весь state/volume.
|
||
3. Проверьте SHA-256 и package identity новой версии.
|
||
4. Windows/Linux: распакуйте новую версию в отдельную папку. Docker: загрузите
|
||
новый image и пересоздайте только container с прежним volume.
|
||
5. Выполните `doctor`, `start`, `status` и bounded `watch`.
|
||
|
||
Не удаляйте локальные `state`, `work`, `bundles`, `events`, `history` или Docker
|
||
volume при ошибке и не используйте `docker compose down --volumes`. Они нужны
|
||
для безопасного продолжения и authoritative receipt recovery.
|