Nextcloud – целая платформа(набор программ) для хранения любых данных на собственном NAS. Позволяет полностью избавиться от Гугла и прочих корпораций, которые в той или иной мере используют ваши данные для аналитики, статистики, показа рекламы и прочих неприемлемых, по моему мнению, действий.

Введение

В данной инструкции мы развернем Nextcloud версию на Apache,

Из официального репозитория – nextcloud:production-apache или авторского myunraid/nextcloud:production-apache.

Отличается авторский от официального, только лишь наличием дополнительных надстроек в виде ffmpeg, imageMagick и ghostscript для работы плагина preview generator, который создает эскизы к содержимому облака.

Как базы данных будем использовать:

  • PostgreSQL
  • Redis

Установим все контейнеры, подключим бесплатный домен Duck DNS, добавим SSL.

Также обсудим и устраним часто встречающиеся ошибки и многое другое..

Установка контейнеров

Установка контейнера PostgreSQL

Для работы Nextcloud нам потребуется СУБД. как установить PostgreSQL, создать базу, пользователя и дать привилегии описано в соответствующей статье.

Соберу данные:

  • Адрес PostgreSQL – ИПСЕРВЕРА:5432
  • Пароль от PostgreSQL – Password
  • Имя созданной базы данных – nextcloud
  • Имя пользователя базы данных – nextclouduser
  • Пароль от базы данных – Password

Установка контейнера NextCloud

Необходимо создать контейнер самому, заполнив данные вручную, так будет более наглядно, постараюсь описать подробно каждый пункт.

Переходим на вкладку DOCKER, внизу находим и нажимаем кнопку Add container

В открывшемся окне заполняем данные, активировав подробный вид задействовав ползунок в правом верхнем углу Nextcloud – создаем свое личное облако на unRAID 6.8.3 6

  • Name: произвольное название контейнера
  • Repository: репозиторий контейнера – myunraid/nextcloud:production-apache
  • Docker Hub URL: ссылка на докер хаб, https://registry.hub.docker.com/_/nextcloud
  • Icon URL: ссылка на иконку, https://decatec.de/wp-content/uploads/2017/08/nextcloud_logo.png
  • WebUI: доступ из локальной сети, http://[IP]:[PORT:446]/
Nextcloud – создаем свое личное облако на unRAID 6.8.3 7
Настройка контейнера NextCloud (часть 1)

Параметры, которые оставляем как есть:

  • Extra Parameters:
  • Post Arguments:
  • CPU Pinning:
  • Network Type: Bridge
  • Console shell command: Shell
  • Privileged: OFF
Nextcloud – создаем свое личное облако на unRAID 6.8.3 8
Настройка контейнера NextCloud (часть 2)

Далее спускаемся ниже и создаем пути нажав кнопку:

Nextcloud – создаем свое личное облако на unRAID 6.8.3 9

Добавить Путь, Порт, Переменную…

Host Path 1 – указывает, где будут хранится системные данные:

Nextcloud – создаем свое личное облако на unRAID 6.8.3 10
Настройка контейнера NextCloud (часть 3)

Host Path 2 – указывает, где будут хранится данные пользователей:

Nextcloud – создаем свое личное облако на unRAID 6.8.3 11
Настройка контейнера NextCloud (часть 4)

Host Path 3 – указывает, где будут хранится папка настроек:

Nextcloud – создаем свое личное облако на unRAID 6.8.3 12
Настройка контейнера NextCloud (часть 5)

WebUI – порт веб интерфейса NextCloud:

Nextcloud – создаем свое личное облако на unRAID 6.8.3 13
Настройка контейнера NextCloud (часть 6)

После добавления каждого пункта, нажимаем SAVE, после всех манипуляций должно выглядеть так:

Nextcloud – создаем свое личное облако на unRAID 6.8.3 14
Настройка контейнера NextCloud (часть 7)

После заполнения и проверки всех данных нажимаем APPLY

Начнется установка контейнера с заданными параметрами:

Nextcloud – создаем свое личное облако на unRAID 6.8.3 15
Настройка контейнера NextCloud (часть 8)

Если все хорошо, то видим надпись “The command finished successfully!

Нажимаем DONE

Установка NextCloud из WebUI

Переходим к следующему этапу, для этого переходим в WebUI контейнера:

Nextcloud – создаем свое личное облако на unRAID 6.8.3 16
Настройка контейнера NextCloud (часть 8)

Нас встречает окно в котором необходимо:

  • Cоздать аккаунт администратора, в примере Admin/Password
  • Каталог с данными оставляем без изменений
  • В роли базы данных выбираем PostgreSQL и заполняем данными из пункта подготовки
  • Желательно снять чекбокс на “Установить рекомендуемые приложения“, все необходимое установим потом

Нажать кнопку “Завершить установку“:

Nextcloud – создаем свое личное облако на unRAID 6.8.3 17
Установка NextCloud в WebUI

Далее набраться терпения и выждать, пока сменится несколько окон с установкой приложений и прочей информацией, по завершении процесса нас встречает окно приветствия:

Nextcloud – создаем свое личное облако на unRAID 6.8.3 18
Окно приветствия NextCloud

Можно ознакомиться с функционалом данного комбайна, навигация происходит по клику на стрелки. Контейнер NextCloud успешно установлен.

Проверка безопасности и параметров

Переходим в Настройки -> Общие сведения:

Nextcloud – создаем свое личное облако на unRAID 6.8.3 19
Настройки -> Общие сведения (с ошибкой индексов)

Для обеспечения безопасности и производительности важно, чтобы всё было настроено правильно. Соответственно необходимо часто посещать данную вкладку и своевременно устранять появляющиеся там предупреждения, обычно они возникают после крупных обновлений, в которых произошли крупные изменения или добавление нового функционала.

В базе данных отсутствуют некоторые индексы

Данная ошибка встречает нас даже при чистой установки с нуля.

Чтобы исправить, необходимо в терминале unRAID вписать команду:

docker exec --user www-data NextCloud php occ db:add-missing-indices

Где Nextcloud – имя контейнера, то самое, которое задавали при установке контейнера. Регистр тут играет роль.

В моем случае будет:


Linux 4.19.107-Unraid.
Last login: Sun Jan 17 00:52:53 +0300 2021 on /dev/pts/0.
root@unRAID:~# docker exec --user www-data NextCloudProd-test php occ db:add-missing-indices
Check indices of the share table.
Check indices of the filecache table.
Check indices of the twofactor_providers table.
Check indices of the login_flow_v2 table.
Check indices of the whats_new table.
Check indices of the cards table.
Adding cards_abiduri index to the cards table, this can take some time...
cards table updated successfully.
Check indices of the cards_properties table.
Check indices of the calendarobjects_props table.
Check indices of the schedulingobjects table.
Check indices of the oc_properties table.
root@unRAID:~# 

После этого, закрываем консоль и обновляем страницу в WebUI:

Nextcloud – создаем свое личное облако на unRAID 6.8.3 20
Настройки -> Общие сведения (без ошибок индексов)

Предупреждения о текущей конфигурации

Данные ошибки желтым по белому заявляют нам о использовании небезопасного соединения и неверных параметрах обратного прокси:

Nextcloud – создаем свое личное облако на unRAID 6.8.3 21
Предупреждение о текущей конфигурации

Для устранения проходим весь раздел “Подключаем бесплатный домен Duck DNS”

Результат:

Nextcloud – создаем свое личное облако на unRAID 6.8.3 22
Все проверки пройдены

Подключаем бесплатный домен Duck DNS

Получаем бесплатный домен

Настоятельно рекомендую к покупке собственное доменное имя, тем более ценник на год более чем гуманный у многих регистраторов. К домену еще потребуется белый статический IP, который оплачивается отдельно у провайдера на ежемесячной основе.

Для примера будем использовать бесплатный, который не требует затрат.

Проходим регистрацию на duckdns.org и закрепляем за собой свободный домен вида:

domain.duckdns.org

Где domain – произвольный свободный вариант.

В моем случае я создал:

cloudnextcloud.duckdns.org

Добавляем Proxy Host в Nginx Proxy Manager

Далее, потребуется Nginx Proxy Manager(NPM) с помощью которого мы свяжем локальный IP контейнера NextCloud и домен на Duck DNS

Переходим в WebUI контейнера NPM, в открывшемся окне добавляем новую конфигурацию нажав Add Proxy Host.

На этом этапе необходимо заполнить три вкладки:

  • Details – содержит имя домена, схему(http), IP сервера unraid, порт контейнера nextcloud
  • SSL – запрашиваем SSL сертификат
  • Advanced – делаем доверенным передачу по CardDav и CalDav
location /.well-known/carddav {
    return 301 $scheme://$host/remote.php/dav;
}

location /.well-known/caldav {
    return 301 $scheme://$host/remote.php/dav;
}

После этого нажимаем SAVE, итоговый результат на скриншотах:

В некоторых ситуациях, при создании нового хоста, ползунки отключаются. После создания заходим и проверяем, включаем все как в примере выше

Заходим в облако по домену

Теперь пройдя по моего бесплатному домену https://cloudnextcloud.duckdns.org

Попадаю на страницу своего облака:

Nextcloud – создаем свое личное облако на unRAID 6.8.3 26

Система сообщает нам, что домен не прописан как доверенный в config.php

Редактирование Config.php

Воспользуемся любым удобным файловым менеджером, я рекомендую Cloud Commander

Перед любым внесением изменений в этот файл, настоятельно рекомендую сделать его копию или скриншот

Файл конфигурации расположен по пути:

/mnt/user/appdata/nextcloud/config

Вносим изменения в “trusted_domains“:

  'trusted_domains' => 
  array (
    0 => 'cloudnextcloud.duckdns.org',
  ),

Затем:

  'overwrite.cli.url' => 'https://cloudnextcloud.duckdns.org',

Добавляем:

  'overwritehost' => 'cloudnextcloud.duckdns.org',
  'overwriteprotocol' => 'https',

Результат должен выглядеть следующим образом:

Nextcloud – создаем свое личное облако на unRAID 6.8.3 27

Остальные данные остаются без изменений. Сохраняем изменения и обновляем страницу https://cloudnextcloud.duckdns.org

Nextcloud – создаем свое личное облако на unRAID 6.8.3 28

Подключаем Redis

Для ускорения облака устанавливаем контейнер Redis

Скорректируем параметры config.php, меняем:

<?php
$CONFIG = array (
  'htaccess.RewriteBase' => '/',
  'memcache.local' => '\\OC\\Memcache\\APCu',

на

<?php
$CONFIG = array (
  'htaccess.RewriteBase' => '/',
  'memcache.local' => '\\OC\\Memcache\\APCu',
  'memcache.locking' => '\\OC\\Memcache\\Redis',
  'redis' => 
  array (
    'host' => '192.168.31.100',
    'port' => 6379,
  ),

Где

  • 192.168.31.100 – IP сервера
  • 6379 – Порт Redis

Сохраняем изменения и проверяем результат, открываем консоль контейнера Redis

Пишем команду:

redis-cli

Затем:

MONITOR

Не закрывая консоль, начинаем путешествовать по облаку. Посещаем папки, открываем файлы. Успешным результатом подключения будет появление строк:

Nextcloud – создаем свое личное облако на unRAID 6.8.3 29
Подключение Redis

Фоновые задания AJAX vs CRON

“НекстКлауд” – многосоставное приложение, состоящее из множества сервисов объединенных в единую систему. Общее быстродействие зависит от того как часто выполняются процессы.

Это могут быть видимые(производимые пользователем) – заливка, копирование, перемещение файлов и подобные, а также скрытые(без участия пользователя) – например очистка базы данных.

По умолчанию используется метод планирования AJAX. Каждый раз, когда пользователь посещает страницу веб интерфейса, выполняются фоновые задания.

Преимущество этого механизма в том, что он не требует доступа к системе или регистрации в стороннем сервисе. Недостатком этого механизма по сравнению со службой CRON является то, что он требует регулярных посещений и пользования облаком.

С помощью команды CRON или же сценария, который уже сформирован разработчиками, возможно назначить интервал по которому будут выполнятся фоновые процессы, поддерживающие облако в “тонусе”.

Для этого на unRAID понадобится плагин User Scripts, который устанавливается в один клик из магазина приложений Community Applications

Для начала, заходим в веб интерфейс облака, идем в Настройки -> Основные параметры и переключаемся на CRON:

Nextcloud – создаем свое личное облако на unRAID 6.8.3 30
Фоновые задания CRON

Далее настройка будет на стороне сервера unRAID. Переходим на вкладку PLUGINS и запускаем плагин User Scripts:

Nextcloud – создаем свое личное облако на unRAID 6.8.3 31
Плагин User Scripts

В новом окне видим интерфейс плагина.

Находим кнопку добавления нового скрипта Nextcloud – создаем свое личное облако на unRAID 6.8.3 32,

Во всплывающем окне задаем произвольное имя будущему скрипту:

Nextcloud – создаем свое личное облако на unRAID 6.8.3 33
Задаем имя новому скрипту

После подтверждения увидим, что скрипт создан, но он пока пуст. Для создания задания наводим курсор на шестеренку слева от названия.

В выпадающем меню нажимаем EDIT SCRIPT:

Nextcloud – создаем свое личное облако на unRAID 6.8.3 34
Редактируем скрипт

В окне редактирования скрипта – прописываем на выполнение команду:

#!/bin/bash
docker exec -u www-data NextCloud php /var/www/html/cron.php -vvv

Где, NextCloud – имя Вашего контейнера.

После этого в верхней части экрана сохраняем изменения и возвращаемся в окно с списком скриптов.

Следующим шагом укажем периодичность срабатывания каждые пять минут. Именно так рекомендуют сделать сами разработчики.

Для этого следует обратить внимание столбец с выпадающими значениями, по умолчанию в котором на против нового скрипта будет запись Schedule Disabled

Переключаем на Custom.

В правой части появится новое поле с надписью Custom Cron Shedule.

Интервал в 5 минут будет выглядеть так:

*/5 * * * *

Конечный результат должен выглядеть следующим образом:

Nextcloud – создаем свое личное облако на unRAID 6.8.3 35
Custom

Применяем изменения APPLY (в левом нижнем углу)

Проверяем все и жмем Nextcloud – создаем свое личное облако на unRAID 6.8.3 36

Результатом проделанной работы будет успешное выполнение фоновых задач каждые 5 минут, что даст прирост в отзывчивости “некста”.

Как финальный штрих, проверяем выполнение в настройках:

Nextcloud – создаем свое личное облако на unRAID 6.8.3 37

Подключаем генератор эскизов (Preview Generator)

Preview Generator – позволяет создавать эскизы ко всем файлам в облаке, за счет такого предварительного просмотра, обеспечивается максимальная скорость доступа к ним, а также снижается нагрузка с вашего железа.

Имея семейный фото или видео архив на 5-10ТБ, открытие столь тяжеловесных папок может заставить задуматься даже самые продвинутые системы, для ускорения “прогрузки” и пригодится данное расширение.

Ffmpeg, ImageMagick и Ghostscript

Только для тех, кто использует оригинальный образ, который НЕ содержит данных библиотек. При добавлении их в ручную, после обновления контейнера, они пропадут. В дальнейшем правильная работа preview будет нарушена. Для восстановления следует заново использовать две команды указанные ниже. Подробнее можно прочесть в пункте Введение

Для начала необходимо убедиться, что для “некста” установлены необходимые надстройки.

Для этого открыв консоль контейнера и вводим:

apt upgrade && apt -y update

Затем:

apt install ffmpeg imagemagick ghostscript

В ходе установки, попросят подтвердить действия, вводим Y и Enter.

После установки всех компонентов можно закрыть консоль.

Для того, чтобы необходимые пакеты не слетали и всегда были установлены актуальные версии, необходимо в post arguments контейнера вписать код:

/bin/sh -c 'apt-get update && apt-get install -yq ffmpeg && apt-get install -yq imagemagick && apt-get install -yq ghostscript && apt-get install -yq libmagickcore-6.q16-3-extra && rm -rf /var/lib/apt/lists/* && apache2-foreground'

Приложение preview generator

Теперь активируем preview generator в магазине приложений самого “некстклауда”, найти его можно поиском на соответствующей вкладке “Приложения”:

Nextcloud – создаем свое личное облако на unRAID 6.8.3 38

После нажатия кнопки “Скачать и активировать”, вводим свой пароль администратора(если попросит) и идем далее.

Правки config.php

Данный файл конфигурации является основным, к нему мы будем часто возвращаться внося изменения по мере необходимости. Где он располагается уже упоминалось ранее.

В данном случае мы укажем, для каких типов файлов генерировать эскизы.

Общий список поддерживаемых типов файлов выглядит так:

'enable_previews' => true,
'enabledPreviewProviders' =>
 array (
    0 => 'OC\\Preview\\TXT',
    1 => 'OC\\Preview\\MarkDown',
    2 => 'OC\\Preview\\OpenDocument',
    3 => 'OC\\Preview\\PDF',
    4 => 'OC\\Preview\\MSOffice2003',
    5 => 'OC\\Preview\\MSOfficeDoc',
    6 => 'OC\\Preview\\PDF',
    7 => 'OC\\Preview\\Image',
    8 => 'OC\\Preview\\Photoshop',
    9 => 'OC\\Preview\\TIFF',
   10 => 'OC\\Preview\\SVG',
   11 => 'OC\\Preview\\Font',
   12 => 'OC\\Preview\\MP3',
   13 => 'OC\\Preview\\Movie',
   14 => 'OC\\Preview\\MKV',
   15 => 'OC\\Preview\\MP4',
   16 => 'OC\\Preview\\AVI',
 ),

Настоятельно НЕ рекомендую использовать весь список, так как по собственному опыту убедился, что большинство активных провайдеров приводит к разнообразным ошибкам.

Точно не рекомендую включать mp3 из этого списка для создания эскизов обложек, остальное на Ваше усмотрение.

Хорошим вариантом будет включение по одному и отслеживание, как себя будет вести система в целом.

Также официальная документация нам намекает:

Технически Nextcloud также может создавать превью других типов файлов, таких как PDF, SVG или различных офисных документов. Из соображений безопасности эти поставщики по умолчанию отключены и считаются неподдерживаемыми. Хотя эти поставщики все еще доступны, мы не рекомендуем их включать

Для себя я оставил короткий список рассчитанный только на фото и видео контент:

  'enable_previews' => true,
  'enabledPreviewProviders' => 
  array (
    0 => 'OC\\Preview\\Image',
    1 => 'OC\\Preview\\Movie',
    2 => 'OC\\Preview\\MP4',
    3 => 'OC\\Preview\\MOV',
  ),

Далее, чтобы эскизы не занимали много места, ограничим максимальный размер:

  'preview_max_x' => 500,
  'preview_max_y' => 500,

Эти значения указываются в пикселях и ограничивают высоту и ширину. Генератор начиная отрабатывать создание эскизов начинает с маленьких с условным шагом 50 пикселей: 50×50, 100х100, 150х150 и далее.

Указывая значения, мы принудительно останавливаем работу генератора, когда он доходит до 500х500 пикселей.

При этих значениях, на каждые 100гб контента будет создано около 1гб эскизов. При ограничении в 1000х1000 будет около 4гб эскизов на каждые 100гб контента.

Если вы готовы дать больше места, то можно увеличить значения до 2000. Более просто нет смысла.

Сохраняем конфигурацию. На этом правки конфига завершены.

Создаем эскизы

Для имеющихся файлов создаем эскизы, разово используем команду в терминале:

docker exec --user www-data Nextcloud php occ preview:generate-all

Где Nextcloud – имя Вашего контейнера.

Для новых файлов делаем задание cron:

docker exec -u www-data NextCloud php /var/www/html/occ preview:pre-generate -vvv

Где Nextcloud – имя Вашего контейнера.

В моем случае задание выполняется один раз в ночное время. Cron выполняется плагином User Scripts.

Увеличиваем размер заливаемых файлов

По умолчанию установлено ограничение на максимальный размер заливаемого файла.

Добавим информацию на вкладку Advanced зайдя в Nginx Proxy Manager, данная вкладка уже встречалась ранее:

proxy_max_temp_file_size 16384m;
client_max_body_size 0;

Где 16384 – объем Вашей оперативной памяти.

Сохраняем настройки. Теперь возможна заливка файлов большего размера.

Увеличиваем PHP_MEMORY_LIMIT и PHP_UPLOAD_LIMIT

По умолчанию установлено ограничение памяти в 1 GB и размер для отправки в 512 MB.

Nextcloud – создаем свое личное облако на unRAID 6.8.3 39
Стоковые значения в системной сводке NextCloud

Для того чтобы увеличить эти значения, необходимо создать переменные в контейнере для каждого из значений.

Nextcloud – создаем свое личное облако на unRAID 6.8.3 40
Добавляем в контейнер переменную PHP_MEMORY_LIMIT

Затем следующую:

Nextcloud – создаем свое личное облако на unRAID 6.8.3 41
Добавляем в контейнер переменную PHP_UPLOAD_LIMIT

Результат в нашем контейнере будет выглядеть следующим образом:

Nextcloud – создаем свое личное облако на unRAID 6.8.3 42
Результат добавления двух переменных.

Осталось проверить, что все сработало в системной сводке веб интерфейса. Открываем наше облако и идем в Настройки -> Система:

Nextcloud – создаем свое личное облако на unRAID 6.8.3 43
Видим измененные значения.

Настройки NextCloud

Параметры пользователя

Личная информация

Убедившись, что установка прошла гладко, наигравшись вдоволь с примерами файлов, переходим в Настройки.

Задаем языковые параметры, аватар, региональные стандарты по своему усмотрению:

Nextcloud – создаем свое личное облако на unRAID 6.8.3 44
Настройки “Личная информация”

Итог

На момент написания статьи версия Nextcloud production 20.0.5

Ветка продакшн является самой стабильной, именно ее я рекомендую использовать на постоянной основе. Обновление версии происходит вместе с обновлением контейнера. Вручную или из настроек запускать никаких процессов, кроме обновления приложений(плагинов) не требуется.