14 KiB
NIIKN — Журнал изменений
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-24–25 — Миграция пользователей VM100 → VM108
Метод
- Скопированы хэши паролей из БД VM100 (PostgreSQL) → VM108 одним запросом
- Файлы перенесены через
rsync -a --rsync-path="sudo rsync"по SSH - После переноса —
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 и др.
Что нужно сделать для завершения настройки
- DNS записи для niikn.com (у регистратора):
A mail.niikn.com → <белый IP>MX niikn.com → mail.niikn.com (приоритет 10)TXT niikn.com → v=spf1 mx ~allTXT _dmarc.niikn.com → v=DMARC1; p=none; rua=mailto:admin@niikn.com- DKIM — получить после входа в Mailcow → Конфигурация → ARC/DKIM
- PTR запись (rDNS) — запросить у провайдера:
<белый IP> → mail.niikn.com - MikroTik — проброс портов 25, 80, 443, 465, 587, 993, 995, 4190 → 192.168.1.128
- Статическая DHCP-аренда на MikroTik для MAC
BC:24:11:7E:B7:14→ 192.168.1.128 - Let's Encrypt — автоматически получит SSL после настройки DNS
- Сменить пароль 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
Что ещё нужно сделать
- Настроить 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)