# Deployment

## 0. Ansible full-stack вариант (рекомендуется)

```sh
cd <PROJECT_ROOT>/ansible
ansible-playbook -i inventory.ini provision_proxmox_ct_and_deploy_aw.yml
```

Этот playbook создаёт CT в Proxmox и полностью разворачивает ActivityWatch внутри контейнера.

Массовый вариант по матрице CT:

```sh
cd <PROJECT_ROOT>/ansible
ansible-playbook -i inventory.ini provision_proxmox_ct_matrix_and_deploy_aw.yml
```

## 1. Подготовить env-файлы

На рабочей машине оператора:

```sh
cp proxmox/ct-vars.example.env <PRIVATE_CONFIG_DIR>/activitywatch-ct.env
cp aw-server/aw-server.env.example <PRIVATE_CONFIG_DIR>/activitywatch-aw.env
```

Заполнить оба файла реальными значениями вне git.

## 2. Создать CT на Proxmox

На узле Proxmox:

```sh
cd /path/to/ActivityWatch-Russian
./proxmox/create-ct.sh <PRIVATE_CONFIG_DIR>/activitywatch-ct.env
```

Скрипт:

- валидирует обязательные переменные;
- создаёт Debian 12 CT;
- запускает контейнер;
- выполняет минимальный bootstrap пакетов;
- готовит `<CT_BOOTSTRAP_DIR>` для дальнейшей загрузки артефактов.

## 3. Загрузить артефакты в CT

На узле Proxmox:

```sh
./proxmox/push-aw-artifacts.sh <PRIVATE_CONFIG_DIR>/activitywatch-ct.env
pct push <CT_ID> <PRIVATE_CONFIG_DIR>/activitywatch-aw.env /etc/activitywatch/aw-server.env
```

В CT будут загружены:

- `install_aw_server.sh`
- `apply_webui_ru_patch.sh`
- `activitywatch-server.service`
- `aw-ru-patch.js`
- `aw-sw-cleanup.js`

## 4. Установить ActivityWatch Server

Внутри CT:

```sh
pct enter <CT_ID>
bash <CT_BOOTSTRAP_DIR>/install_aw_server.sh
```

Скрипт установки:

- ставит `curl`, `unzip`, `jq`, `ca-certificates`;
- создаёт пользователя `activitywatch`;
- скачивает release `aw-server-rust`;
- раскладывает бинарник по версиям;
- создаёт активный symlink;
- копирует systemd unit;
- включает и запускает сервис.

## 5. Применить RU patch для Web UI

Внутри CT:

```sh
bash <CT_BOOTSTRAP_DIR>/apply_webui_ru_patch.sh
systemctl restart activitywatch-server.service
```

Патч:

- копирует `aw-ru-patch.js` и `aw-sw-cleanup.js`;
- делает backup `index.html`;
- добавляет include в `index.html`;
- заменяет `service-worker.js` cleanup-версией для сброса старого cache;
- включает DLP Web UI override: верхнее меню `DLP`, центр `DLP review и правила`, buckets `aw-dlp-review_<HOST>` и `aw-dlp-rules_<HOST>`.

## 6. Проверить сервис

```sh
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
```

Ожидаемо:

- сервис `active (running)`;
- API отвечает;
- порт слушается;
- в `index.html` есть оба include.

## 7. После публикации

Проверить извне:

- открывается `/`;
- API доступен по ожидаемому URL;
- после hard refresh видна русификация;
- в верхнем меню доступен `DLP` и он открывает `#/buckets/aw-dlp-endpoint-signals_<HOST>`;
- на DLP bucket-странице доступны секции `DLP review и правила`, `DLP Rules`, `DLP Review`;
- reverse proxy не кэширует старую статику.

## 8. Что зафиксировать после ввода

- дата ввода;
- узел Proxmox;
- `CT_ID`;
- IP/FQDN;
- версия `aw-server-rust`;
- место хранения backup;
- фактическая схема публикации.
