Установка Nextcloud на Synology и TerraMaster в контейнере Docker

Всем привет!!!

В данной статье мы рассмотрим процесс установки и настройки Nextcloud на устройствах Synology и TerraMaster с использованием Docker-контейнеров.

Введение

Nextcloud — это платформа для хранения и обмена файлами с открытым исходным кодом. Она позволяет пользователям хранить свои файлы в облаке и получать к ним доступ с любого устройства. Nextcloud также предоставляет возможность обмена файлами с другими пользователями, а также создания общих папок для совместного использования файлов. В общем и в целом Nextcloud это то же самое что и Synology Drive или Microsoft One Drive или Яндекс диск, или Google или Apple облако. Вот только Nextcloud это не только файловый сервис, это комбайн с дополнительными плагинами и расширениями такими как Календарь, Контакты, почтовый клиент, и так далее. (расширения могут быть установлены отдельно)

Кому принадлежат ваши фотографии и документы? Верно, это должен быть ты. С самостоятельным облачным хранилищем ваши данные находятся там, где вы хотите, чтобы они были: дома или в облаке, которому вы доверяете. Nextcloud работает на этом сервере, предоставляя вам легкий доступ к вашим файлам с настольных и мобильных устройств, а также беспредельную синхронизацию и обмен между местоположениями: FTP-накопитель в школе, Dropbox или NAS, который у вас есть дома. Nextcloud – это бесплатный и с открытым исходным кодом, и вы можете принять участие в его улучшении!

https://nextcloud.com/athome/

Устройства Synology и TerraMaster предлагают отличную платформу для развертывания Nextcloud благодаря своей гибкости и возможностям настройки, а Docker-контейнеры упрощают процесс установки и управления сервером.

Системные требования для установки в Synology или TerraMaster по данной инструкции такие:

  • Synology DSM 7.2 и выше или TerraMaster TOS 5.1 и выше
  • Synology Container Manager или TerraMaster Docker Manager
  • Минимум 4ГБ ОЗУ
  • Место на диски под ваши файлы

Вообще Nextcloud, на мой взгляд, сделан крайне не оптимально, т.к. он полностью работает на WEB сервер + PHP. Это накладывает на него определенные ограничения, а разработчики неуда суживаются реализовать механизм решающий самую главную проблему с этим связанную. Дело в том, что для защиты web серверов от переполнения памяти на уровне PHP внедрены ограничения на размер файлов, которые они могут передать. По умолчанию в Nextcloud максимальный размер загружаемого файла всего 512МБ. Это просто очень маленький размер по современным меркам. Эта проблема решается, но за счет пожирания оперативной памяти. Следом идет вторая проблема, это ограничение веб сервера на поддержание соединения. Если файл будет загружаться долго, то он попросту не загрузится. В этой инструкции максимальная продолжительность загрузки одного файла будет составлять 60 минут. Это время можно будет увеличить.

Клиенты Nextcloud есть под все самые распространенные ОС

Выбор ПО Nextcloud сервера

В этой инструкции мне удалось решить очень много проблем связанных с работой Nextcloud в контейнерах докер. Такой инструкции как эта на данный момент в сети интернета нет. Тем не менее я не исключаю, что и эта инструкция имеет изъяны. Если найдете, то смело пишите в комментариях или через форму обратной связи со мной.

Я добился, что DSM и Nextcloud будут работь на одном домене XXX.synology.me, но DSM будет работать на своих портах 5000-5001, а Nextcloud на порту HTTPS 443 с защищенным SSL соединением. Поэтому для домена XXX.synology.me у вас уже должен быть сертификат SSL. Как его получить в данном руководстве не рассматривается. Тоже самое относится и к TerraMaster.

Сами разработчики рекомендую устанавливать Nextcloud All-in-One:

⚠️⚠️⚠️ Этот образ поддерживается волонтерами сообщества и предназначено для экспертного использования. Для быстрого и простого развертывания, которое поддерживает полный набор функций Nextcloud Hub, используйте контейнер-докер Nextcloud All-in-One, поддерживаемый Nextcloud GmbH.

https://github.com/nextcloud/docker

Я несколько недель пытался оптимизировать установку Nextcloud All-in-One на Synology в контейнер Docker и так и не смог это сделать. Дело в том, что Nextcloud All-in-One это образ докер контейнера, который служит одной единственно цели: закачать вам на сервер контейнеры Nextcloud (само приложение, базу данных и другие компоненты), развернуть их и соединить между собой. Звучит и выглядит очень положительно и привлекательно, но на деле это не так.

Nextcloud All-in-One никак не учитывает структуру каталогов места где он разворачивается и как-то либо переделать это не представляется возможным. В результате файлы Nextcloud оказываются на системных томах и Synology или Terramaster перестают работать. За несколько недель экспериментов по установке мне пришлось несколько раз переустанавливать Synology DSM пока я не понял, что это тупиковое направление.

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

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

Выбор базы данных MariaDB или PostgreSQL тоже важен. Так на данный момент, все может поменяться, разработчики Nextcloud считают рекомендованным вариантом использовать MariaDB, но они подчеркивают, что это будет лучше для больших установок, где тысячи пользователей и много файлов. Для дома разницы нет никакой. С этим полностью несогласно сообщество, которое считает, что лучше использовать PostgreSQL. Поэтому я выбрал последнее, так как считаю, что для Synology и TerraMaster PostgreSQL будет наиболее выгодным вариантом из-за небольшого расхода ресурсов сервера при тех же результатах. Тем более, что PostgreSQL используется в Synology Drive и думаю не спроста. Но вы всегда сможете это изменить самостоятельно при желании.

Файл docker-compose.yml

Хотел бы отдельно рассказать про файл docker-compose.yml, что бы у вас было представление, что и для чего в нем сделано. Начнем по порядку сверху в низ.

Volumes содержит четыре папки, которые вам нужно будет создать вручную для развертывания проектов docker-compose. Эти папки я вынес из контейнеров в пространство пользователя по двум причинам. Первая это возможность внести изменения в файлы конфигурации при необходимости пряма из интерфейса DSM или TOS. Второе эти файлы можно резервировать на случай нештатных ситуаций для восстановления в будущем при необходимости.

  • db – в этой папке будут лежать файлы базы данных
  • config – в этой папке будут лежать все конфигурационные файлы
  • data – в этой папке будут лежать все файлы пользователей
  • redis – в этой папке может лежать большой файл и что бы он не занимал место на внутреннем томе, я вынес его отдельно.

Вы можете значительно повысить производительность вашего сервера Nextcloud с помощью кэширования памяти, при котором часто запрашиваемые объекты хранятся в памяти для более быстрого извлечения. Существует два типа кэшей для использования: кэш кода операции PHP, который обычно называется opcache, и кэширование данных для вашего веб-сервера. Если вы не установите и не включите локальный memcache, вы увидите предупреждение на странице администратора Nextcloud. 

https://docs.nextcloud.com/server/21/admin_manual/configuration_server/caching_configuration.html?highlight=redis

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

Services секция содержит 4 контейнера состоящих из 3 образов: postgres, nextcloud, redis. Это необходимые образы для работы Nextcloud в докер контейнерах.

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

  • PHP_MEMORY_LIMIT=4094M – устанавливает лимит ОЗУ, значение по умолчанию 512М
  • PHP_UPLOAD_LIMIT=16G – устанавливает лимит на загрузку файлов, значение по умолчанию 512М

Отдельно хочу отметить контейнер nextcloud-cron. Практически нигде в интернете он не упоминается, но он очень нужен. Nextcloud использует файл cron.php для инициирования процессов сканирования файлов, музыки, очистки мусора и других. Рекомендуется выполнять этот файл каждые 5-10 минут для обеспечения оптимальной работы приложения. По умолчанию это выполняется в режиме AJAX, т.е. каждый раз когда вы что-то делаете в веб интерфейсе nextcloud запускается планировщик. Это не проблема для одного пользователя, а когда их много или много файлов, то AJAX вызывает большие нагрузки на сервер, а это не очень хорошо. Плюс ко всему вы можете вообще годами не трогать веб интерфейс, а использовать клиент на ПК.

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

https://docs.nextcloud.com/server/28/admin_manual/configuration_server/background_jobs_configuration.html

Разработчики Nextcloud рекомендуют использовать планировщик cron для решения этой проблемы, но только вот незадача в docker контейнере он не работает. Поэтому для cron нужно запускать отдельный контейнер docker, который будет обрабатывать фоновые задачи и запускаться каждые 5 минут работая автономно. Потребляет такой контейнер пару мегабайт ОЗУ и это не должно вас беспокоить. Но если вы хотите, то можете запускать фоновые задачи вручную такими командами и в этом случаи удалите из yml файла контейнер nextcloud-cron:

Для Synology от пользователя root:

docker exec -itd --user www-data nextcloud-app php -f /var/www/html/cron.php

Для TerraMaster от пользователя с правами администратор:

/Volume1/@apps/DockerEngine/dockerd/bin/docker exec -itd --user www-data nexloud-app php -f /var/www/html/cron.php

Еще нужно не забыть выставить правильный часовой пояс, что бы фоновые задачи да и сам Nextcloud работали корректно. Узнать часовой пояс можно по этой ссылке.

Самое главное поменяйте параметры XXX.synology.me и 192.168.XXX.XXX на ваши значения. XXX.synology.me – это домен по которому вы будите подключаться к личному Nextcloud по порту 443 и к DSM по порту 5001, а 192.168.XXX.XXX – это локальный IP адрес вашего сервера например 192.168.1.10 или какой он у вас там.

Таким образом я разработал файл docker-compose.yml, который основан на рекомендованных параметрах, соответствует структуре каталогов Synology и Terramaster и обеспечивает корректную работу Nextcloud на протяжении всего срока службы. Этот YML можно использовать на любых ОС Linux и не только, в которых есть поддержка docker-compose.

version: '3'

# Автор Александр Linux сайт bafista.ru
# Век живи - век учись

volumes:
  db:
  config:
  data:
  redis:

networks:
  nextcloud:
    external: false

services:
  nextcloud-db:
    image: postgres:16.4
    container_name: nextcloud-db
    restart: unless-stopped
    volumes:
      - ./db:/var/lib/postgresql/data:Z
    environment:
      - TZ=Asia/Omsk # Смотри тут https://www.zeitverschiebung.net/en/all-time-zones.html
      - POSTGRES_PASSWORD=random_db_password
      - POSTGRES_DB=nextcloud
      - POSTGRES_USER=nextcloud
    networks:
      - nextcloud

  nextcloud-app:
    image: nextcloud
    container_name: nextcloud-app
    restart: unless-stopped
    ports:
      - 8088:80
    links:
      - nextcloud-db
    volumes:
      - ./config:/var/www/html:z
      - ./data:/var/www/html/data:z
    environment:
      - TZ=Asia/Omsk # Смотри тут https://www.zeitverschiebung.net/en/all-time-zones.html
      - POSTGRES_PASSWORD=random_db_password
      - POSTGRES_DB=nextcloud
      - POSTGRES_USER=nextcloud
      - POSTGRES_HOST=nextcloud-db
      - REDIS_HOST=nextcloud-redis
      - PHP_MEMORY_LIMIT=4094M
      - PHP_UPLOAD_LIMIT=16G
      - APACHE_BODY_LIMIT=0 # 0 - unlimit
      - NEXTCLOUD_TRUSTED_DOMAINS=XXX.synology.me 192.168.XXX.XXX
      - TRUSTED_PROXIES=XXX.synology.me 192.168.XXX.XXX
      - OVERWRITEHOST=XXX.synology.me
      - OVERWRITEPROTOCOL=https
    networks:
      - nextcloud
    depends_on:
      - nextcloud-db
      - nextcloud-redis

  nextcloud-redis:
    image: redis:alpine
    container_name: nextcloud-redis
    volumes:
      - ./redis:/data:z
    environment:
      - TZ=Asia/Omsk # Смотри тут https://www.zeitverschiebung.net/en/all-time-zones.html
    networks:
      - nextcloud
    restart: unless-stopped

  nextcloud-cron:
    image: nextcloud
    container_name: nextcloud-cron
    restart: unless-stopped
    volumes:
      - ./config:/var/www/html:z
      - ./data:/var/www/html/data:z
    environment:
      - TZ=Asia/Omsk # Смотри тут https://www.zeitverschiebung.net/en/all-time-zones.html
    entrypoint: /cron.sh
    networks:
      - nextcloud
    depends_on:
      - nextcloud-db
      - nextcloud-redis

Настройка обратного прокси

TerraMaster

В операционной системе TOS от TerraMaster нет функционала обратного прокси, а так же нет возможности получать и продлевать бесплатные SSL сертификаты. Поэтому вам придется сначала выполнить установку Nginx Proxy Manager на TerraMaster и там настроить обратный прокси для Nextcloud. В данной инструкции я не буду рассматривать эти настройки. Но по аналогии они один в один, как и у Synology.

Synology

В Synology DSM естm все необходимые компоненты. Открываете панель управления, портал для входа, дополнительно и обратный прокси. Тут создаете правило как показано на картинке ниже. Источник соединение https, имя домена, порт 443, назначение http, localhost и порт 8088 или тот что был у вас в yml файле. Затем на вкладке пользовательский заголовок нужно добавить WebSocket. В дополнительных настройках обязательно увеличить время минимум до 3600 секунд. Это время в течении которого должен будет загрузиться файл на сервер. Если файл будет загружаться дольше, то выйдет неизвестная ошибка и файл не загрузится. Не стоит делать этот параметр слишком большим, это только заставит выделять дополнительные ресурсы сервера, а нужного результата может не дать.

Установка Nextcloud на Synology

Я рекомендую создать отдельную общую папку Nextcloud на нужном для вас томе, где и будут располагаться все служебные файлы и данные пользователей. Сама папка создается через панель управления обсолютно стандартно. Едиснсвенно не рекомендую включать на ней корзину, так как в nextcloud есть своя корзина и спрятать ее от отображения по сети.

Но что бы все работало корректно через File Station зайдите в свойства этой папки, затем на вкладку разрешения и тут добавте группу Owner (владелец) с полными правами на все. Не забудте установить галочку применить ко всем файлам и подпапкам. Таким образом стандартные разрешения в DSM продолжат действовать, а созданные файлы самим nextcloud будут корректно читаться и изменяться, так как он будет их владельцем.

Теперь внутри каталога Nextcloud создайте четыре пустых папки: config data db redis

Теперь откройте Container Manager и создайте новый проект. Придумайте название, укажите папку проекта, и вставте заранее подготовленный текст yml. На остальные вопросы оставляйте по умолчанию и жмите везде далее.

В результете проект должен создастся и вы должны видеть Exit Code 0 означающий, что все получилось.

Установка Nextcloud на TerraMaster

Я рекомендую создать отдельную общую папку Nextcloud на нужном для вас томе, где и будут располагаться все служебные файлы и данные пользователей. Сама папка создается через панель управления обсолютно стандартно. Едиснсвенно не рекомендую включать на ней корзину, так как в nextcloud есть своя корзина и спрятать ее от отображения по сети.

Теперь внутри каталога Nextcloud создайте четыре пустых папки: config data db redis

Теперь откройте Docker Manager и создайте новый проект. Дайте ему название, укажите нужную папку и впишите заранее подготовленный yml текст. Когда ве готово проверьте конфигурацию и нажмите применить.

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

Разрешить сеть на фаерволе

Про настройку Synology Firewall Брандмауэр у меня есть статья и видео

Если у вас на Synology включен фаервол, то необходимо сеть бриджа проекта Nextcloud добавить в разрешающее правило. Для этого посмотрите какая сеть назначена вашему проектук. В моем случаи это 192.168.192 с маской 20, что равно 255.255.240.0

Каждый раз при создании проекта эта сеть меняется

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

Первоначальная настройка Nextcloud

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

На первом этапе нужно придумать логин и пароль администратора.

Затем Nextcloud предложит установить рекомендованные приложение. Если хотите, то можно их установить, я так и сделаю. Далее можно будет эти приложения удалить или установить отдельно.

И вот он веб интерфейс Nextcloud

Теперь нужно исправить несколько параметров, что бы Nextcloud работал корректно. Предупреждение под номером 1 я править не буду, меня устраивает то как есть. А вот 2 и 3 надо скорректировать.

Для создания необходимых индексов в базе данных и ускорения ее работы нужно в CLI через SSH или в планировщике задач от имени root (через sudo) дать такую команду:

docker exec -itd --user www-data nextcloud-app php /var/www/html/occ db:add-missing-indices

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

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

Теперь в папке config найдите файл с точкой .htaccess и откройте его текстовым редактором

Нужно найти и заменить две строчки с carddav и caldav на этот код. Естественно не забыть подправить на нужные для вас значения

RewriteRule ^\.well-known/carddav https://XXX.synology.me/remote.php/dav/ [R=301,L]
RewriteRule ^\.well-known/caldav https://XXX.synology.me/remote.php/dav/ [R=301,L]

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

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

Считаю, что первоначальная настройка на этом закончена и дальше настраивайте как вашей душе угодно этот Nextcloud HUB.


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


Для установки модуля bz2, как рекомендуют разработчики, нужно выполнить в CLI строке такие команды и перезагрузить контейнер nextcloud-app.

Если будите запускать эти команды через планировщик то замените -it на -itd

docker exec -it --user root nextcloud-app apt-get update
docker exec -it --user root nextcloud-app apt-get install -y libbz2-dev
docker exec -itd --user root nextcloud-app docker-php-ext-install bz2

Клиент Nextcloud на ПК

Клиент под Windows порадовал наличием поддержки виртуальных файлов как в Microsoft OneDrive так и Synology Drive, только в последних это называется синхронизация по запросу. Суть этого механизма в том, что файлы лежат у вас на сервере и только при необходимости они скачиваются на ПК. Если же к файлу долгое время не обращаться, время настраивается отдельно и по умолчанию 30 дней, то файл удаляется с ПК и остается только онлайн. Это очень сильно экономит место на дисках ПК. В общем все по современному.

А вот на MacOS поддержки виртуальных файлов не оказалось. В то время как на Synology Drive этот механизм уже давно работает. Может в будущем появится, поживем увидим.

Нюансы Nextcloud

Версии файлов

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

Приложение контроля версий автоматически удаляет старые версии, чтобы освобождать свободное место. Этот шаблон используется для удаления старых версий:

  • В первую секунду мы сохраняем одну версию
  • Первые 10 секунд Nextcloud сохраняет одну версию каждые 2 секунды.
  • В течение первой минуты Nextcloud сохраняет одну версию каждые 10 секунд
  • В течение первого часа Nextcloud сохраняет одну версию каждую минуту
  • В течение первых 24 часов Nextcloud сохраняет одну версию каждый час
  • В течение первых 30 дней Nextcloud хранит одну версию каждый день.
  • После первых 30 дней Nextcloud сохраняет одну версию каждую неделю.

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

Приложение версии никогда не использует более 50% доступного в данный момент свободного места пользователя. Если сохраненные версии занимают больше, Nextcloud удаляет самые старые версии до тех пор, пока не будет снова достигнут предел дискового пространства.

Корзина

Когда вы удаляете файл в Nextcloud, он не удаляется сразу, он перемещается в корзину. Файл не удаляется окончательно, пока вы не удалите его вручную или когда приложение «Удаленные файлы» удалит его, чтобы освободить место для новых файлов.

Чтобы пользователи не выполняли свои квоты хранения, приложение «Удаленные файлы» выделяет не более 50% доступного в настоящее время свободного пространства для удаленных файлов. Если ваши удаленные файлы превышают этот предел, Nextcloud удаляет самые старые файлы (файлы с самыми старыми временными метками с момента их удаления) до тех пор, пока не будет снова достигнут предел использования памяти.

Nextcloud проверяет возраст удаленных файлов при каждом добавлении новых файлов в удаленные файлы. По умолчанию удаленные файлы остаются в корзине 30 дней. Администратор сервера Nextcloud может изменить это значение в файле config.php, установив значение trashbin_retention_obligation. Файлы старше значения trashbin_retention_obligation будут удалены без возможности восстановления. Кроме того, Nextcloud рассчитывает максимальное доступное пространство каждый раз, когда добавляется новый файл. Если удаленные файлы превышают новый максимально допустимый объем, Nextcloud уменьшит срок хранения старых удаленных файлов, пока не будет достигнут предел максимально допустимого пространства.

Конфликты файлов

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

Какой вывод

Мне очень понравился Nextcloud. Приложение на ПК Windows работает как от него и ожидаешь. Для пользователей MacOS конечно такой расклад не подходит. В прочем пользователи Linux вообще в пролете везде. Тем не менее Nextcloud можно очень гибко и функционально настроить под ваши задачи, а интеграция с контактами и календарем на телефоне через Cardav и Caldav поможет не хранить ваши личные данные на сервисах иностранных компаний.

С телефона можно без проблем автоматически сгружать фотографии на сервер. Формат HEVC\HEIC правда не поддерживается, но можно преобразовывать в JPG прямо при синхронизации и потом все фотографии будут на сервере, где придется придумать как их просматривать, но это решаемо.

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

Видео ролик

YouTube player
Подписаться
Уведомить о
guest
58 Комментарий
Старые
Новые
Межтекстовые Отзывы
Посмотреть все комментарии