From 41f46e3ac21ea3a5346f063a865efc659d4a7cbe Mon Sep 17 00:00:00 2001 From: Claude Code Date: Tue, 3 Mar 2026 20:58:36 +0000 Subject: [PATCH] =?UTF-8?q?=D0=9D=D0=98=D0=98=D0=9A=D0=9D:=20=D0=B2=D0=BE?= =?UTF-8?q?=D1=81=D1=81=D1=82=D0=B0=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20AIO,=20=D0=BF=D0=BB=D0=B0=D0=BD=20=D0=BC=D0=B8?= =?UTF-8?q?=D0=B3=D1=80=D0=B0=D1=86=D0=B8=D0=B8=20Groupfolders,=20=D0=B7?= =?UTF-8?q?=D0=B0=D0=BF=D1=83=D1=81=D0=BA=20rsync?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - NC AIO контейнеры восстановлены, Talk signaling работает - Исправлена ссылка AIO auto-login (192.168.1.200:8080) - Бот переименован в "НИИКН помощник", SSH доступ настроен - Очищена корзина admin (2.2 TB), расширен диск ncdata до 4.4 TB - Запущен rsync groupfolders VM100→VM108 (~2.8 TB, ~4ч) - Добавлен полный план миграции с правами и ACL Co-Authored-By: Claude Opus 4.6 --- projects/niikn/changelog.md | 66 ++++++- projects/niikn/groupfolders-migration.md | 215 +++++++++++++++++++++++ 2 files changed, 279 insertions(+), 2 deletions(-) create mode 100644 projects/niikn/groupfolders-migration.md diff --git a/projects/niikn/changelog.md b/projects/niikn/changelog.md index 82c1147..4cd66fb 100644 --- a/projects/niikn/changelog.md +++ b/projects/niikn/changelog.md @@ -311,15 +311,77 @@ VM 192.168.1.200 также добавлен cloud-init диск (ide0: local-lv --- +## 2026-03-03 — Восстановление NC AIO и подготовка миграции Groupfolders + +### NC AIO — восстановление контейнеров +- Все контейнеры были остановлены при диагностике Talk HPB +- Запущены через AIO API (POST /api/docker/start с CSRF-токеном) +- Все 13 контейнеров healthy, NC доступен по https://niikn.com + +### NC Talk — signaling восстановлен автоматически +- AIO при старте прописал signaling_servers: + - `https://new.niikn.com/standalone-signaling/` + - `https://niikn.com/standalone-signaling/` +- secret: `eba8b0547b0285a475157911300720f99886fe1202a3ca98` + +### AIO auto-login из NC → исправлена ссылка +- Проблема: кнопка "Open AIO Interface" в NC admin вела на `localhost:8080` (нерабочая) +- Причина: mastercontainer ставит AIO_URL из Host заголовка при API-вызове /api/docker/start +- Исправление: патч `Admin.php` в контейнере nextcloud-aio-nextcloud — захардкожен `192.168.1.200:8080` +- Файл: `/var/www/html/apps/nextcloud-aio/lib/Settings/Admin.php` +- AIO_TOKEN: `4046205930d1fe250a29c6a50919083fcd61a9fe5feefec9` +- AIO пароль: `exemplary spender jolly rascal tipper crestless goes greasily` +- **Примечание:** патч сбросится при обновлении AIO контейнеров + +### Бот НИИКН — переименование и SSH +- Telegram бот переименован: "Максимка" → "НИИКН помощник" (@maximka_assistant_bot) +- Обновлены IDENTITY.md и SOUL.md на LXC 133 +- Добавлено правило: бот спрашивает подтверждение перед изменениями инфраструктуры +- SSH ключ `niikn-helper@clawdbot-1` добавлен на: + - Proxmox НИИКН (192.168.1.201) ✅ + - NC AIO VM (192.168.1.200) ✅ + - Старый NC VM 100 (192.168.1.245) ✅ + +### Корзина admin — очистка 2.2 TB +- Обнаружено: admin/files_trashbin содержал 2.2 TB удалённых 23.02 данных: + - `__groupfolders` (2.2 TB) — старая копия групповых папок + - `bitrix` (32 GB) — бэкап Битрикс +- Очищено через `occ trashbin:cleanup admin` +- Свободное место ncdata: 626 GB → **3.3 TB** + +### Диск ncdata (VM 108) — расширение +- Пользователь увеличил виртуальный диск sdb до 4.4 TB +- `growpart /dev/sdb 1` + `resize2fs /dev/sdb1` +- Результат: 4.4 TB, свободно 3.3 TB + +### Миграция Groupfolders — запущено копирование +- Источник: VM 100 (192.168.1.245), `/mnt/nc-data/__groupfolders/` +- Приёмник: VM 108 (192.168.1.200), `/mnt/ncdata/__groupfolders/` +- SSH ключ VM 108 → VM 100 настроен +- Запущен `rsync -avP --partial` через nohup (не прервётся при разрыве SSH) +- Скорость: ~195 MB/s, ожидаемое время: ~4 часа +- Лог: `/root/rsync-groupfolders.log` на VM 108 +- Данные: 2.8 TB (1.5 TB Общий ресурс + 1.2 TB ГИКЭ_ВОКН_Москва + versions/trash) +- План миграции с правами: `projects/niikn/groupfolders-migration.md` + +### Права Groupfolders — выгружены из старого NC +- Полный дамп таблиц: oc_group_folders, oc_group_folders_groups, oc_group_folders_manage, oc_group_folders_acl +- ACL привязаны к fileid → маппинг путей задокументирован +- Все группы (НИИКН, admin, Редактирование, Фотофиюксация ВОКН Москва, ДКН, test) уже существуют на новом NC + +--- + ## Что ещё нужно сделать +- [x] ~~Перезапустить AIO контейнеры Talk → восстановить signaling_servers~~ +- [x] ~~Настроить Groupfolders как полноценное приложение~~ (в процессе — rsync идёт) +- [ ] **После rsync:** создать Groupfolders, назначить права, scan (см. groupfolders-migration.md) +- [ ] **После rsync:** удалить External Storage ID 4 и 5 (SMB пока не удалять) - [ ] Настроить AIO Backup на VM108 - [ ] Настроить SMTP для уведомлений Nextcloud (использовать mail.niikn.com после настройки DNS) -- [ ] Настроить Groupfolders как полноценное приложение (сейчас — Local External Storage через /mnt/ncsmb) - [ ] Проверить работу пользователей на new.niikn.com - [ ] Решить судьбу Linkwarden и FileBrowser (переносить или нет) - [ ] Зафиксировать статический IP для VM100 (сейчас DHCP 192.168.1.245) -- [ ] Перезапустить AIO контейнеры Talk → восстановить signaling_servers - [ ] Проверить SSH бота к NC AIO после перезагрузки VM - [ ] Удалить cloud-init диск ide0 с VM 108 (если не нужен) - [ ] Установить и настроить Matrix на Proxmox НИИКН (VM 107 уже есть) diff --git a/projects/niikn/groupfolders-migration.md b/projects/niikn/groupfolders-migration.md new file mode 100644 index 0000000..8824931 --- /dev/null +++ b/projects/niikn/groupfolders-migration.md @@ -0,0 +1,215 @@ +# Миграция Groupfolders: VM 100 → VM 108 + +> **Дата:** 03.03.2026 +> **Статус:** Подготовлено, ожидает увеличения диска + +--- + +## Источник: VM 100 (Cloud-NIIKN, старый NC) + +- IP: 192.168.1.245 +- NC data: `/mnt/nc-data/` (4.1 TB диск sdb, занято 3.7 TB) +- SSH: root, ключ niikn-helper@clawdbot-1 (добавлен 03.03.2026) +- Groupfolders path: `/mnt/nc-data/__groupfolders/` + +### Данные + +| ID | Путь | Название | Размер | +|----|------|----------|--------| +| 1 | `__groupfolders/1/` | Общий ресурс | 1.5 TB | +| 2 | `__groupfolders/2/` | ГИКЭ_ВОКН_Москва | 1.2 TB | +| — | `__groupfolders/versions/` | Версии файлов | 84 GB | +| — | `__groupfolders/trash/` | Корзина | 7.6 GB | +| — | `__groupfolders/onlyoffice/` | OnlyOffice locks | 213 MB | +| **Итого** | | | **~2.8 TB** | + +### Права (oc_group_folders_groups) + +| Папка | Группа | Permissions | Расшифровка | +|-------|--------|-------------|-------------| +| 1 (Общий ресурс) | НИИКН | 23 | read, write, share | +| 1 (Общий ресурс) | admin | 31 | read, write, share, delete | +| 1 (Общий ресурс) | Редактирование | 31 | read, write, share, delete | +| 2 (ГИКЭ_ВОКН_Москва) | Фотофиюксация ВОКН Москва | 23 | read, write, share | +| 2 (ГИКЭ_ВОКН_Москва) | admin | 31 | read, write, share, delete | +| 2 (ГИКЭ_ВОКН_Москва) | test | 23 | read, write, share | +| 2 (ГИКЭ_ВОКН_Москва) | ДКН | 23 | read, write, share | + +### Управление (oc_group_folders_manage) + +| Папка | Тип | Управляющий | +|-------|-----|-------------| +| 1 | group | admin | +| 2 | group | admin | + +### ACL (oc_group_folders_acl) — Advanced Permissions + +| Папка/FileID | Тип | Пользователь | Mask | Permissions | +|--------------|-----|-------------|------|-------------| +| 523107 | user | ulyanova140@gmail.com | 31 | 31 (full) | +| 2171076 | user | maksimmaul@gmail.com | 0 | 0 (deny) | +| 3381694 | user | admin | 0 | 0 (deny) | +| 1227009 | user | ccpupt@mail.ru | 15 | 15 | +| 3684395 | user | aan@labexp.ru | 13 | 13 | +| 1345540 | user | op.shishova@yandex.ru | 31 | 31 (full) | +| 1345540 | user | 19761113@mail.ru | 31 | 31 (full) | +| 1345628 | user | 19761113@mail.ru | 31 | 31 (full) | +| 1345628 | user | op.shishova@yandex.ru | 31 | 31 (full) | +| 1345628 | user | admin | 31 | 31 (full) | + +> **Примечание:** ACL привязаны к fileid, которые на новом NC будут другими. ACL нужно будет переназначить после `files:scan` по путям файлов. + +### Настройки папок (oc_group_folders) + +| folder_id | mount_point | quota | acl | +|-----------|-------------|-------|-----| +| 1 | Общий ресурс | -3 (unlimited) | 1 (enabled) | +| 2 | ГИКЭ_ВОКН_Москва | -4 (unlimited) | 1 (enabled) | + +--- + +## Приёмник: VM 108 (Nextclaud-AIO, новый NC) + +- IP: 192.168.1.200 +- NC data: `/mnt/ncdata/` (sdb1, 3.9 TB, занято 3.1 TB, **свободно 626 GB**) +- Groupfolders app: **установлен** (v20.1.12) +- Группы: НИИКН, admin, Редактирование, Фотофиюксация ВОКН Москва, ДКН, test — **все есть** +- Текущие External Storage (ID 4, 5) нужно удалить перед миграцией + +--- + +## План миграции + +### Шаг 0: Увеличить диск +- Пользователь увеличивает `/mnt/ncdata` (sdb1) минимум на 3 TB +- После увеличения: `resize2fs /dev/sdb1` + +### Шаг 1: Копирование данных (10-15 часов) +```bash +# На VM 108: +rsync -avP --info=progress2 \ + root@192.168.1.245:/mnt/nc-data/__groupfolders/ \ + /mnt/ncdata/data/__groupfolders/ + +# Исправить владельца +chown -R www-data:www-data /mnt/ncdata/data/__groupfolders/ +``` + +### Шаг 2: Удалить External Storage +```bash +docker exec -u www-data nextcloud-aio-nextcloud php occ files_external:delete 4 +docker exec -u www-data nextcloud-aio-nextcloud php occ files_external:delete 5 +``` + +### Шаг 3: Создать Groupfolders +```bash +# Создать папки (ID будут 1 и 2 если первые) +docker exec -u www-data nextcloud-aio-nextcloud php occ groupfolders:create "Общий ресурс" +docker exec -u www-data nextcloud-aio-nextcloud php occ groupfolders:create "ГИКЭ_ВОКН_Москва" + +# Назначить группы с правами +# Папка 1 — Общий ресурс +docker exec -u www-data nextcloud-aio-nextcloud php occ groupfolders:group 1 НИИКН write share +docker exec -u www-data nextcloud-aio-nextcloud php occ groupfolders:group 1 admin write share delete +docker exec -u www-data nextcloud-aio-nextcloud php occ groupfolders:group 1 Редактирование write share delete + +# Папка 2 — ГИКЭ_ВОКН_Москва +docker exec -u www-data nextcloud-aio-nextcloud php occ groupfolders:group 2 "Фотофиюксация ВОКН Москва" write share +docker exec -u www-data nextcloud-aio-nextcloud php occ groupfolders:group 2 admin write share delete +docker exec -u www-data nextcloud-aio-nextcloud php occ groupfolders:group 2 test write share +docker exec -u www-data nextcloud-aio-nextcloud php occ groupfolders:group 2 ДКН write share + +# Включить ACL +docker exec -u www-data nextcloud-aio-nextcloud php occ groupfolders:acl 1 true +docker exec -u www-data nextcloud-aio-nextcloud php occ groupfolders:acl 2 true + +# Управление — admin +docker exec -u www-data nextcloud-aio-nextcloud php occ groupfolders:manage 1 group admin +docker exec -u www-data nextcloud-aio-nextcloud php occ groupfolders:manage 2 group admin + +# Квоты unlimited +docker exec -u www-data nextcloud-aio-nextcloud php occ groupfolders:quota 1 unlimited +docker exec -u www-data nextcloud-aio-nextcloud php occ groupfolders:quota 2 unlimited +``` + +### Шаг 4: Сканирование файлов +```bash +docker exec -u www-data nextcloud-aio-nextcloud php occ groupfolders:scan 1 +docker exec -u www-data nextcloud-aio-nextcloud php occ groupfolders:scan 2 +``` + +### Шаг 5: Восстановить ACL по путям + +ACL привязаны к fileid. После scan fileid будут другие. Ниже — маппинг путей для восстановления. + +**Папка 1 (Общий ресурс):** + +| Путь внутри папки | Пользователь | Mask | Permissions | Смысл | +|-------------------|-------------|------|-------------|-------| +| `Казань/ТОМ 2 УТВЕРЖДАЕМАЯ ЧАСТЬ ВЫВОДЫ` | maksimmaul@gmail.com | 0 | 0 | запрет | +| `.stfolder` | admin | 0 | 0 | запрет | +| `2024/Вологда_2024/Дополнительная фотофиксация (Интерьер)/12) 31. Ледник И.П,Дружининского из деревни Окуловской` | ccpupt@mail.ru | 15 | 15 | r/w/delete (no share) | +| `2025/Иркутск_2025/Выписки ЕГРН` | aan@labexp.ru | 13 | 13 | r/delete (no write/share) | + +**Папка 2 (ГИКЭ_ВОКН_Москва):** + +| Путь внутри папки | Пользователь | Mask | Permissions | Смысл | +|-------------------|-------------|------|-------------|-------| +| `Образцы актов` | op.shishova@yandex.ru | 31 | 31 | полный доступ | +| `Образцы актов` | 19761113@mail.ru | 31 | 31 | полный доступ | +| `/` (корень папки) | 19761113@mail.ru | 31 | 31 | полный доступ | +| `/` (корень папки) | op.shishova@yandex.ru | 31 | 31 | полный доступ | +| `/` (корень папки) | admin | 31 | 31 | полный доступ | + +**Скрипт восстановления ACL** (выполнить после scan): +```bash +# Получить новые fileid по путям и вставить ACL +docker exec nextcloud-aio-database psql -U oc_nextcloud -d nextcloud_database -c " +-- ACL для папки 1 (Общий ресурс) +INSERT INTO oc_group_folders_acl (fileid, mapping_type, mapping_id, mask, permissions) +SELECT fc.fileid, 'user', 'maksimmaul@gmail.com', 0, 0 +FROM oc_filecache fc WHERE fc.path = '__groupfolders/1/Казань/ТОМ 2 УТВЕРЖДАЕМАЯ ЧАСТЬ ВЫВОДЫ'; + +INSERT INTO oc_group_folders_acl (fileid, mapping_type, mapping_id, mask, permissions) +SELECT fc.fileid, 'user', 'ccpupt@mail.ru', 15, 15 +FROM oc_filecache fc WHERE fc.path LIKE '__groupfolders/1/2024/Вологда_2024/Дополнительная фотофиксация%Ледник%'; + +INSERT INTO oc_group_folders_acl (fileid, mapping_type, mapping_id, mask, permissions) +SELECT fc.fileid, 'user', 'aan@labexp.ru', 13, 13 +FROM oc_filecache fc WHERE fc.path = '__groupfolders/1/2025/Иркутск_2025/Выписки ЕГРН'; + +-- ACL для папки 2 (ГИКЭ_ВОКН_Москва) — корень +INSERT INTO oc_group_folders_acl (fileid, mapping_type, mapping_id, mask, permissions) +SELECT fc.fileid, 'user', '19761113@mail.ru', 31, 31 +FROM oc_filecache fc WHERE fc.path = '__groupfolders/2'; + +INSERT INTO oc_group_folders_acl (fileid, mapping_type, mapping_id, mask, permissions) +SELECT fc.fileid, 'user', 'op.shishova@yandex.ru', 31, 31 +FROM oc_filecache fc WHERE fc.path = '__groupfolders/2'; + +INSERT INTO oc_group_folders_acl (fileid, mapping_type, mapping_id, mask, permissions) +SELECT fc.fileid, 'user', 'admin', 31, 31 +FROM oc_filecache fc WHERE fc.path = '__groupfolders/2'; + +-- ACL для папки 2 — Образцы актов +INSERT INTO oc_group_folders_acl (fileid, mapping_type, mapping_id, mask, permissions) +SELECT fc.fileid, 'user', 'op.shishova@yandex.ru', 31, 31 +FROM oc_filecache fc WHERE fc.path = '__groupfolders/2/Образцы актов'; + +INSERT INTO oc_group_folders_acl (fileid, mapping_type, mapping_id, mask, permissions) +SELECT fc.fileid, 'user', '19761113@mail.ru', 31, 31 +FROM oc_filecache fc WHERE fc.path = '__groupfolders/2/Образцы актов'; +" +``` + +--- + +## Оценки + +| Параметр | Значение | +|----------|----------| +| Объём данных | ~2.8 TB | +| Нужно свободного места | ≥3 TB на ncdata | +| Время rsync | 10-15 часов | +| Время настройки | ~30 мин | +| Downtime NC | 0 (NC работает во время копирования) |