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
В открывшемся окне заполняем данные, активировав подробный вид задействовав ползунок в правом верхнем углу
- 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]/
Параметры, которые оставляем как есть:
- Extra Parameters:
- Post Arguments:
- CPU Pinning:
- Network Type: Bridge
- Console shell command: Shell
- Privileged: OFF
Далее спускаемся ниже и создаем пути нажав кнопку:

Добавить Путь, Порт, Переменную…
Host Path 1 – указывает, где будут хранится системные данные:
Host Path 2 – указывает, где будут хранится данные пользователей:
Host Path 3 – указывает, где будут хранится папка настроек:
WebUI – порт веб интерфейса NextCloud:
После добавления каждого пункта, нажимаем SAVE, после всех манипуляций должно выглядеть так:
После заполнения и проверки всех данных нажимаем APPLY
Начнется установка контейнера с заданными параметрами:
Если все хорошо, то видим надпись “The command finished successfully!“
Нажимаем DONE
Установка NextCloud из WebUI
Переходим к следующему этапу, для этого переходим в WebUI контейнера:
Нас встречает окно в котором необходимо:
- Cоздать аккаунт администратора, в примере Admin/Password
- Каталог с данными оставляем без изменений
- В роли базы данных выбираем PostgreSQL и заполняем данными из пункта подготовки
- Желательно снять чекбокс на “Установить рекомендуемые приложения“, все необходимое установим потом
Нажать кнопку “Завершить установку“:

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

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

Для обеспечения безопасности и производительности важно, чтобы всё было настроено правильно. Соответственно необходимо часто посещать данную вкладку и своевременно устранять появляющиеся там предупреждения, обычно они возникают после крупных обновлений, в которых произошли крупные изменения или добавление нового функционала.
В базе данных отсутствуют некоторые индексы
Данная ошибка встречает нас даже при чистой установки с нуля.
Чтобы исправить, необходимо в терминале 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.
[email protected]:~# 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.
[email protected]:~#
После этого, закрываем консоль и обновляем страницу в WebUI:

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

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

Подключаем бесплатный домен 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
Попадаю на страницу своего облака:

Система сообщает нам, что домен не прописан как доверенный в 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',
Результат должен выглядеть следующим образом:

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

Подключаем 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
Не закрывая консоль, начинаем путешествовать по облаку. Посещаем папки, открываем файлы. Успешным результатом подключения будет появление строк:
Фоновые задания AJAX vs CRON
“НекстКлауд” – многосоставное приложение, состоящее из множества сервисов объединенных в единую систему. Общее быстродействие зависит от того как часто выполняются процессы.
Это могут быть видимые(производимые пользователем) – заливка, копирование, перемещение файлов и подобные, а также скрытые(без участия пользователя) – например очистка базы данных.
По умолчанию используется метод планирования AJAX. Каждый раз, когда пользователь посещает страницу веб интерфейса, выполняются фоновые задания.
Преимущество этого механизма в том, что он не требует доступа к системе или регистрации в стороннем сервисе. Недостатком этого механизма по сравнению со службой CRON является то, что он требует регулярных посещений и пользования облаком.
С помощью команды CRON или же сценария, который уже сформирован разработчиками, возможно назначить интервал по которому будут выполнятся фоновые процессы, поддерживающие облако в “тонусе”.
Для этого на unRAID понадобится плагин User Scripts, который устанавливается в один клик из магазина приложений Community Applications
Для начала, заходим в веб интерфейс облака, идем в Настройки -> Основные параметры и переключаемся на CRON:
Далее настройка будет на стороне сервера unRAID. Переходим на вкладку PLUGINS и запускаем плагин User Scripts:
В новом окне видим интерфейс плагина.
Находим кнопку добавления нового скрипта ,
Во всплывающем окне задаем произвольное имя будущему скрипту:
После подтверждения увидим, что скрипт создан, но он пока пуст. Для создания задания наводим курсор на шестеренку слева от названия.
В выпадающем меню нажимаем EDIT SCRIPT:
В окне редактирования скрипта – прописываем на выполнение команду:
#!/bin/bash
docker exec -u www-data NextCloud php /var/www/html/cron.php -vvv
Где, NextCloud – имя Вашего контейнера.
После этого в верхней части экрана сохраняем изменения и возвращаемся в окно с списком скриптов.
Следующим шагом укажем периодичность срабатывания каждые пять минут. Именно так рекомендуют сделать сами разработчики.
Для этого следует обратить внимание столбец с выпадающими значениями, по умолчанию в котором на против нового скрипта будет запись Schedule Disabled
Переключаем на Custom.
В правой части появится новое поле с надписью Custom Cron Shedule.
Интервал в 5 минут будет выглядеть так:
*/5 * * * *
Конечный результат должен выглядеть следующим образом:
Применяем изменения APPLY (в левом нижнем углу)
Проверяем все и жмем
Результатом проделанной работы будет успешное выполнение фоновых задач каждые 5 минут, что даст прирост в отзывчивости “некста”.
Как финальный штрих, проверяем выполнение в настройках:

Подключаем генератор эскизов (Preview Generator)
Preview Generator – позволяет создавать эскизы ко всем файлам в облаке, за счет такого предварительного просмотра, обеспечивается максимальная скорость доступа к ним, а также снижается нагрузка с вашего железа.
Имея семейный фото или видео архив на 5-10ТБ, открытие столь тяжеловесных папок может заставить задуматься даже самые продвинутые системы, для ускорения “прогрузки” и пригодится данное расширение.
Ffmpeg, ImageMagick и Ghostscript
Для начала необходимо убедиться, что для “некста” установлены необходимые надстройки.
Для этого открыв консоль контейнера и вводим:
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 в магазине приложений самого “некстклауда”, найти его можно поиском на соответствующей вкладке “Приложения”:

После нажатия кнопки “Скачать и активировать”, вводим свой пароль администратора(если попросит) и идем далее.
Правки 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 из этого списка для создания эскизов обложек, остальное на Ваше усмотрение.
Хорошим вариантом будет включение по одному и отслеживание, как себя будет вести система в целом.
Также официальная документация нам намекает:
Для себя я оставил короткий список рассчитанный только на фото и видео контент:
'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
Параметры пользователя
Личная информация
Убедившись, что установка прошла гладко, наигравшись вдоволь с примерами файлов, переходим в Настройки.
Задаем языковые параметры, аватар, региональные стандарты по своему усмотрению:

Итог
На момент написания статьи версия Nextcloud production 20.0.5
Ветка продакшн является самой стабильной, именно ее я рекомендую использовать на постоянной основе. Обновление версии происходит вместе с обновлением контейнера. Вручную или из настроек запускать никаких процессов, кроме обновления приложений(плагинов) не требуется.
Доброго Вам. Доступ из сети на облако доступно только с белым IP ? Или можно использовать динамический IP, по аналогии с Синелоджи ?
Возможно использование DDNS с динамическим IP, но он должен быть однозначно белым, серые не видны из мира.
Добрый день, что если использовать готовые докеры с Apps? в сети все мануалы на инглише которые, ставят готовые докеры. Я просто не очень в линуксах..
Вкладка APPS содержит уже готовые(с уже вбитыми параметрами) контейнеры, их ставить можно и в большинстве случаев этого хватает и стартуют они без проблем.
Данный мануал описывает установку nextcloud из репозитория production(именно этот вариант считаю самым стабильным и беспроблемным с точки зрения “поставил и забыл”).
Спасибо за статью!
Если будет возможность, добавьте еще про свой High-performance backend сервер отдельный под Talk.
А данная статья не подходит?
NextCloud Talk – видеоконференции и чат на Unraid 6.8.3
По умолчанию Talk peer-to-peer соединение использует. Если более 4-5 человек в чате, то уже заметные лаги и отключения происходят.
Есть официальный репозиторий для поднятия своего сервера, чтобы все подключения через него обрабатывались. (https://github.com/strukturag/nextcloud-spreed-signaling)
Я уже пробовал настроить, пока не вышло. Сервер поднялся вроде, но из NextCloud нет доступа. Пока еще руки не дошли с этим всем разобраться полноценно.
делаю всё как у вас но у меня жутко тормозит nextcloud
дело в mariadb скорее всего
Устанавливать БД и некст полностью на HDD категорически не рекомендуется. Исходя из проб некоторых пользователей, могу точно сказать, что это не работает.
Некст постоянно в бд лазит и много тянет всякого, а когда база на hdd, это довольно медленно происходит, это приводит к разнообразным тормозам.
Все установил по Вашей инструкции. Все стало работать, но появилась проблема с некоторыми файлами.
1. Не могу удалить файлы по умолчанию, которые уже были там.
2. Не загружаются некоторые файлы. Например html, doc могу загрузить, а pdf или картинки нет.
Нужно больше информации, возможно каким-то образом были нарушены права.
Это изначально после установки, или через некоторое время?
Что делали? В чат телеграм лучше обратиться со скринами.
Уже обращался. Все установлено правильно. Но где то есть затык.
Установлено все на стороннем хостинге. В Руцентре. Полного доступа к серверу нет, отсюда и логи не могу выдернуть.
Добрый день,
спасибо за информацию!
Я сегодня установил NC по английским гайдам… динамический айпишники через DuckDNS подключил, а вот свой домен перенаправить на DuckDNS не получается…
На ‘Nextcloud.duckdns.org’ открывается нормально, а на nextcloud.мойдомен.com открывается страница SWAG
Необходимо правильно настроить Ваш SWAG. Сам я им не пользуюсь, обратитесь в группу телеграм для получения помощи.
https://t.me/MyUnraid_Chat
Жалко, что мой провайдер продает статику за 800р в месяц. Все самое сочное работает только по статике. А так, я за жестким NAT-ом прова, и брать за 800р белый IP я точно не буду, так как я уже 1500р в месяц плачу за интернет
Все работает из внешней сети, из локальной доступа нет, все перепробовал… помогите….
Добрый день!
Попробуйте написать в наш чат telegram. Возможно сможем помочь с настройкой.
Добрый день!
В инструкции не указано, что в системе нужен www-data с соответствующими правами (устанавливал NC на только что развернутый Unraid). Столкнулся с проблемой когда проверял запуск только что созданного скрипта cron.