diff --git a/docs/FULL_DEPLOYMENT_MANUAL_RU.md b/docs/FULL_DEPLOYMENT_MANUAL_RU.md index c76be30..b88c12a 100755 --- a/docs/FULL_DEPLOYMENT_MANUAL_RU.md +++ b/docs/FULL_DEPLOYMENT_MANUAL_RU.md @@ -1,422 +1,667 @@ -# Полная инструкция по развёртыванию и поддержке ActivityWatch-Russian +Полная инструкция по развёртыванию и поддержке AWatch-rus -Документ описывает полный цикл: Proxmox/LXC сервер, установка ActivityWatch Server, RU Web UI patch, развёртывание Windows-клиентов в другом AD-домене, валидация, сопровождение и rollback. +Статус документа ---- +Этот документ описывает актуальный **Rust-fiWindows/PowerShell deployment flow больше не считается основным способом развёртывания, патчинга или эксплуатации. Если в репозитории остаются старые ".ps1"-файлы, они рассматриваются как legacy/history или как будущий provider-слой, но не как production runtime. -## 0) Структура проекта (полные пути) +0. Назначение -- `/private-config/deploy.env` -- `/proxmox/create-ct.sh` -- `/proxmox/push-aw-artifacts.sh` -- `/aw-server/install_aw_server.sh` -- `/aw-server/apply_webui_ru_patch.sh` -- `/windows/deploy-single-user.ps1` -- `/windows/deploy-domain-users.ps1` -- `/windows/deploy-ensemble.ps1` -- `/windows/hardening-recovery.ps1` -- `/windows/validate-deployment.ps1` -- `/windows/browser-domains-native-collector.ps1` -- `/windows/dlp-endpoint-signals-collector.ps1` -- `/ansible/deploy_aw_server.yml` -- `/ansible/provision_proxmox_ct_and_deploy_aw.yml` -- `/ansible/provision_proxmox_ct_matrix_and_deploy_aw.yml` -- `/ansible/deploy_aw_windows.yml` +AWatch-rus — программный комплекс операционного контроля, технического аудита, оценки трудоотдачи сотрудников и мониторинга корпоративной ИТ-инфраструктуры на базе: ---- +- Rust backend/runtime; +- Rust Agent; +- Rust server-rendered HTML + HTMX-compatible JSON API; +- Grafana/Prometheus-витрин; +- модулей Workforce, Security и Forensics; +- evidence/reporting tooling; +- ActivityWatch-compatible источников данных, где это применимо. -## 1) Подготовка +Проект не позиционируется как сертифицированная DLP/SIEM/EDR/XDR/СЗИ. DLP, evidence, UEBA и расследовательские функции используются как внутренние аналитические и операционные модули. -### 1.1 Требования +1. Актуальная архитектура -- Proxmox VE 8/9, доступ root (или sudo с правами на `pct`). -- Шаблон Debian 12 LXC на хосте Proxmox. -- Windows хост(ы) с PowerShell 5.1+ и правами локального администратора. -- Сетевой доступ Windows-клиентов до ActivityWatch Server (`5600/tcp`). +1.1 Основной runtime -### 1.2 Подготовка единого файла секретов +Основной production runtime AWatch-rus — Rust-first: -Скопируйте шаблон: +- backend/runtime — Rust; +- agent — Rust; +- portal — Rust server-rendered HTML + HTMX-compatible JSON API; +- operational status/check — Rust; +- DLP server-side helpers — Rust; +- worktime helpers/exporters/prewarm — Rust; +- SLO/health/readiness helpers — Rust; +- evidence/install-kit tooling — Rust; +- auto-heal helpers — Rust, только в безопасном режиме. -```bash -cp /private-config/deploy.env.example \ - /private-config/deploy.env -``` +1.2 Что не является основным runtime -Заполните в файле `/private-config/deploy.env`: +Не считать основным production deployment flow: -- все `CT_*` параметры контейнера; -- все `AW_SERVER_*` параметры сервера; -- `CT_PASSWORD` (реальный пароль). +- PowerShell deployment; +- старые Windows ".ps1" rollout scripts; +- ручное исправление production-файлов без release/backup; +- прямое редактирование Web UI в "/opt" без воспроизводимого патча; +- Python/shell как основной operational runtime, если для компонента уже есть Rust-аналог. -Важно: этот файл подхватывается автоматически скриптами Proxmox. +Python, shell, Ansible или PowerShell могут оставаться в проекте только как: ---- +- legacy compatibility; +- вспомогательные dev/test tools; +- миграционные сценарии; +- будущие provider-слои; +- Telegram/OCR/AI/ETL/MCP helpers, если они явно не входят в Rust-first core. -## 2) Развёртывание сервера в Proxmox +2. Типовые роли узлов -### 2.0 Ansible full-stack (создание CT + установка AW) +2.1 Server node -Подготовьте: +Серверный узел содержит: -- `/ansible/inventory.ini` -- `/ansible/group_vars/all.yml` -- `/ansible/group_vars/proxmox.yml` +- AWatch-rus backend/runtime; +- portal; +- API; +- exporters; +- health/readiness/status tooling; +- systemd units/timers; +- Grafana/Prometheus integration; +- evidence/reporting storage. -Запуск: +2.2 Agent node -```bash -cd /ansible -ansible-playbook -i inventory.ini provision_proxmox_ct_and_deploy_aw.yml -``` +Agent node содержит: -Этот сценарий полностью закрывает: +- Rust Agent; +- локальную конфигурацию агента; +- systemd service или другой штатный supervisor; +- локальные логи; +- буфер/очередь, если предусмотрено конфигурацией; +- сетевой доступ до backend/API. -- создание CT в Proxmox; -- bootstrap пакетов в CT; -- установку ActivityWatch Server; -- применение RU Web UI patch; -- проверку API. +2.3 Monitoring node -Для массового режима (несколько CT): +Monitoring node может содержать: -```bash -cd /ansible -ansible-playbook -i inventory.ini provision_proxmox_ct_matrix_and_deploy_aw.yml -``` +- Prometheus; +- Grafana; +- dashboards; +- alerting rules; +- external logs/metrics storage. -### 2.1 Создать LXC контейнер +Monitoring node может совпадать с server node в пилотной установке. -На узле Proxmox: +3. Требования -```bash -cd -/proxmox/create-ct.sh -``` +3.1 Базовые требования -По умолчанию читается: +- Linux-сервер или LXC/VM. +- Доступ администратора к systemd. +- Rust toolchain для сборочного узла. +- Сетевой доступ между agent node и server node. +- Закрытый доступ к API и порталу через VPN, reverse proxy или внутренний контур. +- Backup/snapshot перед любым production patch. -- `/private-config/deploy.env` +3.2 Рекомендуемый production-подход -При необходимости можно передать другой путь: +Для production не собирать проект прямо на боевом сервере, если есть отдельный build host. -```bash -/proxmox/create-ct.sh /absolute/path/to/deploy.env -``` +Рекомендуемый поток: -### 2.2 Загрузить bootstrap-артефакты и env внутрь CT +git checkout нужного commit/tag +→ cargo fmt / clippy / test / build +→ упаковка release artifacts +→ перенос artifacts на сервер +→ backup/snapshot +→ остановка/перезапуск нужных services +→ smoke tests +→ фиксация версии -```bash -cd -/proxmox/push-aw-artifacts.sh -``` +4. Основные пути -Скрипт загружает в CT: +Рекомендуемая структура на сервере: -- `/install_aw_server.sh` -- `/apply_webui_ru_patch.sh` -- `/activitywatch-server.service` -- `/aw-ru-patch.js` -- `/aw-sw-cleanup.js` -- `/etc/activitywatch/aw-server.env` (из `AW_SERVER_*`) +/opt/awatch-rus/ + bin/ + etc/ + portal/ + releases/ + evidence/ + reports/ + logs/ -### 2.3 Установить ActivityWatch Server внутри CT +/etc/awatch-rus/ + awatch-rus.env + agent.env + portal.env -```bash -pct enter -bash /install_aw_server.sh -``` +/var/lib/awatch-rus/ + data/ + state/ + cache/ + evidence/ + reports/ -### 2.4 Применить RU patch Web UI +/var/log/awatch-rus/ + backend.log + agent.log + portal.log + exporter.log -```bash -bash /apply_webui_ru_patch.sh -systemctl restart activitywatch-server.service -``` +Рекомендуемые runtime binaries: -После применения патча доступны: +/usr/local/bin/detmir-status +/usr/local/bin/detmir-check +/usr/local/bin/detmir-dlp +/usr/local/bin/detmir-auto +/usr/local/bin/detmir-heal-safe +/usr/local/bin/aw-rus-healthd -- верхнее меню `DLP` в Web UI; -- DLP-страница bucket `aw-dlp-endpoint-signals_`; -- встроенный центр `DLP review и правила`; -- служебные buckets `aw-dlp-review_` и `aw-dlp-rules_`. +Имена конкретных бинарников должны соответствовать текущему "Cargo.toml" и фактически собранным artifacts. Если имя binary изменено, документация и systemd unit должны обновляться в том же commit. -### 2.5 Проверка сервера +5. Конфигурация -В CT: +5.1 Общие правила -```bash -systemctl status activitywatch-server.service --no-pager -curl -fsS http://127.0.0.1:5600/api/0/info -ss -ltnp | grep 5600 -grep -n 'aw-ru-patch\|aw-sw-cleanup' /opt/activitywatch/webui-ru/index.html -``` +- Не хранить production secrets в публичном репозитории. +- Не коммитить реальные hostnames, IP, логины, ФИО, токены, пароли. +- Для production использовать "/etc/awatch-rus/*.env". +- Для demo использовать только обезличенные fixtures. +- Все параметры, влияющие на runtime, должны быть описаны в документации. -Ожидается: +5.2 Пример server env -- сервис `active (running)`; -- API отвечает JSON; -- порт 5600 слушается; -- в `index.html` присутствуют оба скрипта. +AWATCH_ENV=production +AWATCH_BIND_ADDR=127.0.0.1 +AWATCH_PORT=5600 +AWATCH_DATA_DIR=/var/lib/awatch-rus/data +AWATCH_LOG_DIR=/var/log/awatch-rus +AWATCH_EVIDENCE_DIR=/var/lib/awatch-rus/evidence +AWATCH_REPORTS_DIR=/var/lib/awatch-rus/reports +RUST_LOG=info -Дополнительно после первого входа в Web UI: +5.3 Пример agent env -- `#/home` должен показывать один корректный пункт `DLP`; -- `#/buckets/aw-dlp-endpoint-signals_` должен открываться без ошибок; -- сохранение review/rule должно создавать buckets `aw-dlp-review_` и `aw-dlp-rules_`. +AWATCH_AGENT_ENV=production +AWATCH_SERVER_URL=https://awatch.example.local +AWATCH_AGENT_HOST_ID=HOSTNAME_OR_NODE_ID +AWATCH_AGENT_DATA_DIR=/var/lib/awatch-rus/agent +AWATCH_AGENT_LOG_DIR=/var/log/awatch-rus +RUST_LOG=info ---- +6. Сборка -## 3) Развёртывание Windows-клиентов (другой AD-домен) +6.1 Проверки перед сборкой -### 3.1 Подготовка на Windows-хосте +На build host: -Скопируйте каталог: +cd /path/to/AWatch-rus -- `/windows` +git status --short +cargo fmt --all -- --check +cargo clippy --workspace --all-targets -- -D warnings +cargo test --workspace -например в: +Если в репозитории есть проектные quality gates, выполнить их обязательно: -- `C:\Program Files\AWatch-rus\windows` +bash scripts/check_private_config_guard.sh +bash scripts/quality-gate.sh -Откройте **elevated PowerShell**: +Если какой-то скрипт отсутствует в текущей ветке, не создавать фиктивную замену. Зафиксировать это в release notes. -```powershell -Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process -``` +6.2 Release build -### 3.2 Массовое доменное развёртывание (рекомендуется) +cargo build --release --workspace -Если текущий production ещё работает в старых каталогах -`C:\Program Files\ActivityWatch-Phase2` и `C:\ProgramData\ActivityWatch-Phase2`, -сначала выполните безопасную миграцию: +Проверить artifacts: -```powershell -C:\Program Files\AWatch-rus\windows\migrate-awatch-rus-paths.ps1 -WhatIf -C:\Program Files\AWatch-rus\windows\migrate-awatch-rus-paths.ps1 -``` +find target/release -maxdepth 1 -type f -executable -print -Скрипт остановит `ActivityWatch Recovery`/`ActivityWatch Launch *`, создаст backup в -`C:\ProgramData\AWatch-rus\migration-backups\...`, перенесёт файлы в единые пути, -пересоздаст `deployment-config.json`/scheduled tasks и запустит validation. +6.3 Упаковка artifacts -Пример со списком пользователей: +Рекомендуемый вариант: -```powershell -C:\Program Files\AWatch-rus\windows\deploy-domain-users.ps1 ` - -ServerHost aw.example.local ` - -ServerPort 5600 ` - -Domain CONTOSO ` - -UserListPath C:\Deploy\aw-users.txt ` - -CustomRulesPath C:\Program Files\AWatch-rus\windows\web-category-rules.example.json -``` +mkdir -p dist/awatch-rus-release/bin +cp target/release/detmir-status dist/awatch-rus-release/bin/ 2>/dev/null || true +cp target/release/detmir-check dist/awatch-rus-release/bin/ 2>/dev/null || true +cp target/release/detmir-dlp dist/awatch-rus-release/bin/ 2>/dev/null || true +cp target/release/detmir-auto dist/awatch-rus-release/bin/ 2>/dev/null || true +cp target/release/detmir-heal-safe dist/awatch-rus-release/bin/ 2>/dev/null || true +cp target/release/aw-rus-healthd dist/awatch-rus-release/bin/ 2>/dev/null || true -Поддерживаемые варианты: +tar -C dist -czf awatch-rus-release.tar.gz awatch-rus-release +sha256sum awatch-rus-release.tar.gz > awatch-rus-release.tar.gz.sha256 -- `-Users user01,user02` -- `-Users 'CONTOSO\user01','CONTOSO\user02'` -- `-UserListPath ` +Не использовать "cp ... || true" в CI без последующей проверки обязательных binaries. Для ручного production release список обязательных binaries должен быть проверен явно. -### 3.2.1 Ensemble orchestration (рекомендуется для production) +7. Первичное развёртывание server node -```powershell -C:\Program Files\AWatch-rus\windows\deploy-ensemble.ps1 ` - -ServerHost aw.example.local ` - -ServerPort 5600 ` - -Domain CONTOSO ` - -Users user1,user2,user3,user4,user5 ` - -ValidateAfterDeploy -``` +7.1 Создание каталогов -Отчёт сохраняется в: +sudo mkdir -p /opt/awatch-rus/bin +sudo mkdir -p /opt/awatch-rus/releases +sudo mkdir -p /etc/awatch-rus +sudo mkdir -p /var/lib/awatch-rus/data +sudo mkdir -p /var/lib/awatch-rus/state +sudo mkdir -p /var/lib/awatch-rus/evidence +sudo mkdir -p /var/lib/awatch-rus/reports +sudo mkdir -p /var/log/awatch-rus -- `C:\ProgramData\AWatch-rus\ensemble-report-YYYYMMDD-HHMMSS.json` +7.2 Установка binaries -### 3.3 Single-user развёртывание +sudo install -m 0755 dist/awatch-rus-release/bin/* /opt/awatch-rus/bin/ -```powershell -C:\Program Files\AWatch-rus\windows\deploy-single-user.ps1 ` - -ServerHost aw.example.local ` - -ServerPort 5600 ` - -TargetUser 'CONTOSO\user01' ` - -CustomRulesPath C:\Program Files\AWatch-rus\windows\web-category-rules.example.json -``` +Создать symlink для удобства: -### 3.4 Recovery / hardening +sudo ln -sf /opt/awatch-rus/bin/detmir-status /usr/local/bin/detmir-status +sudo ln -sf /opt/awatch-rus/bin/detmir-check /usr/local/bin/detmir-check +sudo ln -sf /opt/awatch-rus/bin/detmir-dlp /usr/local/bin/detmir-dlp -```powershell -C:\Program Files\AWatch-rus\windows\hardening-recovery.ps1 ` - -ConfigPath C:\ProgramData\AWatch-rus\deployment-config.json -``` +Если binary отсутствует, не создавать пустой symlink. Сначала проверить фактический состав release artifact. -### 3.5 Валидация deployment-а (PowerShell report) +7.3 Конфигурация -```powershell -$report = C:\Program Files\AWatch-rus\windows\validate-deployment.ps1 ` - -ConfigPath C:\ProgramData\AWatch-rus\deployment-config.json -$report | ConvertTo-Json -Depth 12 -``` +sudo install -m 0640 awatch-rus.env /etc/awatch-rus/awatch-rus.env ---- +Проверить права: -## 4) Что должно появиться на Windows после установки +sudo chown root:root /etc/awatch-rus/awatch-rus.env +sudo chmod 0640 /etc/awatch-rus/awatch-rus.env -- `C:\Program Files\AWatch-rus\bin` -- `C:\ProgramData\AWatch-rus\deployment-config.json` -- `C:\ProgramData\AWatch-rus\launch-watchers.ps1` -- `C:\ProgramData\AWatch-rus\recovery-loop.ps1` -- `C:\ProgramData\AWatch-rus\browser-domains-native-collector.ps1` -- `C:\ProgramData\AWatch-rus\web-category-rules.json` -- `C:\ProgramData\AWatch-rus\logs\` +8. systemd units -Задачи планировщика: +8.1 Пример backend service -- `ActivityWatch Launch []` (per-user, при логоне) -- `ActivityWatch Recovery` (system-level recovery) +[Unit] +Description=AWatch-rus backend/runtime +After=network-online.target +Wants=network-online.target ---- +[Service] +Type=simple +EnvironmentFile=/etc/awatch-rus/awatch-rus.env +ExecStart=/opt/awatch-rus/bin/awatch-rus-backend +Restart=on-failure +RestartSec=5 +WorkingDirectory=/opt/awatch-rus +NoNewPrivileges=true +PrivateTmp=true +ProtectSystem=full +ProtectHome=true +ReadWritePaths=/var/lib/awatch-rus /var/log/awatch-rus -## 5) Полная валидация потока данных +[Install] +WantedBy=multi-user.target -### 5.1 На Windows-хосте +Если фактическое имя backend binary отличается, заменить "awatch-rus-backend" на актуальное имя из release artifact. -Проверить процессы: +8.2 Пример health service -```powershell -Get-Process aw-watcher-afk,aw-watcher-window -ErrorAction SilentlyContinue -Get-CimInstance Win32_Process | ? { $_.CommandLine -like '*browser-domains-native-collector.ps1*' } | select ProcessId,SessionId,CommandLine -``` +[Unit] +Description=AWatch-rus health daemon +After=network-online.target +Wants=network-online.target -Проверить задачи: +[Service] +Type=simple +EnvironmentFile=/etc/awatch-rus/awatch-rus.env +ExecStart=/opt/awatch-rus/bin/aw-rus-healthd +Restart=on-failure +RestartSec=5 +WorkingDirectory=/opt/awatch-rus +NoNewPrivileges=true +PrivateTmp=true +ProtectSystem=full +ProtectHome=true +ReadWritePaths=/var/lib/awatch-rus /var/log/awatch-rus -```powershell -Get-ScheduledTask | ? { $_.TaskName -like 'ActivityWatch*' } | select TaskName,State -``` +[Install] +WantedBy=multi-user.target -### 5.2 На сервере ActivityWatch API +8.3 Применение unit files -```bash -curl -sS http://127.0.0.1:5600/api/0/buckets | jq 'keys' -``` +sudo systemctl daemon-reload +sudo systemctl enable --now awatch-rus-backend.service +sudo systemctl enable --now aw-rus-healthd.service -Ожидаемые bucket'ы: +Если конкретный unit не используется в текущей инсталляции, не создавать фиктивный сервис. Документировать фактический набор services. -- `aw-watcher-afk_` -- `aw-watcher-window_` -- `aw-watcher-web-_` -- `aw-detmir-web-category_` (категоризованный поток) -- `aw-dlp-endpoint-signals_` (endpoint сигналы) -- `aw-dlp-review_` (ручная классификация через UI) -- `aw-dlp-rules_` (suppress/rule записи через UI) +9. Развёртывание Rust Agent -Проверка событий браузера: +9.1 Установка agent binary -```bash -curl -sS "http://127.0.0.1:5600/api/0/buckets/aw-watcher-web-edge_/events?limit=5" | jq -``` +sudo mkdir -p /opt/awatch-rus/bin +sudo mkdir -p /etc/awatch-rus +sudo mkdir -p /var/lib/awatch-rus/agent +sudo mkdir -p /var/log/awatch-rus -Проверка категоризации: +sudo install -m 0755 awatch-rus-agent /opt/awatch-rus/bin/awatch-rus-agent +sudo install -m 0640 agent.env /etc/awatch-rus/agent.env -```bash -curl -sS "http://127.0.0.1:5600/api/0/buckets/aw-detmir-web-category_/events?limit=5" | jq -``` +9.2 Пример agent service -Проверка DLP review/rules: +[Unit] +Description=AWatch-rus Rust Agent +After=network-online.target +Wants=network-online.target -```bash -curl -sS "http://127.0.0.1:5600/api/0/buckets/aw-dlp-review_/events?limit=20" | jq -curl -sS "http://127.0.0.1:5600/api/0/buckets/aw-dlp-rules_/events?limit=20" | jq -``` +[Service] +Type=simple +EnvironmentFile=/etc/awatch-rus/agent.env +ExecStart=/opt/awatch-rus/bin/awatch-rus-agent +Restart=on-failure +RestartSec=5 +WorkingDirectory=/opt/awatch-rus +NoNewPrivileges=true +PrivateTmp=true +ProtectSystem=full +ProtectHome=true +ReadWritePaths=/var/lib/awatch-rus /var/log/awatch-rus -Ожидаемые поля review: +[Install] +WantedBy=multi-user.target -- `reviewId` -- `signalType` -- `verdict` -- `category` -- `comment` -- `archived` +9.3 Запуск agent -Ожидаемые поля rules: +sudo systemctl daemon-reload +sudo systemctl enable --now awatch-rus-agent.service +sudo systemctl status awatch-rus-agent.service --no-pager -- `ruleId` -- `signalType` -- `match` -- `category` -- `comment` -- `enabled` +10. Развёртывание портала ---- +Портальный слой AWatch-rus зафиксирован как Rust server-rendered HTML + HTMX-compatible JSON API. -## 6) Сопровождение (обязательно) +10.1 Общий порядок -### 6.1 Backup перед любыми изменениями +build portal/backend binary +→ install binary +→ install templates/static assets, если они выделены отдельно +→ update portal env +→ restart portal service +→ smoke check HTTP/API routes -На Proxmox: +10.2 Проверка портала + +curl -fsS http://127.0.0.1:5600/healthz +curl -fsS http://127.0.0.1:5600/readyz +curl -fsS http://127.0.0.1:5600/version + +Если конкретные endpoints в текущей версии отличаются, использовать фактически реализованные health/readiness/version endpoints и обновить этот документ в том же commit. + +11. Патчи в развернутой среде + +11.1 Правило + +Любой production patch применяется только через контролируемый цикл: + +определить commit/tag +→ собрать release artifact +→ выполнить локальные проверки +→ сделать backup/snapshot +→ установить новые binaries/configs +→ restart/reload services +→ smoke tests +→ зафиксировать результат +→ сохранить rollback path + +11.2 Перед патчем + +git rev-parse HEAD +git status --short + +Сохранить: + +дата/время +commit/tag +кто применяет +какие services затрагиваются +какой rollback path + +11.3 Backup перед патчем + +Если используется Proxmox/LXC: -```bash vzdump --mode snapshot --compress zstd --storage -``` -Конфиги внутри CT: +Внутри сервера: -```bash -pct exec -- tar -C / -czf /activitywatch-config-backup.tgz \ - etc/activitywatch \ - etc/systemd/system/activitywatch-server.service \ - opt/activitywatch/webui-ru \ - opt/activitywatch/releases -``` +sudo tar -C / -czf /root/awatch-rus-backup-$(date +%Y%m%d-%H%M%S).tgz \ + etc/awatch-rus \ + opt/awatch-rus \ + var/lib/awatch-rus \ + var/log/awatch-rus -### 6.2 Обновление сервера +Если данные большие, backup "/var/lib/awatch-rus" выполнять отдельной процедурой согласно backup policy. -1. Обновить `AW_SERVER_VERSION` и `AW_SERVER_DOWNLOAD_URL` в - `/private-config/deploy.env` -2. Выполнить: +11.4 Установка нового binary -```bash -/proxmox/push-aw-artifacts.sh -pct enter -bash /install_aw_server.sh -bash /apply_webui_ru_patch.sh -systemctl restart activitywatch-server.service -``` +Сохранить предыдущую версию: -3. Повторить валидацию API/UI. +sudo mkdir -p /opt/awatch-rus/releases/previous +sudo cp -a /opt/awatch-rus/bin /opt/awatch-rus/releases/previous/bin-$(date +%Y%m%d-%H%M%S) -### 6.3 Rollback +Установить новый artifact: -RU patch rollback: +sudo install -m 0755 dist/awatch-rus-release/bin/* /opt/awatch-rus/bin/ -```bash -cp /opt/activitywatch/webui-ru/index.html.bak. /opt/activitywatch/webui-ru/index.html -systemctl restart activitywatch-server.service -``` +11.5 Restart services -Полный rollback: +sudo systemctl daemon-reload +sudo systemctl restart awatch-rus-backend.service +sudo systemctl restart aw-rus-healthd.service -- восстановить CT из snapshot/backup; -- проверить API и Web UI; -- проверить доступность для Windows-клиентов. +Если патч касается только agent: ---- +sudo systemctl restart awatch-rus-agent.service -## 7) Безопасность +Если сервис в текущем контуре называется иначе, использовать фактическое имя systemd unit. -- Не хранить реальные приватные параметры вне `/private-config/deploy.env`. -- Не открывать `5600/tcp` в интернет напрямую. -- Публиковать через VPN или reverse proxy с ограничением доступа. -- Перед изменениями всегда делать backup. +12. Smoke-тесты после патча ---- +12.1 Systemd -## 8) Короткий чек-лист ввода в эксплуатацию +systemctl --failed --no-pager +systemctl status awatch-rus-backend.service --no-pager +systemctl status aw-rus-healthd.service --no-pager -1. Заполнен `/private-config/deploy.env`. -2. Выполнен `/proxmox/create-ct.sh`. -3. Выполнен `/proxmox/push-aw-artifacts.sh`. -4. В CT выполнены `/install_aw_server.sh` и `/apply_webui_ru_patch.sh`. -5. Сервер API/порт/UI проверены. -6. На Windows выполнен `deploy-domain-users.ps1`. -7. Проверены процессы, задачи и bucket'ы. -8. Зафиксированы параметры и дата ввода. +12.2 Rust operational checks + +detmir-status --json +detmir-check --json +detmir-dlp --json + +Если отдельная команда не установлена в данном контуре, это не считается ошибкой только при наличии документированного исключения. + +12.3 HTTP/API + +curl -fsS http://127.0.0.1:5600/healthz +curl -fsS http://127.0.0.1:5600/readyz +curl -fsS http://127.0.0.1:5600/version + +12.4 Portal smoke + +Проверить в браузере: + +/portal +/portal/reports +/portal/architecture + +Для Pilot v1 проверить роли: + +executive +manager +security +forensics +admin + +12.5 Data freshness + +Проверить, что витрины и отчёты не пустые из-за сбоя сбора: + +последние события поступают +worktime reports обновляются +DLP/security events отображаются, если включены +evidence/reporting не падает +Grafana dashboards открываются + +13. Rollback + +13.1 Быстрый rollback binary + +Найти предыдущий backup: + +ls -lah /opt/awatch-rus/releases/previous/ + +Восстановить: + +sudo rsync -a --delete /opt/awatch-rus/releases/previous/bin-YYYYMMDD-HHMMSS/ /opt/awatch-rus/bin/ +sudo systemctl restart awatch-rus-backend.service +sudo systemctl restart aw-rus-healthd.service + +13.2 Rollback конфигурации + +sudo cp /etc/awatch-rus/awatch-rus.env.bak /etc/awatch-rus/awatch-rus.env +sudo systemctl restart awatch-rus-backend.service + +13.3 Rollback CT/VM + +Если повреждение затрагивает runtime, данные или systemd-конфигурацию: + +остановить сервисы +восстановить snapshot/backup +проверить health/readiness/version +проверить портал +проверить поступление данных +зафиксировать incident note + +14. Monitoring + +14.1 Что должно контролироваться + +- service status; +- process uptime; +- API health/readiness; +- latency; +- error rate; +- freshness данных; +- заполненность диска; +- размер логов; +- успешность exporters; +- SLO status; +- agent coverage; +- отсутствие failed systemd units. + +14.2 Grafana + +В Grafana должны быть разделены витрины: + +- executive dashboard; +- security dashboard; +- operations dashboard; +- RDP/user activity dashboard; +- data quality/freshness dashboard; +- DLP/evidence dashboard, если модуль включён. + +14.3 Prometheus + +Prometheus scrape должен быть доступен только из внутреннего контура мониторинга. Не открывать metrics endpoints наружу. + +15. Security hardening + +Обязательные правила: + +- не публиковать API напрямую в интернет; +- использовать VPN/reverse proxy/access control; +- закрыть лишние порты; +- хранить secrets вне git; +- ограничить права systemd services; +- использовать отдельного service user, если это поддерживается текущей установкой; +- включить backup; +- проверять логи после каждого патча; +- не использовать demo fixtures как production data; +- не смешивать реальные ФИО/IP/hostname с публичными demo screenshots. + +16. Проверка перед вводом в эксплуатацию + +Минимальный checklist: + +[ ] выбран commit/tag release +[ ] cargo fmt прошёл +[ ] cargo clippy прошёл +[ ] cargo test прошёл +[ ] cargo build --release прошёл +[ ] private config guard прошёл +[ ] backup/snapshot создан +[ ] binaries установлены +[ ] systemd services запущены +[ ] health/readiness/version отвечают +[ ] detmir-status/check/dlp работают +[ ] portal открывается +[ ] роли Pilot v1 проверены +[ ] Grafana dashboards открываются +[ ] данные поступают +[ ] rollback path известен +[ ] дата/commit/оператор зафиксированы + +17. Что больше не использовать как основной путь + +Не использовать как основной production flow: + +windows/deploy-single-user.ps1 +windows/deploy-domain-users.ps1 +windows/deploy-ensemble.ps1 +windows/validate-deployment.ps1 +windows/hardening-recovery.ps1 +windows/browser-domains-native-collector.ps1 +windows/dlp-endpoint-signals-collector.ps1 + +Если эти файлы физически остаются в репозитории, они должны быть явно помечены как: + +legacy +planned provider +migration-only +dev/test helper + +Они не должны описываться в основном deployment manual как обязательный production-путь. + +18. Короткий production runbook + +18.1 Развернуть + +cargo fmt --all -- --check +cargo clippy --workspace --all-targets -- -D warnings +cargo test --workspace +cargo build --release --workspace + +sudo install -m 0755 target/release/ /opt/awatch-rus/bin/ +sudo systemctl daemon-reload +sudo systemctl restart .service + +18.2 Проверить + +systemctl --failed --no-pager +detmir-status --json +detmir-check --json +curl -fsS http://127.0.0.1:5600/healthz +curl -fsS http://127.0.0.1:5600/readyz +curl -fsS http://127.0.0.1:5600/version + +18.3 Откатить + +sudo rsync -a --delete /opt/awatch-rus/releases/previous/bin-YYYYMMDD-HHMMSS/ /opt/awatch-rus/bin/ +sudo systemctl restart .service + +19. Правило актуализации этого документа + +Если меняется: + +- имя binary; +- имя systemd unit; +- порт; +- endpoint; +- путь хранения данных; +- способ сборки; +- способ доставки artifacts; +- smoke-test; +- rollback procedure; + +то этот файл должен обновляться в том же commit, что и изменение кода или deployment-конфигурации.