НИИКН: восстановление AIO, план миграции Groupfolders, запуск rsync

- 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 <noreply@anthropic.com>
This commit is contained in:
Claude Code
2026-03-03 20:58:36 +00:00
parent 02fb6328cc
commit 41f46e3ac2
2 changed files with 279 additions and 2 deletions

View File

@@ -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 уже есть)

View File

@@ -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 работает во время копирования) |