# Рекомендации по настройке Nextcloud Практическое руководство для развёртываний из этого репозитория (`docker/` и `native/`): важные настройки, расширение хранилища, HTTPS и работа со **своим SSL-сертификатом**. --- ## Содержание 1. [Первые шаги после установки](#1-первые-шаги-после-установки) 2. [Важные настройки администратора](#2-важные-настройки-администратора) 3. [Расширение хранилища](#3-расширение-хранилища) 4. [Производительность](#4-производительность) 5. [Безопасность](#5-безопасность) 6. [Email и уведомления](#6-email-и-уведомления) 7. [Полезные приложения](#7-полезные-приложения) 8. [Мониторинг и обслуживание](#8-мониторинг-и-обслуживание) 9. [Резервное копирование](#9-резервное-копирование) 10. [HTTPS и свой SSL-сертификат](#10-https-docker--напрямую-на-портах-8080--8443) 11. [Переустановка (Docker)](#11-переустановка-docker) 12. [Самoregистрация пользователей](#12-самoregистрация-пользователей) --- ## 1. Первые шаги после установки ### Проверка статуса **Docker:** ```bash cd nextcloud_install/docker ./status.sh docker compose exec -u www-data app php occ status ``` **Native:** ```bash cd nextcloud_install/native ./status.sh sudo -u www-data php /var/www/nextcloud/occ status ``` ### Что должно быть «зелёным» в админке Откройте **Настройки → Администрирование → Обзор** и убедитесь: | Проверка | Ожидание | |----------|----------| | Фоновые задачи | **Cron** (настроено скриптами установки) | | HTTPS | Включён для production | | Redis | Подключён | | Версия PHP | Поддерживаемая (см. [system requirements](https://docs.nextcloud.com/server/latest/admin_manual/installation/system_requirements.html)) | | Заголовки безопасности | Без критичных предупреждений | ### Доверенные домены В `.env` (Docker) или `native/.env` — значение с пробелами **в двойных кавычках**: ```env NEXTCLOUD_TRUSTED_DOMAINS="localhost 127.0.0.1 cloud.example.com" ``` Через CLI: ```bash 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` ```bash # Список пользователей 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, **не добавляет место на диске**. ```bash occ user:setting alice files quota 50GB ``` Или: **Настройки → Пользователи → квота**. --- ### Уровень 2: Расширение диска / тома (основной способ) Nextcloud использует каталог `data/` для файлов. Если на диске больше места — Nextcloud его увидит автоматически. #### Docker (`nextcloud_install/docker`) Данные по умолчанию в Docker volume **`nextcloud_app_data`**. **Посмотреть расположение:** ```bash 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. Скопировать данные: ```bash sudo mkdir -p /mnt/bigdisk/nextcloud-data sudo rsync -aH \ $(docker volume inspect nextcloud_app_data -f '{{.Mountpoint}}')/ \ /mnt/bigdisk/nextcloud-data/ ``` 4. В `.env` задайте путь: ```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 — перенести файлы в другое место (всё сохранить)** ```bash 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 остаются)** Подходит, если нужен «пустой диск» для файлов, но логины/настройки сохранить. ```bash 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)**. --- **Шпаргалка: что где лежит** — см. [§11. Переустановка (Docker)](#11-переустановка-docker). --- ```bash df -h /var/www/nextcloud/data du -sh /var/www/nextcloud/data ``` **Перенос на другой диск:** ```bash 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`: ```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** (только на новой установке или после полной миграции): ```php '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`) ### Дополнительный тюнинг ```bash 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:** ```bash 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](#10-https-и-свой-ssl-сертификат)) - [ ] Сильные пароли (в `.env` генерируются автоматически) - [ ] Двухфакторная аутентификация (2FA) - [ ] Регулярные обновления (`occ upgrade`) - [ ] Бэкапы (скрипты `backup.sh`) ### Режим обслуживания ```bash occ maintenance:mode --on # перед обновлением / восстановлением occ maintenance:mode --off ``` ### Server-side encryption Шифрование на стороне сервера **необратимо без ключей восстановления**. Включайте только если понимаете процедуру recovery key. ### Bruteforce Nextcloud блокирует IP при переборе паролей. Логи: ```bash occ security:bruteforce:attempts 203.0.113.10 ``` Дополнительно можно поставить **fail2ban** на Apache/Nginx. --- ## 6. Email и уведомления **Настройки → Основные → Сервер исходящей почты** Или в `config/config.php`: ```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', ``` Проверка: ```bash occ mail:test --account admin ``` --- ## 7. Полезные приложения ```bash 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. Мониторинг и обслуживание ```bash # Место на диске 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`** | Приложения из магазина | ### Скрипты этого репозитория ```bash # Docker cd nextcloud_install/docker && ./backup.sh # Native cd nextcloud_install/native && sudo ./backup.sh ``` Архивы сохраняются в **`NEXTCLOUD_BACKUP_DIR`** (по умолчанию `/var/nextcloud/backups/`). **Копируйте их на внешнее хранилище.** ### Восстановление ```bash ./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 ```bash 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) SSL настраивается в Apache на хосте — см. [example_ubuntu](https://docs.nextcloud.com/server/latest/admin_manual/installation/example_ubuntu.html). --- ## 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_` | `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/` и т.п. ```bash cd nextcloud_install/docker ./install.sh cloud.example.com # не sudo ./install.sh ``` ### Вариант A — полная переустановка (с нуля) Удаляются контейнеры, БД, код Nextcloud в volume. Пользователи и настройки **не сохраняются**. ```bash 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`** не трогаем: ```bash 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»: ```bash 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` для установки через браузер. Без флагов — только дополняет недостающие файлы и чинит права: ```bash ./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` — в кавычках: ```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/`** — пользователи создают аккаунт сами: ```bash 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). --- ## Связанные файлы репозитория | Файл | Назначение | |------|------------| | [README.md](README.md) | Установка Docker / Native | | `docker/.env` | Порт, домены, PHP-лимиты | | `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 | --- ## Полезные ссылки - [Администрирование Nextcloud](https://docs.nextcloud.com/server/latest/admin_manual/) - [System requirements](https://docs.nextcloud.com/server/latest/admin_manual/installation/system_requirements.html) - [External storage](https://docs.nextcloud.com/server/latest/admin_manual/configuration_files/external_storage_configuration_gui.html)