niikn: добавлен журнал изменений и обновлён README с инфраструктурой
This commit is contained in:
@@ -1 +1,41 @@
|
|||||||
# Проект НИИКН
|
# Проект НИИКН
|
||||||
|
|
||||||
|
## Инфраструктура
|
||||||
|
|
||||||
|
| Компонент | IP | Описание |
|
||||||
|
|-----------|-----|----------|
|
||||||
|
| Proxmox | 192.168.1.201 | root / 1qaz!QAZ |
|
||||||
|
| VM108 — Nextcloud AIO | 192.168.1.200 | new.niikn.com, cloud user |
|
||||||
|
| VM106 — Mailcow | 192.168.1.128 | mail.niikn.com, cloud / 1qaz!QAZ |
|
||||||
|
| VM100 — Старый Nextcloud | 192.168.1.245 (DHCP) | NC 30.0.10, источник миграции |
|
||||||
|
| LXC 110 — SMB | 192.168.1.79 | admin / 1qaz!QAZ |
|
||||||
|
| NPM | 192.168.1.22 | Nginx Proxy Manager |
|
||||||
|
| MikroTik | 192.168.1.1 | Основной роутер |
|
||||||
|
|
||||||
|
## Сервисы
|
||||||
|
|
||||||
|
- **Nextcloud AIO** — `https://new.niikn.com`, управление: `https://new.niikn.com:8080`
|
||||||
|
- **Mailcow** — `https://mail.niikn.com`, admin / moohoo (сменить!)
|
||||||
|
- **SMB** — `//192.168.1.79/share`, смонтирован на VM108 как `/mnt/ncsmb`
|
||||||
|
|
||||||
|
## Ключевые файлы на VM108
|
||||||
|
|
||||||
|
- `/etc/fstab` — монтирование SMB (`//192.168.1.79/share /mnt/ncsmb`)
|
||||||
|
- `/etc/samba/smb-niikn.creds` — учётные данные SMB
|
||||||
|
- `/home/cloud/setup-firewall.sh` — скрипт UFW
|
||||||
|
|
||||||
|
## Ключевые файлы на VM106 (Mailcow)
|
||||||
|
|
||||||
|
- `/opt/mailcow-dockerized/mailcow.conf` — конфиг Mailcow
|
||||||
|
- DBPASS=8VcUSgpKEOoxNojIZBRJx0FzMxzm
|
||||||
|
|
||||||
|
## Сброс пароля admin в Mailcow
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /opt/mailcow-dockerized
|
||||||
|
bash helper-scripts/mailcow-reset-admin.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
## Файлы
|
||||||
|
|
||||||
|
- [changelog.md](changelog.md) — полный журнал изменений
|
||||||
|
|||||||
268
projects/niikn/changelog.md
Normal file
268
projects/niikn/changelog.md
Normal file
@@ -0,0 +1,268 @@
|
|||||||
|
# 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
|
||||||
|
|
||||||
|
### Метод
|
||||||
|
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
|
||||||
|
|
||||||
|
**Монтирование:**
|
||||||
|
```bash
|
||||||
|
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/ГИКЭ_ВОКН_Москва` | НИИКН |
|
||||||
|
|
||||||
|
Команды создания:
|
||||||
|
```bash
|
||||||
|
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 (официальный репозиторий)
|
||||||
|
```bash
|
||||||
|
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 установка
|
||||||
|
```bash
|
||||||
|
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`:
|
||||||
|
```bash
|
||||||
|
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
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Что ещё нужно сделать
|
||||||
|
|
||||||
|
- [ ] Настроить 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)
|
||||||
Reference in New Issue
Block a user