nextcloud-install/Recommendation.md

32 KiB
Raw Permalink Blame History

Рекомендации по настройке Nextcloud

Практическое руководство для развёртываний из этого репозитория (docker/ и native/):
важные настройки, расширение хранилища, HTTPS и работа со своим SSL-сертификатом.


Содержание

  1. Первые шаги после установки
  2. Важные настройки администратора
  3. Расширение хранилища
  4. Производительность
  5. Безопасность
  6. Email и уведомления
  7. Полезные приложения
  8. Мониторинг и обслуживание
  9. Резервное копирование
  10. HTTPS и свой SSL-сертификат
  11. Переустановка (Docker)
  12. Самoregистрация пользователей
  13. Native (экспериментально)
  14. Collabora и Talk

1. Первые шаги после установки

Проверка статуса

Docker:

cd nextcloud_install/docker
./status.sh
docker compose exec -u www-data app php occ status

Ручной docker compose: работайте из каталога docker/ или задайте COMPOSE_FILE.
Если включён HTTPS (есть файл .ssl-enabled), нужны оба compose-файла:

cd nextcloud_install/docker
export COMPOSE_FILE="$(pwd)/docker-compose.yml:$(pwd)/docker-compose.ssl.yml"
docker compose exec -u www-data app php occ status

Без этого — ошибка no configuration file provided: not found.
Скрипты (install.sh, start.sh, …) подставляют COMPOSE_FILE автоматически.

Native:

cd nextcloud_install/native
./status.sh
sudo -u www-data php /var/www/nextcloud/occ status

Что должно быть «зелёным» в админке

Откройте Настройки → Администрирование → Обзор и убедитесь:

Проверка Ожидание
Фоновые задачи Cron (настроено скриптами установки)
HTTPS Включён для production
Redis Подключён
Версия PHP Поддерживаемая (см. system requirements)
Заголовки безопасности Без критичных предупреждений

Доверенные домены

В .env (Docker) или native/.env — значение с пробелами в двойных кавычках:

NEXTCLOUD_TRUSTED_DOMAINS="localhost 127.0.0.1 cloud.example.com"

Через CLI:

occ config:system:set trusted_domains 0 --value="localhost"
occ config:system:set trusted_domains 1 --value="127.0.0.1"
occ config:system:set trusted_domains 2 --value="cloud.example.com"

2. Важные настройки администратора

Разделы админ-панели

Раздел Назначение
Обзор Диагностика, предупреждения
Безопасность и параметры входа 2FA, политика паролей, bruteforce
Общие URL сервера, язык, лимиты
Хранилище Квоты пользователей и групп
Основные параметры сервера Email, логирование
Приложения Установка расширений

Часто используемые команды occ

# Список пользователей
occ user:list

# Создать пользователя
occ user:add bob --password-from-env
# (предварительно: export OC_PASS='...')

# Квота 50 GB
occ user:setting bob files quota 50GB

# Без лимита
occ user:setting bob files quota none

# Просмотр системных настроек
occ config:list system

# Проверка обновлений
occ update:check
occ upgrade

Docker: docker compose exec -u www-data app php occ …
Native: sudo -u www-data php /var/www/nextcloud/occ …


3. Расширение хранилища

Уровень 1: Квота пользователя (не физический диск)

Ограничивает пользователя в Nextcloud, не добавляет место на диске.

occ user:setting alice files quota 50GB

Или: Настройки → Пользователи → квота.


Уровень 2: Расширение диска / тома (основной способ)

Nextcloud использует каталог data/ для файлов. Если на диске больше места — Nextcloud его увидит автоматически.

Docker (nextcloud_install/docker)

Данные по умолчанию в Docker volume nextcloud_app_data.

Посмотреть расположение:

docker volume inspect nextcloud_app_data
df -h $(docker volume inspect nextcloud_app_data -f '{{.Mountpoint}}')

Варианты:

Способ Когда
Увеличить диск VPS/VM Облако
Расширить LVM/partition lvextend + resize2fs
Bind mount на большой раздел Нужен явный путь на хосте

Перенос data на отдельный диск (bind mount):

  1. ./backup.sh
  2. ./stop.sh
  3. Скопировать данные:
    sudo mkdir -p /mnt/bigdisk/nextcloud-data
    sudo rsync -aH \
      $(docker volume inspect nextcloud_app_data -f '{{.Mountpoint}}')/ \
      /mnt/bigdisk/nextcloud-data/
    
  4. В .env задайте путь:
    NEXTCLOUD_DATADIR=/mnt/bigdisk/nextcloud-data
    
  5. ./start.sh

После bind mount файлы пользователей лежат на хосте в каталоге из NEXTCLOUD_DATADIR.

Перенос data ещё раз или очистка и запуск в новом месте (Docker)

Файлы пользователей — это каталог на хосте из NEXTCLOUD_DATADIR (сейчас по умолчанию /mnt/hgfs/nextcloud_data).
Пользователи, shares и метаданные — в MariaDB. Код Nextcloud — в volume nextcloud_app_data.


Сценарий A — перенести файлы в другое место (всё сохранить)

cd nextcloud_install/docker

# 1. Бэкап (рекомендуется)
./backup.sh

# 2. Остановить стек
./stop.sh

# 3. Скопировать data из старого пути в новый
OLD=/mnt/hgfs/nextcloud_data          # текущий NEXTCLOUD_DATADIR
NEW=/mnt/bigdisk/nextcloud_data       # новый путь

sudo mkdir -p "$NEW"
sudo rsync -aH "$OLD/" "$NEW/"
sudo chown -R 33:33 "$NEW"

# 4. Обновить .env
# NEXTCLOUD_DATADIR=/mnt/bigdisk/nextcloud_data

# 5. Запустить
./start.sh

# 6. Пересканировать файлы
docker compose exec -u www-data app php occ files:scan --all

Старый каталог $OLD можно удалить после проверки, что Nextcloud открывается и файлы на месте.


Сценарий B — очистить файлы и указать новое пустое место (пользователи в Nextcloud остаются)

Подходит, если нужен «пустой диск» для файлов, но логины/настройки сохранить.

cd nextcloud_install/docker
./stop.sh

# Новый пустой каталог
NEW=/mnt/newdisk/nextcloud_data
sudo rm -rf "$NEW"/* "$NEW"/.[!.]* 2>/dev/null || true
sudo mkdir -p "$NEW"
sudo chown -R 33:33 "$NEW"

# .env → NEXTCLOUD_DATADIR=/mnt/newdisk/nextcloud_data

./start.sh
docker compose exec -u www-data app php occ maintenance:mode --on
docker compose exec -u www-data app php occ files:scan --all
docker compose exec -u www-data app php occ maintenance:repair
docker compose exec -u www-data app php occ maintenance:mode --off

В веб-интерфейсе старые файлы могут ещё отображаться как «отсутствующие» — это записи в БД.
Чтобы убрать их полностью, удалите файлы через UI или очистите БД (сценарий C).


Сценарий C — полный сброс (чистый Nextcloud с нуля)

Удаляются контейнеры, Docker volumes (БД, код Nextcloud) и создаётся новая установка.
Подробные шаги — в разделе 11. Переустановка (Docker).


Шпаргалка: что где лежит — см. §11. Переустановка (Docker).


df -h /var/www/nextcloud/data
du -sh /var/www/nextcloud/data

Перенос на другой диск:

sudo ./backup.sh
sudo systemctl stop apache2

sudo mkdir -p /mnt/bigdisk/nextcloud-data
sudo rsync -aH /var/www/nextcloud/data/ /mnt/bigdisk/nextcloud-data/

# Вариант A: symlink
sudo mv /var/www/nextcloud/data /var/www/nextcloud/data.old
sudo ln -s /mnt/bigdisk/nextcloud-data /var/www/nextcloud/data

# Вариант B: правка config.php (предпочтительнее)
# 'datadirectory' => '/mnt/bigdisk/nextcloud-data',

sudo chown -R www-data:www-data /mnt/bigdisk/nextcloud-data
sudo systemctl start apache2

В config/config.php:

'datadirectory' => '/mnt/bigdisk/nextcloud-data',

Уровень 3: Внешнее хранилище

Приложения → External storage support

Тип Применение
Local Доп. папка на сервере (/mnt/archive)
S3 / MinIO Объектное хранилище
SFTP / SMB Сетевые шары
Primary storage (S3) Все файлы сразу в S3 (сложная настройка)

Для архива и редко используемых файлов — external storage.
Для основного объёма — расширение data/ или S3 primary storage.

S3 primary storage (только на новой установке или после полной миграции):

'objectstore' => [
  'class' => '\\OC\\Files\\ObjectStore\\S3',
  'arguments' => [
    'bucket' => 'nextcloud',
    'key' => 'ACCESS_KEY',
    'secret' => 'SECRET_KEY',
    'hostname' => 's3.example.com',
    'port' => 443,
    'use_ssl' => true,
    'region' => 'us-east-1',
  ],
],

Схема выбора

Нужно больше места?
│
├─ Ограничить пользователя → occ user:setting … quota
│
├─ Закончился диск сервера → расширить раздел / volume
│
├─ Есть второй диск → bind mount / datadirectory
│
└─ Облако / S3 → External storage или S3 primary

4. Производительность

Уже настроено скриптами установки

  • Redis — распределённый кэш и блокировки
  • Cron — фоновые задачи каждые 5 минут
  • PHP — лимиты в .env (PHP_MEMORY_LIMIT, PHP_UPLOAD_LIMIT)

Дополнительный тюнинг

occ config:system:set memcache.local --value="\OC\Memcache\APCu"
occ config:system:set memcache.distributed --value="\OC\Memcache\Redis"
occ config:system:set memcache.locking --value="\OC\Memcache\Redis"
Параметр Рекомендация
PHP_MEMORY_LIMIT 512M–1024M
PHP_UPLOAD_LIMIT По max. размеру файлов (напр. 10G)
Preview Generator App для предгенерации миниатюр
occ files:scan После переноса data

Preview Generator:

occ app:install previewgenerator
occ config:app:set previewgenerator squareSizes --value="256 512"
occ config:system:set enable_previews --value=true --type=boolean

5. Безопасность

Минимум для production

  • HTTPS (см. раздел 10)
  • Сильные пароли (в .env генерируются автоматически)
  • Двухфакторная аутентификация (2FA)
  • Регулярные обновления (occ upgrade)
  • Бэкапы (скрипты backup.sh)

Режим обслуживания

occ maintenance:mode --on    # перед обновлением / восстановлением
occ maintenance:mode --off

Server-side encryption

Шифрование на стороне сервера необратимо без ключей восстановления.
Включайте только если понимаете процедуру recovery key.

Bruteforce

Nextcloud блокирует IP при переборе паролей. Логи:

occ security:bruteforce:attempts 203.0.113.10

Дополнительно можно поставить fail2ban на Apache/Nginx.


6. Email и уведомления

Настройки → Основные → Сервер исходящей почты

Или в config/config.php:

'mail_smtpmode' => 'smtp',
'mail_smtphost' => 'smtp.example.com',
'mail_smtpport' => 587,
'mail_smtpsecure' => 'tls',
'mail_smtpauth' => 1,
'mail_smtpname' => 'nextcloud@example.com',
'mail_smtppassword' => 'secret',
'mail_from_address' => 'nextcloud',
'mail_domain' => 'example.com',

Проверка:

occ mail:test --account admin

7. Полезные приложения

occ app:list
occ app:install groupfolders
occ app:install previewgenerator
Приложение Назначение
Group folders Общие папки для команд
External storage S3, SMB, SFTP
Preview generator Быстрые превью
Quota warning Уведомления о заполнении
Calendar / Contacts CalDAV / CardDAV
Office Collabora / ONLYOFFICE

8. Мониторинг и обслуживание

# Место на диске
df -h

# Docker: размер data
du -sh $(docker volume inspect nextcloud_app_data -f '{{.Mountpoint}}')

# Native
du -sh /var/www/nextcloud/data

# Пересканировать файлы (после переноса)
occ files:scan --all

# Статус
occ status

В админке: Настройки → Системная информация.


9. Резервное копирование

Что обязательно бэкапить

Компонент Содержимое
База данных Пользователи, метаданные, shares
NEXTCLOUD_DATADIR Файлы пользователей
NEXTCLOUD_CONFIG_DIR config.php и фрагменты настроек
NEXTCLOUD_APPDATA App Store, превью, аватары
NEXTCLOUD_CUSTOM_APPS Приложения из магазина

Скрипты этого репозитория

# Docker
cd nextcloud_install/docker && ./backup.sh

# Native
cd nextcloud_install/native && sudo ./backup.sh

Архивы сохраняются в NEXTCLOUD_BACKUP_DIR (по умолчанию /var/nextcloud/backups/).
Копируйте их на внешнее хранилище.

Восстановление

./restore.sh backups/nextcloud_*_YYYY-MM-DD_*.tar.gz

Рекомендуемая периодичность

Тип Частота
Полный бэкап Ежедневно
Проверка restore Раз в квартал на тестовой машине
Offsite-копия Сразу после бэкапа (rsync, S3, Borg и т.д.)

10. HTTPS (Docker — напрямую на портах 8080 / 8443)

Reverse proxy не используется. Nextcloud доступен напрямую:

Порт Протокол Назначение
8080 HTTP NEXTCLOUD_PORT в .env
8443 HTTPS NEXTCLOUD_HTTPS_PORT, сертификат внутри Docker

Включить HTTPS в Docker

cd nextcloud_install/docker
cp /path/to/fullchain.pem certs/
cp /path/to/privkey.pem   certs/
./enable-docker-ssl.sh your.domain

Скрипт монтирует certs/ в контейнер и настраивает Apache + mod_ssl.

Отключить: ./disable-docker-ssl.sh

Native (без Docker)

См. §13 Native (экспериментально) — вариант не отлаживался в этом репозитории.

SSL настраивается в Apache на хосте — см. example_ubuntu.


11. Переустановка (Docker)

Каталог nextcloud_install — только скрипты развёртывания.
Все данные Nextcloud лежат вне него, пути задаются в .env (при ./install.sh скрипт спросит их интерактивно).

Что где хранится

Переменная в .env Содержимое По умолчанию
NEXTCLOUD_CONFIG_DIR config.php, настройки /var/nextcloud/config
NEXTCLOUD_DATADIR Файлы пользователей /mnt/hgfs/nextcloud_data
NEXTCLOUD_APPDATA App Store, превью, аватары /var/nextcloud/appdata
NEXTCLOUD_CUSTOM_APPS Приложения из магазина /var/nextcloud/custom_apps
NEXTCLOUD_BACKUP_DIR Архивы ./backup.sh /var/nextcloud/backups
NEXTCLOUD_INSTANCEID ID экземпляра (для mount appdata_*) генерируется в .env

В контейнере:

Путь в контейнере Источник
/var/www/html/config NEXTCLOUD_CONFIG_DIR
/var/www/html/data NEXTCLOUD_DATADIR
/var/www/html/data/appdata_<ID> NEXTCLOUD_APPDATA
/var/www/html/custom_apps NEXTCLOUD_CUSTOM_APPS

Docker volumes (удаляются при --purge): nextcloud_db_data (MariaDB), nextcloud_app_data (код Nextcloud), nextcloud_redis_data.

Важно перед установкой

Запускайте скрипты БЕЗ sudo: ./install.sh, ./start.sh, ./stop.sh.
Скрипт сам запросит sudo только для создания каталогов в /var/nextcloud/ и т.п.

cd nextcloud_install/docker
./install.sh cloud.example.com   # не sudo ./install.sh

Вариант A — полная переустановка (с нуля)

Удаляются контейнеры, БД, код Nextcloud в volume. Пользователи и настройки не сохраняются.

cd nextcloud_install/docker

./backup.sh                    # по желанию
./stop.sh
./uninstall.sh --purge         # ответ: yes

# Очистить данные на хосте (если нужен чистый старт)
sudo rm -rf /var/nextcloud/appdata/* /var/nextcloud/custom_apps/*
# sudo rm -rf /mnt/hgfs/nextcloud_data/*   # только если файлы пользователей не нужны

rm -f .env
./setup-env.sh cloud.example.com
./install.sh cloud.example.com   # спросит пути; Enter = значения по умолчанию
./enable-docker-ssl.sh cloud.example.com

После ./setup-env.sh запишите пароль admin из вывода (он же в .env → NEXTCLOUD_ADMIN_PASSWORD).

Вариант B — переустановка с сохранением файлов пользователей

БД и config сбрасываются, но каталог NEXTCLOUD_DATADIR не трогаем:

cd nextcloud_install/docker
./backup.sh
./stop.sh
./uninstall.sh --purge
rm -f .env
./setup-env.sh cloud.example.com
./install.sh cloud.example.com
# NEXTCLOUD_DATADIR оставить тот же путь, что был раньше
./enable-docker-ssl.sh cloud.example.com

docker compose exec -u www-data app php occ files:scan --all

Вариант C — только пересоздать config

Если config повреждён, нет прав, или в браузере «нужен CAN_INSTALL»:

cd nextcloud_install/docker

# Полный сброс config + переустановка через occ (рекомендуется)
./restore-config.sh --force

# Или сброс + веб-мастер в браузере (создаёт CAN_INSTALL)
./restore-config.sh --web

--force — очистит NEXTCLOUD_CONFIG_DIR, восстановит шаблоны, выставит права www-data и запустит occ maintenance:install.

--web — то же, но вместо occ создаёт файл CAN_INSTALL для установки через браузер.

Без флагов — только дополняет недостающие файлы и чинит права:

./restore-config.sh

Что делает ./uninstall.sh --purge

--purge удаляет Docker volumes с БД и кодом Nextcloud. Чтобы следующая установка не падала в ошибку «нужен CAN_INSTALL», скрипт также делает backup старого config.php и удаляет активный config.php. Остальные файлы и каталоги на хосте остаются.

Удаляется Не удаляется
Контейнеры Docker NEXTCLOUD_CONFIG_DIR (кроме активного config.php)
Volume nextcloud_db_data NEXTCLOUD_DATADIR
Volume nextcloud_app_data NEXTCLOUD_APPDATA
Volume nextcloud_redis_data NEXTCLOUD_CUSTOM_APPS
Файл .env (только если удалите вручную) NEXTCLOUD_BACKUP_DIR

Важно после переустановки

  1. Доверенные домены в .env — в кавычках:
    NEXTCLOUD_TRUSTED_DOMAINS="localhost 127.0.0.1 cloud.example.com"
    
  2. HTTPS: ./enable-docker-ssl.sh your.domain (порт 8443).
  3. register-ui / admin-ui: обновите NEXTCLOUD_URL в их .env.
  4. App Store: appdata должен быть на локальном диске, не на hgfs (NEXTCLOUD_APPDATA).

Типичные проблемы

Симптом Решение
Permission denied при записи config ./restore-config.sh --force
Нет config.php ./restore-config.sh --force
«Нужен CAN_INSTALL» в браузере ./restore-config.sh --force или ./restore-config.sh --web
Нет прав на config ./restore-config.sh --force (sudo для chown www-data)
Failed opening required .../lib/versioncheck.php Запустите ./start.sh: скрипт пересоздаст битый nextcloud_app_data
«Центр приложений» не открывается Проверьте права на NEXTCLOUD_APPDATA, каталог не на hgfs
Trusted domains не работают Проверьте кавычки в .env вокруг NEXTCLOUD_TRUSTED_DOMAINS

12. Самoregистрация пользователей

Страница register-ui/ — пользователи создают аккаунт сами:

cd nextcloud_install/register-ui
chmod +x start.sh
./start.sh

Откройте http://ваш-сервер:3001

Настройка в register-ui/.env:

Переменная Описание
NEXTCLOUD_URL https://host:8443 или http://host:8080
REGISTRATION_ADMIN_USER admin (создаёт пользователей через API)
REGISTRATION_ADMIN_PASSWORD пароль admin
DEFAULT_QUOTA квота новых пользователей (5GB, none)
REGISTRATION_ENABLED true / false
ALLOWED_EMAIL_DOMAINS опционально: company.com

Админ-панель для управления всеми пользователями: admin-ui/ (порт 3000).


13. Native (экспериментально)

Каталог native/ — установка Nextcloud напрямую в ОС (Apache + MariaDB + PHP + Redis на Ubuntu/Debian).

В этом репозитории native-вариант не отлаживался.
Скрипты могут работать, но не проходили полный цикл тестирования, переустановки и интеграции с Collabora/Talk/register-ui.
Для production используйте docker/.

Что есть

Скрипт Назначение
native/install.sh Установка пакетов, БД, Nextcloud
native/setup-env.sh Генерация .env
native/backup.sh / restore.sh Бэкапы
native/uninstall.sh Удаление
native/templates/ Apache vhost/subdir, PHP, cron

Ожидаемые отличия от Docker

Аспект Docker Native
Запуск ./install.sh без sudo sudo ./install.sh
HTTPS ./enable-docker-ssl.sh (:8443) Apache + certbot/Let's Encrypt на хосте
Данные Пути в docker/.env NEXTCLOUD_INSTALL_DIR (по умолчанию /var/www/nextcloud)
БД / Redis Контейнеры Системные сервисы
occ docker compose exec -u www-data app php occ … sudo -u www-data php /var/www/nextcloud/occ …

Если всё же используете native

  1. Прочитайте native/.env.example и задайте NEXTCLOUD_DOMAIN, APACHE_MODE (vhost / subdir).
  2. SSL — по официальной инструкции Ubuntu.
  3. После установки проверьте cron, Redis, trusted domains — как в §1.
  4. register-ui / admin-ui — укажите NEXTCLOUD_URL на ваш Apache URL.

При проблемах рекомендуется перейти на docker/ — там описаны типичные ошибки и recovery-скрипты (§11).


14. Collabora и Talk

Эти компоненты не входят в базовую установку и настраиваются отдельно.

Collabora (Nextcloud Office)

Приложения: richdocuments + richdocumentscode (Built-in CODE server).

После установки проверьте WOPI URL — он должен совпадать с тем, как пользователи заходят в Nextcloud:

cd nextcloud_install/docker
docker compose exec -u www-data app php occ config:app:get richdocuments wopi_url

Пример для HTTPS на :8443:

docker compose exec -u www-data app php occ config:app:set richdocuments wopi_url \
  --value="https://cloud.example.com:8443/custom_apps/richdocumentscode/proxy.php?req="
docker compose exec -u www-data app php occ richdocuments:activate-config

appdata (NEXTCLOUD_APPDATA) должен быть на локальном диске, не на hgfs/NFS — иначе App Store и Collabora могут падать.

Talk — High Performance Backend (HPB)

Сообщение «Еще не настроен сервер высокой нагрузки для talk» — это предупреждение, не ошибка.
Talk работает и без HPB, но для групповых звонков (4+ участников) нужен отдельный сервис:

  • образ ghcr.io/nextcloud-releases/aio-talk:latest
  • поддомен signaling (например signal.example.com) с WebSocket
  • порты 3478/tcp+udp (TURN) снаружи

Настройка в Настройки → Администрирование → Talk или через occ config:app:set spreed ….

Для HPB нужен один стабильный canonical URL Nextcloud (overwrite.cli.url), даже если обычный веб-доступ идёт по IP или другому имени.

Circles / «Личная информация»

Ошибка FederatedUser is not complete на странице профиля обычно лечится корректным overwrite.cli.url:

docker compose exec -u www-data app php occ config:system:set overwrite.cli.url \
  --value="https://cloud.example.com:8443"
docker compose exec -u www-data app php occ maintenance:repair

Связанные файлы репозитория

Файл / каталог Назначение
README.md Установка Docker / Native, структура docker/
lib/common.sh Общая логика compose, config, прав
docker/.env Порт, домены, пути хранения, пароли
docker/config.defaults/ Шаблоны фрагментов config
docker/docker-compose.yml MariaDB + Redis + app + cron
docker/docker-compose.ssl.yml Overlay HTTPS (:8443)
native/.env Путь установки, домен Apache (не отлажено)
docker/backup.sh / native/backup.sh Резервные копии
docker/restore-config.sh Восстановление config после сбоя
docker/uninstall.sh --purge Удаление стека (см. §11)
register-ui/ Самoregистрация пользователей
admin-ui/ Управление пользователями (admin)
docker/enable-docker-ssl.sh HTTPS на порту 8443

Полезные ссылки