Необходимые требования
Чтобы всё получилось нам понадобится:
- Сервер с Root доступом. Рекомендую вот этот
- Доменное имя. Можно бесплатный домен или поддомен
- Установленный Docker + Docker-Compose
- Установленный и настроенный Nginx Proxy Manager
- 30 - 45 минут времени
В двух словах о Nextcloud
Бесплатный.
Умеет шифровать данные.
Умеет синхронизировать фаилы и папки.
Умеет работать по протоколу сетевой файловой системы WebDAV.
Обладает большим количеством плагинов и дополнений. Есть например плагин для хранения и структурирования ссылок под названием Bookmarks. Плагин аудиоплеер. Плагин для ведения базы паролей. Плагин для редактирования контактов - имена, номера телефонов, почта, дополнительные поля с быстрым поиском. Даже книга с рецептами присутствует)
Кроссплатформенный. Изначально работает в браузере, а так же существуют клиенты под Windows, Linux, MacOS, Android, iOS. Скачать клиент под необходимое п.о. можно отсюда.
Имеет очень гибкую систему управления пользователями и группами. Такой функционал очень пригодится бизнесу, можно разграничивать разные отделы и иметь полный контроль над всем.
При установке дополнения появляется возможность делиться фаилами через веб-ссылки.
Подготовка
Как и в предыдущих статьях про докер контейнеры мы будем придерживаться правила - хранить все контейнеры в одном месте. Создаём необходимые директории для Nextcloud
Сделаем нашего пользователя (не root !) владельцем этой директории
Конфигурация и запуск
Перейдём в директорию, которую мы создавали выше
Создадим фаил docker-compose.yml
И заполняем его таким таким содержанием. Данный конфиг подойдёт сразу под amd64 и arm64 архитектуры.
Если Вы хотите поднять NextCloud не светя порты наружу, прочитайте про проксирование приложения в NPM через хостнейм. После усвоения материала используйте этот фаил docker-dompose. В противном случае используйте первый вариант, изначально пост писался именно под него!
В конфиге обязательно обращаем внимание на строки PUID и PGID. Если нам это нужно, то в них мы можем вписать идентификатор пользователя и группы, от которого хотим запускать контейнер!
Для этого их необходимо раскомментировать. А сами ID можно посмотреть написав в терминале:
Самые распространённые идентификаторы 1000 и 1001
Следующим шагом мы придумываем логин и пароль для базы данных. И вписываем их в этот кусок конфига
- POSTGRES_USER=nextcloud
- POSTGRES_PASSWORD=YOURPASSWORD
Далее. Если это необходимо, то можно изменить название сервиса базы данных postgres-nextcloud на любое угодное. Мы его потом будем вписывать при установке вместо localhost!
С настройкой закончили. Сохраняем конфиг.
Я советую периодически проверять DockerHub на наличие новых версий. На момент написания статьи актуальная версия была
nextcloud:23.0.1
Стартуем контейнер с NextCloud
Выхлоп в терминале должен быть как на скрине ниже.

Подключаем домен
Пришло время подключить домен к облаку. Делать это будем при помощи Nginx Proxy Manager, о котором я писал недавно в одноимённой статье.
В Nginx Proxy Manager(далее NPM) создаём новый хост. Заполняем необходимую информацию.
- Домен либо поддомен
- Ip адрес
- Порт - 13370 (если вы не меняли его в docker-compose.yml)

Нажимаем Save и ждём примерно 60 секунд.
После этого снова редактируем только что добавленный хост, нажав на три точки справа и Edit.
На этот раз отправляемся в раздел SSL в котором запрашиваем новый ssl сертификат для нашего домена - Request a new SSL Certificate


И нажимаем кнопку Save
Обратите внимание, что после нажатия кнопки Save не должно быть никаких ошибок. Если у вас всё же были какие то ошибки, скорее всего это связано с тем что у вас не успели обновиться записи в DNS, либо вы превысили лимиты(количество попыток) LetsEncrypt. В обоих случаях надо просто подождать и повторить попытку позже.
Если же у вас не выдало никаких ошибок с сертификатом, то сразу проверяем результат в браузере, открыв только что добавленный домен.
Мы должны увидеть страницу установки NextCloud

Установка NextCloud
Придумываем комбинацию из сложного логина и пароля для администратора облака и вписываем в соответствующие поля.
Так как мы хотим использовать PostgreSQL вместо SQLite, то нам нужно явно указать это. Для этого нажимаем Хранилище и база данных
Откроется окно с дополнительными настройками.
Каталог с данными /Data оставляем по умолчанию.
Выбираем пункт PostgreSQL. Нам необходимо вписать туда свои данные, которые находятся в фаиле docker-compose.yml.

Обратите внимание на пункт Хост базы данных, в котором по стандарту уже вписано localhost. В самом начале я говорил что можно поменять название сервиса для базы данных. Если вы меняли его то вписывайте своё название, если не меняли то вместо localhost вписывайте postgres-nextcloud
Внимательно проверяем корректность заполненных данных.
По желанию включаем или выключаем пункт Установить рекомендуемые приложения.
Нажимаем кнопку Завершить установку.

После установки нас перекидывает на страницу приветствия.

На этом установку NextCloud можно считать выполненной успешно.
Тюнинг NextCloud
Наверняка вы замечали что если в админ панели, пойти в Настройки во вкладку Система и пролистнуть до версии php то там выставлены ограничения.

Поменяв эти настройки мы можем в той или иной мере повлиять на производительность нашего облака.
Останавливаем контейнер
В папке рядом с docker-compose.yml создадим фаил nextcloud.ini
С таким содержанием (подправьте под ресурсы вашего сервера!)
post_max_size=16G
memory_limit=2G
max_input_time 7200
max_execution_time 7200
Отлично, фаил добавили, теперь необходимо раскомментировать его же в docker-compose.yml
просто убираем комментарий и приводим из такого вида
к такому виду
Сохраняем. И стартуем
Проверяем

Теперь облако работает шустрее за счёт увеличения лимитов по оперативной памяти. Также мы увеличили время выполнения php скриптов. И увеличили размер максимально загружаемого фаила до 16 GB
Возможные проблемы
Иногда бывает что с релизами версия Php меняется. У некоторых неофициальных образов месторасположение папки с Php находится вообще в другом месте. В таком случае нам необходимо узнать точное расположение папки.
Для этого зайдём внутрь нашего контейнера
Находясь внутри контейнера пробуем попасть в папку с Php
В некоторых неофициальных образах Nextcloud пхп находится тут: (напомню в данной статье мы ставим официальный образ)
Далее действуем исходя из полученных результатов. Прописываем полный путь до папки с Php в docker-compose.yml если он у вас отличается. И далее всё заработает как надо.
Подключаем Redis
Наверняка вы заметили его в docker-compose.yml в самом низу.
Находясь в папке рядом с docker-compose.yml останавливаем наш контейнер
Редактируем фаил docker-compose.yml
Тут нам нужно убрать комментарии из строк (поменяв пароль на свой)
- REDIS_HOST_PASSWORD=YOURREDISPASSWORD
а так же полностью расскоментировать сервис redis-nextcloud
Пароль должен быть такой же как в предыдущих строчках которые мы раскомментировали:
image: redis:alpine
container_name: redis-nextcloud
command: redis-server --requirepass YOURREDISPASSWORD
restart: unless-stopped
Вновь стартуем наш контейнер
Для того чтобы мы могли проверить работу Redis, поставим необходимые пакеты
Проще всего проверить работу Redis, обратившись к нему по внутреннему адресу. Для этого сначала напишем
и найдём там id'шник redis или его имя. В нашем случае имя redis-nextcloud. Используем это имя в следующей команде:

Тут нас интересует секция IPAddress": XXX.XXX.XXX.XXX" она находится почти в самом низу.
Каждый раз этот ip будет разный. В моём случае это оказался 172.27.0.2
обратимся к нашему инстансу редиса по этому ip используя пароль который мы ему задавали

В ответ мы получим PONG
Теперь посмотрим как общаются Nextcloud и Redis

Ответ должен быть OK
Переключимся на браузер с Nextcloud и обновим там страницу. В результате чего в логе мы увидим как побежали данные

На этом подключение Redis успешно завершено
Включаем принудительный режим https
Некоторые плагины требуют чтобы у нас был включен принудительный режим https. Например плагин для хранения паролей passwords.
Останавливаем контейнер
Теперь необходимо отредактировать фаил .../nextcloud/config/config.php
После второй строки вставляем строку
Внимательно, соблюдая отступы, там по 2 пробела в начале каждой новой строки. Должно получиться вот так:

Стартуем наш контейнер и проверяем что всё ок

Увеличиваем размер чанков
Есть один неприятный баг. Проявляется этот баг при загрузке больших фаилов, пишет ошибку 504 и не загружает фаил
Судя по тикету на гитхабе - его не могут зафиксить уже несколько лет.
Покопавшись, вроде получилось его побороть. Дело в том что NextCloud из коробки делит фаилы на чанки(chunks). По стандарту размер одного чанка равен 10 MB
Когда мы грузим большой фаил, видимо всё упирается в производительность диска и таймауты php и что то не срабатывает как надо.
Для улучшения картины в лучшую сторону мы увеличим раздел чанков. Для этого необходимо зайти внутрь нашего контейнера и послать ему необходимые параметры
Тут необходимо вместо nextcloud-23 вписать имя вашего контейнера с NextCloud. Вот так:

Я пробовал на фаиле в 4 GB и данное сообщение не появлялось, однако, на фаиле в 8 GB оно появлялось, но через какое то время фаил всё равно загружался и был полностью рабочим.
Чиним cron
Nextcloud использует специальный фаил cron.php для того чтобы инициировать такие процессы как сканирование фаилов, музыки, очистку мусора и другие. Желательно выполнять этот фаил каждые 5-10 минут.
Используя NextCloud в докере из коробки к сожалению эта фича не работает и приходится использовать режим AJAX, который выполняет фаил cron.php при загрузке каждой страницы. Это создаёт дополнительную нагрузку на сервер.
Мы делегируем выполнение этого функционала, штатному cron. Для этого сначала установим его
Проверим что он запущен и работает

Мы будем запускать наше задание от root поэтому пишем
В самую нижнюю строчку добавляем наше задание

Сохраняем и выходим. Ждём 5 минут и проверяем результат

Обновление Nextcloud
Периодически для Nextcloud выходят обновления, рассмотрим как правильно обновиться.
Внимание! Все обновления Nextcloud стоит делать последовательно, не перескакивая через версию. Например если у Вас была версия 21.x.x то чтобы обновиться на версию 23.x.x необходимо сначала обновить nextcloud до версии 22.x.x и только потом уже до 23.x.x !
Переходим в директорию с nextcloud
Тушим контейнер
Посмотрим на структуру фаилов и директорий

Создаём папку, куда свалим нашу предыдущую рабочую версию
Скопируем в эту директорию все фаилы от предыдущей рабочей версии
Редактируем фаил docker-compose.yml заменив в нём версию образа nextcloud на более новую. Версии можно посмотреть в DockerHub

Поднимаем контейнер с новой версией
Открываем Nextcloud в браузере. Нас приветствует мастер обновления.

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

Ожидаем какое то время. В результате визард предложит перейти в nextcloud, что завершит процедуру обновления.

Кстати на скрине видно что были отключены некоторые плагины. В действительности после того как я перешёл в облако, все эти плагины были включены и работали, несмотря на то что в сообщении написано что они не совместимы.
Обновление на новую версию завершено.
Полезные команды
Рассмотрим специальные служебные команды для NextCloud. Все эти команды подаются в качестве параметров на occ.php
Во всех приведённых ниже командах не забудьте заменить имя контейнера nextcloud-23 на своё
Плагины
Отобразить список плагинов
Установить плагин
Удалить плагин
Включить плагин. Например Activity
Отключить плагин. Например Activity
Обновить все плагины (либо вместо --all указать нужный плагин)
Получить полный путь папки с плагином. Например плагина Mind Map
Пользователи
Отключить юзера
Включить юзера
Удалить юзера
Etc
Произвести сканирование на предмет наличия новых фаилов
Произвести поиск недостоющих индексов в бд
Включить режим обслуживания
Отключить режим обслуживания
Отобразить список доверенных доменов
Добавить доверенный домен. В поле value вписываем ip либо домен
Выполнить cron.php
Остальные команды можно найти тут
На этом всё. Все молодцы кто до сюда дошёл и у кого всё получилось!
у тебя ошибка в конфиге докер композ. Ты там nextcloud.ini подключаешь как каталог
ОтветитьУдалитьНет там никакой ошибки, читайте внимательно пост!
УдалитьДля меня очевидно исходя из вашего ответа что вы сначала раскомментировали строку с nextcloud.ini в docker-compose.yml и запустили сервис, не создав при этом самостоятельно фаил nextcloud.ini
Если так делать то докер будет пытаться создать папку, это давно известный баг самого докера и никак не может являться ошибкой этого поста.
Одна из лучших статей по установке Nextcloud. Поставил под Portainer за спиной у NGinx Proxy Manager. Скорость, производительность - все на высоте.
ОтветитьУдалитьЕсли не сложно, опишите обновление до 25 версии)))
Благодарю за отзыв. По правде говоря обновления, доступные в 25 версии меня не впечатлили. Какой то AI будет обрабатывать фото чтобы подсказать что на нём изображено, это может быть прикрытием для того чтобы шпионить за пользователями. Для себя я принял решения пока остаться на 23 версии. В любом случае там они кое что поменяли, например слышал что редис уже внедрён якобы в сам контейнер и кое какие другие фичи. Нужно сидеть разбираться, поэтому сложно сказать, появится ли в ближайшее время эта информация в блоге.
УдалитьВзял Ваши статьи под карандаш, на очереди почтовый сервер )))
ОтветитьУдалить😉
УдалитьДоброго времени суток. После запуска docker-compose ошибка - unsupported config option for services-nextcloud: 'postgres-nextcloud' Подскажите пожалуйста где рыть ошибку?
ОтветитьУдалитьПривет, не так давно поднимал NC всё было ок. Думаю скорее всего Вы ошиблись где то. Вы случайно не на арме поднимаете? Мб в этом косяк?
УдалитьРедко пишу комментарии. Но спасибо вам за гайд!
ОтветитьУдалить❤️
УдалитьСпасибо за статью, резвернул NC 26.0.0 и postgre alpine 15.2. Все работает как должно, кроме крона. При попытке выполнить крон с хоста - выходит вот такое предупреждение: "sudo /usr/bin/docker exec -u www-data nextcloud php -f /var/www/html/cron.php
ОтветитьУдалитьDoctrine\DBAL\Exception: Failed to connect to the database: An exception occurred in the driver: SQLSTATE[08006] [7] could not translate host name "postgres-nextcloud" to address: Temporary failure in name resolution in /var/www/html/lib/private/DB/Connection.php:142"
При этом кеонтейнеры нормалньно взаимодействую и все работает как надо. Правка с нуля compose файла с перепроверкой - не помогла(там все ок). Если сможет кто то помочь, буду очень благодарен.
Привет, не встречался с такой проблемой. Похоже на какую то проблему DNS.
УдалитьСпасибо большое за статью. Давно хотел переехать на PSQL
ОтветитьУдалитьСпасибо за пожалуй одна из самых лучших статей по NetxCloud на русском языке. Было бы интересно ещё узнать про подключение к нему пакета OnlyOffice.
ОтветитьУдалитьПривет, пока не разбирался с ним. Можно попробовать посмотреть на этом youtube канале. Так же пару раз видел как обсуждалось подключение к NC + OnlyOffice в этом тг чате, можно попробовать через поиск найти решение. Спасибо за отзыв.
Удалитьу кого нибудь получилось подключить почту в nextcloud сделанный по этой инструкции? у меня по любым почтовым серверам пишет ошибку сразу
ОтветитьУдалитьЭта инструкция основана на установке официального образа nextcloud, думаю что проблема всё таки в почте.
УдалитьДля подключения клиента к апgликейшн Mail
УдалитьПопробуйте добавить в config.php
https://docs.nextcloud.com/server/25/admin_manual/configuration_server/email_configuration.html
--
"mail_smtpstreamoptions" => array(
'ssl' => array(
'allow_self_signed' => true,
'verify_peer' => false,
'verify_peer_name' => false
)
),
--
Самый лучшее описание установки. Всё заработало, но... после PostgreSQL нажал установка и.. "Внутренняя ошибка сервера
ОтветитьУдалитьЗапрос не может быть обработан сервером.
Если это случится ещё раз, отправьте администратору сервера подробное сообщение о произошедшем, приведённое ниже.
Подробную информацию можно найти в журнале сервера."
Кто сталкивался? Что это может быть? Как лечить?
С таким не встречался. А какое значение было в поле адреса PostgreSQL сервера? Адресс должен быть написан также как называется сервис, то есть с моим конфигом там нужно вписать postgres-nextcloud
УдалитьОтправить комментарий