Files
truf-server/docs/remote-worker-quickstart-ru.md
T
2026-09-30 20:30:56 +03:00

99 lines
6.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.