# Nextcloud AIO dttb.ru (VM 250, 10.0.0.230)

## Общее
- URL: https://dttb.ru, login: admin / 1qaz!QAZ
- WebDAV: https://dttb.ru/remote.php/dav/files/admin/
- Nextcloud AIO v12.6.1, Nextcloud 32.0.6
- VM 250 на Proxmox HomeLab (10.0.0.250)
- 4 sockets x 2 cores = 8 vCPU, 16GB RAM, 100GB disk (65% used)
- Ubuntu, cloud-init, QEMU guest agent НЕ установлен
- SSH: cloud / 1qaz!QAZ (sudo через echo pipe: `echo '1qaz!QAZ' | sudo -S ...`)
- SSH root НЕ работает, ключ НЕ настроен
- Для SSH через sshpass нужно: `-o PreferredAuthentications=password` (иначе fail)

## AIO Management
- URL: https://10.0.0.230:8080 (HTTPS обязательно)
- Passphrase: raider baguette muster nanometer disallow hypnotism rut dreamless
- AIO_TOKEN: 7e40792bc68c4ce81d0588a89fa883fed1ab2b3347a1781c
- AIO_URL: 10.0.0.230:8080 (исправлено 2026-03-07, было localhost:8080)
- Патч isLoginAllowed(): return true (позволяет логин по IP при работающем NC)
  - Файл: /var/www/docker-aio/php/src/Docker/DockerActionManager.php
  - ВНИМАНИЕ: патч сбрасывается при обновлении mastercontainer
- Конфиг: /mnt/docker-aio-config/data/configuration.json (внутри mastercontainer)
  - Также: /var/lib/docker/volumes/nextcloud_aio_mastercontainer/_data/data/configuration.json (на хосте)

## NPM proxy
- NPM proxy host ID:1 — dttb.ru -> http://10.0.0.230:11001

## Docker контейнеры
- nextcloud-aio-mastercontainer (порты 80, 8080, 8443, 9000)
- nextcloud-aio-apache (порт 11001)
- nextcloud-aio-nextcloud
- nextcloud-aio-database (PostgreSQL)
- nextcloud-aio-redis
- nextcloud-aio-onlyoffice
- nextcloud-aio-imaginary
- nextcloud-aio-whiteboard
- nextcloud-aio-notify-push
- nextcloud-aio-talk (порт 3479)
- nextcloud-aio-talk-recording
- nextcloud-aio-watchtower

## Конфигурация (из configuration.json)
- domain: dttb.ru
- apache_port: 11001
- talk_port: 3479
- nextcloud_datadir: /mnt/ncdata
- nextcloud_mount: /mnt/
- upload_limit: 16G
- memory_limit: 2048M
- max_time: 3600
- isOnlyofficeEnabled: true
- isImaginaryEnabled: true
- isWhiteboardEnabled: true
- isTalkEnabled: false (Talk отключен в AIO, но контейнер talk работает — legacy?)
- isCollaboraEnabled: false
- isClamavEnabled: false

## Секреты
- NEXTCLOUD_PASSWORD: 5752c16a373b465100050053e8c5805d0b40bcc20a28f59d
- ONLYOFFICE_SECRET: 84b288f6182489c3a39d109c39e11c320f610c2c9d9d3da6
- TURN_SECRET: c86fd98e4db4cba78c8b512d570d91993cc36ee999e59868
- REDIS_PASSWORD: df04c3de5d838cb263b82489d12864ec146a4389ac43227e
- DATABASE_PASSWORD: 9410ae9648674eff97f37108f770e9e63dc2136964af3f33
- BORGBACKUP_PASSWORD: 666fbf2cd2fb7633f34369a4736bfdb0b7280aef82648d94

## Почта (2026-03-07)
- Системная почта: support@dttb.ru через mail.dttb.ru:587 STARTTLS
- Mail app: аккаунт support@dttb.ru (IMAP mail.dttb.ru:993 SSL, SMTP mail.dttb.ru:587 STARTTLS)
- SSL: LE-сертификат скопирован с NPM (cert ID:106) на Mailcow
- Cron: /opt/sync-le-cert.sh на Mailcow — ежедневно 04:00 синхронизирует LE cert с NPM
- DNS override: mail.dttb.ru → 10.0.0.107 на OpenWrt (dnsmasq domain record)
- app.mail.verify-tls-peer=true (LE cert валидный)

## Home Assistant интеграция (2026-03-07)
- Приложение: integration_homeassistant v0.0.7
- HA URL: http://10.0.0.155:8123 (VM 127, haos-17.0)
- HA user: dttb / 1qaz!QAZ
- Long-Lived Access Token (365 дней, имя "Nextcloud Integration"):
  eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiI3OTgyNzZmZGE3OWM0ODgxYWU1ZGJjMWMwYTNhOWM0ZiIsImlhdCI6MTc3Mjg4OTQ4NywiZXhwIjoxODA0NDI1NDg3fQ.c_6wHfui9YJEtUJoJwbHsMnBzHET-pjEPSWqrthcH18
- Виджет "Умный дом" (Jinja2 template, обновление 60 сек):
  погода, присутствие, iPhone батарея/локация, восход/закат, NC статистика (диск/RAM/CPU/онлайн)
- Виджет "Устройства" (YAML, WebSocket real-time):
  медиаплееры (Спальня, VLC), камеры PVZ (6 датчиков движения), NC бинарные сенсоры
- 170 сущностей в HA: 70 sensors, 24 cameras, 39 device_trackers, 14 binary_sensors, 2 media_players, 1 weather
- NPM proxy: home.dttb.ru → http://10.0.0.155:8123 (proxy host #16)

## Troubleshooting (2026-03-07)
- Контейнеры остановились при обновлении, OnlyOffice был удалён
- Nextcloud зависал на "Waiting for OnlyOffice to become available..."
- Решение: через AIO API включить OnlyOffice, затем Stop+Start через AIO
- AIO login блокируется при работающем Apache — патч isLoginAllowed() или docker stop apache
- AIO_URL передаётся как env при создании контейнера — для обновления нужен Stop+Start через AIO
- spreed (Talk) удаляется при перезапуске если isTalkEnabled=false

## SSH команды (шаблоны)
```bash
# SSH подключение
sshpass -p '1qaz!QAZ' ssh -o StrictHostKeyChecking=no -o PreferredAuthentications=password cloud@10.0.0.230

# Docker через sudo
python3 << 'PYEOF'
import subprocess
cmd = ['sshpass', '-p', '1qaz!QAZ', 'ssh', '-o', 'StrictHostKeyChecking=no', '-o', 'PreferredAuthentications=password', 'cloud@10.0.0.230']
commands = "echo '1qaz!QAZ' | sudo -S docker ps -a --format '{{.Names}} | {{.Status}}' 2>&1 | grep -v 'пароль для'"
result = subprocess.run(cmd + [commands], capture_output=True, text=True, timeout=15)
print(result.stdout)
PYEOF
```
