Files
knowledge-base/projects/niikn/changelog.md

26 KiB
Raw Blame History

NIIKN — Журнал изменений


2026-03-05 — Развёртывание LiveKit для Element Call (VM 107)

LiveKit Server + lk-jwt-service

  • Развёрнут LiveKit Server v1.9.11 и lk-jwt-service v0.4.1 на VM 107 (192.168.1.133)
  • Оба контейнера в host network mode, добавлены в /opt/matrix-synapse-docker/docker-compose.yml
  • Конфиг: /opt/livekit/livekit.yaml, API key: matrixrtc
  • Порты: 7880 (API/WS), 7881 (ICE TCP), 50100-50200 (WebRTC UDP), 9090 (JWT service)

DNS и NPM

  • Добавлена A-запись lk.niikn.com → 85.235.181.190 (Spaceweb)
  • NPM: создан proxy host lk.niikn.com → 192.168.1.133:7880 (SSL cert ID:55, websockets)
  • NPM: добавлен location /livekit/jwt/ на proxy host #18 (matrix.niikn.com) → 192.168.1.133:9090

MikroTik NAT

  • Добавлен проброс TCP 7881 → 192.168.1.133 (LiveKit ICE)
  • Добавлен проброс UDP 50100-50200 → 192.168.1.133 (LiveKit WebRTC media)

Synapse

  • Добавлены experimental_features: msc3266_enabled, msc4222_enabled
  • Добавлен max_event_delay_duration: 24h
  • well-known обновлён с rtc_foci для LiveKit

Результат

  • Все сервисы работают, healthz проверки пройдены
  • Element X теперь может совершать звонки через LiveKit SFU

2026-02-24 — Подготовка VM108 (new.niikn.com) к продакшену

Исправление Nextcloud AIO

  • Контейнер nextcloud-aio-nextcloud был unhealthy — PHP-FPM не стартовал из-за зависшего процесса FTS-индексации
  • Создан флаг /mnt/ncdata/fts-index.done, убит блокирующий процесс PID 255
  • Контейнер поднялся, сайт https://new.niikn.com стал доступен

Сетевая конфигурация VM108

  • Назначен статический IP 192.168.1.200 (было DHCP 192.168.1.147)
  • Файл: /etc/netplan/99-static.yaml
  • На MikroTik (192.168.1.1): добавлена статическая DHCP-аренда, проброс Talk-порта 3479 (TCP/UDP), отключён UPnP

UFW Firewall

  • Установлен и настроен UFW
  • Скрипт: /home/cloud/setup-firewall.sh
  • Правила: SSH (22), Talk TURN (3479), Nextcloud Apache только от NPM (11000), LAN-доступ к admin-портам, Proxmox (192.168.1.201), Tailscale (wt0)

Исправления конфигурации Nextcloud

  • trusted_proxies: добавлен IP NPM (192.168.1.22)
  • forwarded_for_headers: настроен для корректного определения IP клиентов
  • maintenance_window_start: исправлено с 100 на 1 (1:00 UTC)

NPM (Nginx Proxy Manager)

  • Обновлён вручную пользователем: upstream изменён с 192.168.1.147 на 192.168.1.200

2026-02-24 — SMB LXC (192.168.1.79, LXC 110)

Исправление прав файлов

  • 104,645 файлов принадлежали root → исправлено: chown -R admin:admin /srv/samba/share
  • Включена SSH-аутентификация по паролю
  • Доступ: admin / 1qaz!QAZ

2026-02-24 — Groupfolders (VM100 → SMB)

Состояние данных (проверено 2026-02-24)

Папка VM100 SMB Статус
Общий ресурс 1.5 TB, 219,396 файлов 1.5 TB, 227,960 файлов SMB актуальнее
ГИКЭ_ВОКН_Москва 1.2 TB, 238,903 файлов 1.2 TB, 238,903 файлов идентично
  • Данные на SMB уже были актуальны — дополнительное копирование не потребовалось
  • SMB содержит более полную копию «Общий ресурс» (227,960 файлов vs 219,396 на VM100 — разница: удалённые пользователями файлы)

2026-02-2425 — Миграция пользователей VM100 → VM108

Метод

  1. Скопированы хэши паролей из БД VM100 (PostgreSQL) → VM108 одним запросом
  2. Файлы перенесены через rsync -a --rsync-path="sudo rsync" по SSH
  3. После переноса — occ files:scan для каждого пользователя

Перенесённые пользователи (файлы)

Пользователь Объём Время Статус
op.shishova@yandex.ru (Оксана Шишова) 734 GB ~3.5ч
15101995ol@gmail.com 45 MB <1 мин
office-msk-exp@mail.ru 171 MB <1 мин
4sa56621@gmail.com 2.5 GB 21 сек
19761113@mail.ru (Lentovcky) 21 GB 6 мин
maksimmaul@gmail.com 5.3 GB 1.5 мин
Starodubtseva.t.97@mail.ru 17 GB 4 мин
ulyanova140@gmail.com 59 GB 14 мин
ali6507@yandex.ru 16 GB 6 мин
olga_gorkova_arch@mail.ru 1.6 GB 15 сек
Dyomina Elizaveta 429 MB <1 мин
Zlotya Vladlena 209 MB <1 мин
+ ~80 пользователей ~35-38 MB <1 мин

Пропущены (системные / не нужны)

  • admin, test, test2, Guest001

Итог миграции

  • Старт: 2026-02-24 21:27
  • Завершение: 2026-02-25 23:42
  • Файлов перенесено: всего ~120+ GB крупных данных + мелкие
  • Пароли: скопированы для всех ~90 пользователей
  • files:scan: выполнен для 24 пользователей с новыми данными
  • Ошибок: 0

Инструменты миграции (хранятся на VM108)

  • /tmp/migrate-users.sh — основной скрипт миграции
  • /tmp/prox_key — SSH-ключ для доступа к VM100
  • /tmp/migrate-users.log — полный лог последнего запуска

2026-02-25 — Groupfolders как Local External Storage (VM108)

Архитектурное решение

Выбран Вариант 2: SMB смонтирован локально на VM108 и подключён как Local External Storage в Nextcloud AIO.

Преимущества перед прямым SMB/CIFS из Nextcloud:

  • Скорость: доступ через локальную файловую систему, без overhead SMB-протокола внутри контейнера
  • Groupfolders вынесены за периметр AIO Backup — не нагружают резервное копирование 2.7 TB лишними данными
  • Хранилище SMB (LXC 110) живёт отдельно и независимо от AIO

Настройка монтирования SMB на VM108

Файл учётных данных /etc/samba/smb-niikn.creds (chmod 600):

username=admin
password=1qaz!QAZ

Запись в /etc/fstab:

//192.168.1.79/share /mnt/ncsmb cifs credentials=/etc/samba/smb-niikn.creds,uid=33,gid=33,file_mode=0770,dir_mode=0770,vers=3.0,_netdev,nofail 0 0
  • uid=33,gid=33 — www-data (владелец файлов внутри контейнера Nextcloud)
  • _netdev,nofail — монтируется только после сети, не блокирует загрузку при отсутствии SMB

Монтирование:

sudo apt install cifs-utils
sudo mount -a

Видимость внутри контейнера Nextcloud AIO

NEXTCLOUD_MOUNT=/mnt уже был задан в AIO — весь /mnt хоста пробрасывается в контейнер. Однако propagation=rprivate: новые подмонтирования, сделанные после старта контейнера, не видны автоматически.

Решение: docker restart nextcloud-aio-nextcloud после монтирования /mnt/ncsmb.

External Storage в Nextcloud (итоговая конфигурация)

ID Путь в NC Тип Источник на хосте Группа
1 /Локально Local /mnt/ncdata admin
4 /Общий ресурс Local /mnt/ncsmb/__groupfolders/Общий ресурс НИИКН
5 /ГИКЭ_ВОКН_Москва Local /mnt/ncsmb/__groupfolders/ГИКЭ_ВОКН_Москва НИИКН

Команды создания:

docker exec -u www-data nextcloud-aio-nextcloud php occ files_external:create \
  'Общий ресурс' local null::null \
  --config=datadir='/mnt/ncsmb/__groupfolders/Общий ресурс'

docker exec -u www-data nextcloud-aio-nextcloud php occ files_external:create \
  'ГИКЭ_ВОКН_Москва' local null::null \
  --config=datadir='/mnt/ncsmb/__groupfolders/ГИКЭ_ВОКН_Москва'

# Назначить группу НИИКН
docker exec -u www-data nextcloud-aio-nextcloud php occ files_external:applicable --add-group=НИИКН 4
docker exec -u www-data nextcloud-aio-nextcloud php occ files_external:applicable --add-group=НИИКН 5

Старый External Storage типа SMB/CIFS (ID=2, /SMB) удалён.


2026-02-25 — Установка Mailcow (VM106, 192.168.1.128)

Конфигурация VM

Параметр Значение
Proxmox ID VM106
OS Ubuntu 24.04.4 LTS Server (cloud image)
IP 192.168.1.128 (статический)
CPU 4 vCPU
RAM 8 GB
Диск 60 GB
SSH пользователь cloud / 1qaz!QAZ
Mailcow hostname mail.niikn.com
Timezone Europe/Moscow

Подготовка VM

  • Исходная VM106 была с Ubuntu Desktop — переустановлена через Proxmox
  • Использован Ubuntu 24.04 Server cloud image (noble-server-cloudimg-amd64.img)
  • Диск расширен до 60 GB, cloud-init настроен через Proxmox (user=cloud, NOPASSWD sudo, SSH key)
  • Статический IP назначен через /etc/netplan/99-static.yaml

Docker (официальный репозиторий)

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | install -m 0755 /etc/apt/keyrings/docker.asc
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu noble stable" > /etc/apt/sources.list.d/docker.list
apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin git curl

Mailcow установка

git clone https://github.com/mailcow/mailcow-dockerized /opt/mailcow-dockerized
cd /opt/mailcow-dockerized
# Сгенерирован конфиг (MAILCOW_HOSTNAME=mail.niikn.com, TZ=Europe/Moscow)
docker compose pull
docker compose up -d

UFW правила

Открытые порты: 22 (SSH), 25 (SMTP), 80 (HTTP), 443 (HTTPS), 465 (SMTPS), 587 (Submission), 993 (IMAPS), 995 (POP3S), 4190 (Sieve)

Доступ к веб-интерфейсу

  • URL: https://mail.niikn.com (внешний) или http://192.168.1.128 (локальный)
  • Логин: admin / moohoo (сброшен вручную, сменить после входа)

Важно: формат пароля admin в Mailcow

Mailcow хранит пароли admin в формате SSHA256 (Dovecot), а не bcrypt. При ручном сбросе пароля через БД использовать только doveadm pw:

cd /opt/mailcow-dockerized
# Сброс пароля admin через официальный скрипт (интерактивный):
bash helper-scripts/mailcow-reset-admin.sh

# Или вручную через doveadm + MySQL:
HASH=$(docker exec mailcowdockerized-dovecot-mailcow-1 doveadm pw -s SSHA256 -p "НовыйПароль" | tr -d '\r')
docker exec mailcowdockerized-mysql-mailcow-1 mysql -u mailcow -p<DBPASS> mailcow \
  -e "UPDATE admin SET password='${HASH}' WHERE username='admin';"

DBPASS находится в /opt/mailcow-dockerized/mailcow.conf (DBPASS=8VcUSgpKEOoxNojIZBRJx0FzMxzm)

Статус контейнеров

Все 18 контейнеров запущены: nginx, postfix, dovecot, rspamd, clamd, mysql, redis, unbound, sogo, php-fpm, acme, watchdog и др.

Что нужно сделать для завершения настройки

  1. DNS записи для niikn.com (у регистратора):
    • A mail.niikn.com → <белый IP>
    • MX niikn.com → mail.niikn.com (приоритет 10)
    • TXT niikn.com → v=spf1 mx ~all
    • TXT _dmarc.niikn.com → v=DMARC1; p=none; rua=mailto:admin@niikn.com
    • DKIM — получить после входа в Mailcow → Конфигурация → ARC/DKIM
  2. PTR запись (rDNS) — запросить у провайдера: <белый IP> → mail.niikn.com
  3. MikroTik — проброс портов 25, 80, 443, 465, 587, 993, 995, 4190 → 192.168.1.128
  4. Статическая DHCP-аренда на MikroTik для MAC BC:24:11:7E:B7:14 → 192.168.1.128
  5. Let's Encrypt — автоматически получит SSL после настройки DNS
  6. Сменить пароль admin в веб-интерфейсе

2026-02-25 — Проверка установки Nextcloud AIO (VM108)

Метод установки

  • Nextcloud AIO запущен через docker run с --label com.docker.compose.project=nextcloud-aioофициальный метод
  • Docker Compose файлов на системе нет
  • Mastercontainer (nextcloud-aio-mastercontainer) сам управляет остальными контейнерами через Docker socket (:ro)
  • Создан: 2026-02-21T10:09:26 — работает стабильно

Portainer

  • Работает на VM108 как отдельный контейнер (portainer/portainer-ce:latest)
  • Видит контейнеры AIO как «стек nextcloud-aio» (по label), но не создавал и не управляет ими
  • Имеет полный доступ к Docker socket — использовать только для мониторинга

Состояние контейнеров (проверено 2026-02-25)

Все 13 контейнеров AIO — healthy, uptime 40+ часов: apache, nextcloud, database, redis, fulltextsearch, onlyoffice, imaginary, talk, talk-recording, whiteboard, notify-push, docker-socket-proxy, mastercontainer

Важно

  • Управление Nextcloud AIO — только через https://new.niikn.com:8080 или docker exec -u www-data nextcloud-aio-nextcloud php occ
  • Никогда не перезапускать и не изменять контейнеры AIO через Portainer

2026-03-03 — Переименование бота НИИКН + SSH доступ

Переименование бота (LXC 133, 10.0.0.237)

  • Telegram: имя изменено с "Максимка" на "НИИКН помощник" (@maximka_assistant_bot)
  • Описание бота обновлено: "ИИ-помощник НИИКН"
  • IDENTITY.md: имя → "НИИКН помощник", эмодзи → 🏛️
  • SOUL.md полностью переписан:
    • Новое имя и инструкция представляться как "НИИКН помощник"
    • Добавлено ВАЖНОЕ ПРАВИЛО: перед любыми изменениями в инфраструктуре обязательно спрашивать подтверждение у администратора
    • Добавлена информация об инфраструктуре НИИКН (Proxmox, NC AIO, VPS, VM)
    • Сохранена ролевая модель доступа (admin vs сотрудники)
  • Сервис clawdbot перезапущен

SSH доступ бота к инфраструктуре НИИКН

  • Сгенерирован ключ ssh-ed25519 ...PzO3 niikn-helper@clawdbot-1 на LXC 133
  • Proxmox НИИКН (192.168.1.201): ключ добавлен, SSH работает
  • NC AIO VM (192.168.1.200): ключ записан в /root/.ssh/authorized_keys через монтирование LV диска на Proxmox. Заработает после перезагрузки VM (кэш ФС)
  • VPS 89.111.140.86: не используется в проекте НИИКН — пропущен

Примечание

VM 192.168.1.200 также добавлен cloud-init диск (ide0: local-lvm:vm-108-cloudinit) с SSH ключом — можно удалить если не нужен.


2026-03-03 — NC Talk: попытка HPB на VPS, откат

Проблема

Звонки через NC Talk не работали по сотовой сети (только по Wi-Fi/LAN).

Что было сделано на VPS 89.111.131.105

  1. Настроен HPB (signaling + Janus + coturn + NATS)
  2. TURNS на порту 443 с Let's Encrypt сертификатом (turn.niikn.com)
  3. Reverse proxy через NPM для signaling WebSocket
  4. Отключен HTTP/2 на NPM для niikn.com (баг NC Talk #2211)
  5. Оптимизации: expanded relay ports, full_trickle, maxstreambitrate=512Kbit/s

Результат

  • Десктоп: звонки работают <1 сек
  • Мобильные (сотовая): НЕ работает — баг iOS/Android Talk (ICE timeout, IPv6 ULA)

Откат

  • Все VPS сервисы остановлены и отключены
  • signaling_servers в NC Talk очищен
  • NPM signaling proxy удалён
  • HTTP/2 на NPM оставлен отключенным (улучшает Talk)

Текущее состояние Talk

  • Встроенный AIO сигнальный сервер работает: https://niikn.com/standalone-signaling/ (v2.1.0~docker)
  • signaling_servers в NC Talk ПУСТ — нужно перезапустить AIO контейнеры Talk
  • При перезапуске AIO автоматически пропишет signaling_servers с правильным shared secret

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

2026-03-03 — Настройка почтового сервера mail.niikn.com

Выполненные шаги

  1. MikroTik — проброс портов (192.168.1.1)

    • SSH: AI / OL260380eg
    • Проброшены порты 25, 465, 587, 993, 995, 4190 → 192.168.1.128 (Mailcow)
    • Порты 80/443 не тронуты — идут на NPM
  2. NPM — proxy host #17 (192.168.1.22)

    • Создан: mail.niikn.comhttps://192.168.1.128:443
    • SSL: Let's Encrypt (cert ID 50), ssl_forced=true
    • Mailcow сам обслуживает HTTPS — NPM проксирует на https backend
  3. DNS записи — Spaceweb API (vps.sweb.ru)

    • Логин: it5870yand / 1qaz!QAZ
    • API: POST https://api.sweb.ru/domains/dns (JSON-RPC, URL-encoded body)
    • Добавлены: MX (mail.niikn.com, pri 10), SPF, DMARC, DKIM
    • Все записи распространились и видны через Google/Cloudflare DNS
  4. Mailcow — домен и ящики (192.168.1.128)

    • Домен niikn.com — был уже добавлен
    • DKIM — был уже сгенерирован (selector=dkim, 2048-bit)
    • Ящик noreply@niikn.com — был уже создан, пароль установлен: NiIkN-NoReply-2026!
    • SMTP (587/STARTTLS) проверен — работает, тестовое письмо отправлено
  5. Пароль admin Mailcow

    • Изменён через API: POST /api/v1/edit/admin (X-API-Key: niikn-mailcow-api-2026)
    • Новый пароль: 1qaz!QAZ

Не выполнено

  • Nextcloud SMTP — нет SSH к VM 108, NC API не поддерживает mail_smtp* настройки
    • Настроить вручную: Администрирование → Email → SMTP 192.168.1.128:587, noreply@niikn.com
  • PTR (rDNS) — текущий: Aquatern.access.comstar.ru → нужен mail.niikn.com
    • Обратиться к провайдеру Комстар/МТС

Spaceweb DNS API — сценарий для повторного использования (dttb.ru)

Подробный скрипт: snippets/spaceweb-dns-api.py


Что ещё нужно сделать

  • Перезапустить AIO контейнеры Talk → восстановить signaling_servers
  • Настроить Groupfolders как полноценное приложение (в процессе — rsync идёт)
  • После rsync: создать Groupfolders, назначить права, scan (см. groupfolders-migration.md)
  • После rsync: удалить External Storage ID 4 и 5 (SMB пока не удалять)
  • Настроить AIO Backup на VM108
  • Настроить SMTP для уведомлений Nextcloud (mail.niikn.com готов, нужно вписать в NC вручную)
  • PTR запись: позвонить провайдеру Комстар/МТС, попросить установить PTR: 85.235.181.190mail.niikn.com (без PTR некоторые серверы могут отклонять письма)
  • Проверить работу пользователей на new.niikn.com
  • Решить судьбу Linkwarden и FileBrowser (переносить или нет)
  • Зафиксировать статический IP для VM100 (сейчас DHCP 192.168.1.245)
  • Проверить SSH бота к NC AIO после перезагрузки VM
  • Удалить cloud-init диск ide0 с VM 108 (если не нужен)
  • Установить и настроить Matrix на Proxmox НИИКН (VM 107 уже есть)
  • Настроить Element для Nextcloud (riotchat app) для внешних звонков