В данном посте я хотел бы рассмотреть способ установки персонального облака на домашний сервер Synology при помощи Docker, поделиться своими ошибками и опытом использования в повседневной жизни. Я буду признателен, если более опытные пользователи habr также поделятся своим опытом и расскажут, как им помог Nextcloud в повседневной жизни или какие трудности в установке ими были пройдены.

Знакомство с Docker

С покупкой небольшого домашнего сервера Synology DS718+ в 2017 году я подсел на постоянную оптимизацию. Приложений из центра пакетов мне оказалось мало и так я дошел до Docker.

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

Установка Docker

Запустите Центр пакетов

Нажмите на приложение Docker

Нажмите «Установить», чтобы установить приложение Docker на Synology NAS.

Выберите том для установки из раскрывающегося меню. Затем нажмите «Далее», как показано на снимке экрана ниже.

Нажмите «Применить»

Установка приложения может занять несколько секунд. Как только она завершится, Вы сможете нажать «Открыть», чтобы открыть приложение Docker.

Перед началом я рекомендую пробежаться по руководству к Docker от Synology. Это поможет сформировать общее представление об основных элементах интерфейса.

Установка Nextcloud

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

Установка через приложение Docker

Для поиска контейнеров, нам необходимо перейти во вкладку «Реестр» и ввести в поисковую строку «Nextcloud»

Мы рассмотрим установку контейнера linuxserver/nextcloud (второй в списке) через веб интерфейс. В отличии от официального контейнера nextcloud (первый в списке), он уже включает в себя базу данных SQLite, nginx и php.

Щелкаем правой кнопкой мышки по контейнеру linuxserver/nextcloud и нажимаем «Загрузить это изображение».

Выбираем последнюю версию с тегом «latest» из раскрывающегося списка и нажимаем «Выбрать»

Загрузка может заняться несколько минут. После ее окончания в левом боковом меню выбираем вкладку «Образ» и находим в списке nextcloud. Выбираем нажатием клавиши и нажимаем клавишу «Запустить» в верхнем меню.

В появившемся окне вводим имя нашего контейнера и жмем кнопку дополнительные настройки.

В разделе «Дополнительные настройки» ставим галочку напротив «Включить автоматический перезапуск»

Далее переходим в раздел «Том» и добавляем две папки формата:
/path/to/config:/config и /path/to/data:/data.

Во вкладке «Сеть» оставляем без изменений выбранную сеть.

Во вкладке «Настройки портов» пробрасываем порт из контейнера в Synology NAS. Вводим любые незанятые порты, отличные от 443 и 80. В своем примере я использую 441 и 79.

Далее переходим во вкладку «Защита окружающей среды». Здесь с помощью иконки «+» нам необходимо добавить следующие переменные и значения:

PUID=1000
PGID=1000
TZ=Europe/Moscow

Нажимаем кнопку «Применить» -> «Далее» -> «Применить»

Наш контейнер успешно создан и доступен во вкладке бокового меню «Контейнер».

Чтобы войти в наш контейнер, нам нужно не забыть пробросить порты. На данном этапе подразумевается, что Вы уже настроили внешний доступ для NAS и разобрались с port forwarding. Если нет, то подробней об этом можно почитать в документации synology здесь. После этого вводим в веб браузере адрес контейнера https://nameserver:441 и создаем учетную запись администратора. База данных по умолчанию доступна SQLite. Нажимаем «Создать». Загрузка может занять некоторое время, после чего страница перенаправит нас на стартовую страницу.

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

Настройка nextcloud

Список доверенных имен

Первая проблема с которой мы сталкиваемся - это ошибка при попытке входа извне.

Для ее решения нам необходимо внести наше доменное имя в файл config.php. Для этого нам потребуется подключиться к нашему Synology NAS по SSH. Убедитесь, что доступ активен и указан порт, а в случае подключение извне - проброшен порт. Подробней о настройке доступа с root правами вы можете прочесть здесь.

Входим в наш докер контейнер

docker exec -it namecontainer sh

Имя контейнера можно посмотреть с помощью команды docker ps. Далее открываем файл config.php

vi /config/www/nextcloud/config/config.php

Находим параметр 'trusted_domains' и добавляем туда новый домен. Должно получиться так

  'trusted_domains' =>
    array (
    0 => 'localip:yourport',
    1 => 'domainname:yourport', ),

Готово! Теперь в наше облако можно заходить извне.

Лимит загрузки

По умолчанию, лимит загрузки одного файла установлен на 512 мегабайт. Чтобы его увеличить, нужно отредактировать файлы php.ini и config.php.

Для этого нам необходимо войти в наш докер контейнер (см. выше) и ввести команду:

vi ./etc/php7/php.ini

Здесь ищем и редактируем следующие параметры, предварительно нажав «i» на клавиатуре:

max_execution_time=0 #(строка 388)
max_input_time=-1 #(строка 398)
memory_limit=-1 #(строка 409)
post_max_size=50G #(строка 694)
upload_max_filesize=50G #(строка 846)

Укажите значение параметров, которые подходят Вам, затем нажмите «Esc» на клавиатуре и введите «:wq» для сохранения изменений.

Аналогично делаем для config.php

vi ./config/www/nextcloud/config/config.php

Добавляем

'session_lifetime' => 60 * 60 * 24,  
'session_keepalive' => true,

После внесения изменений сохраняем.

Подключение внешних дисков

Еще одна замечательная возможность Nextcloud - это подключение внешних служб хранения. Для этого нам понадобится нажать на иконку профиля в правом верхнем углу и перейти в «Приложения» -> «Ваши приложения», находим расширение External Storage и нажимаем «Включить».

Чтобы добавить внешнюю службу, нам необходимо перейти в «Настройки» -> «Внешнее хранилище» и выбрать из выпадающего списка один из доступных вариантов:

  • Amazon S3

  • FTP

  • Nextloud

  • SFTP

  • SMB/CIFS

  • WebDAV

  • Локально

  • OpenStack

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

Подключение папки из Synology NAS

Для того, чтобы Nextcloud мог увидеть папку на Вашем Synology, первым делом необходимо смонтировать эту папку в наш контейнер. Сделать это можно через графический интерфейс приложения Docker. Останавливаем наш контейнер, нажимаем по нему правой кнопкой мыши и выбираем «Том» -> «Добавить папку». Указываем нужную нам папку и нажимаем «Выбрать». В поле «Путь для подключения» укажите как эта папка будет называться в Nextcloud.

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

Добавление папки temp
Добавление папки temp

Запускаем наш контейнер и открываем Nextcloud в браузере. Переходим в «Настройки» -> «Внешнее хранилище» и выбираем из списка «Локально». Указываем имя папки, которую будет отображать Nextcloud, указываем расположение и нажимаем на галочку.

Далее нам необходимо войти с root правами в контейнер. Для подключения вводим:

docker exec -it namecontainer sh

Затем отредактируем владельца и права доступа нашей папки

chown -R abc:abc /shared/temp
chmod 0750 /shared/temp

На данном этапе мы сможем увидеть файлы, которые хранятся в нашей папке. Однако для более стабильной работы рекомендуется настроить сканирование с помощью cron. Подробней об этом можно прочитать здесь. По умолчанию для linuxserver/nextcloud оно уже настроено. Проверить это можно с помощью команды:

crontab -u root -l

В случае если Вы захотите внести изменения в интервал сканирования, то Вам понадобится команда:

crontab -u root -e

Синхронизация календаря и контактов с IOS/AOS

Мне очень нравится календарь Nextcloud и я часто пользуюсь им при планировании своего расписания. Его можно легко интегрировать в стандартное приложение мобильного устройства.

Для IOS

Откройте «Настройки» -> «Календарь» -> «Учетные записи» -> «Учетные записи» -> «Другое» -> «Учетная запись CalDAV» и укажите имя сервера, пользователя и пароль.

Для Android

  • Установите DAVx5 на свое устройство

  • Откройте приложение «Nextcloud» -> «Настройки» -> «Синхронизировать календарь и контакты»

  • Авторизуйтесь в с DAVx5

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

  • Коснитесь значка учетной записи DAVx5 и выберите какие данные вы хотите синхронизировать

Установка OnlyOffice

На мой взгляд, лучшим дополнением для Nextcloud является именно OnlyOffice - пакет сервисов для работы с документами, который поддерживает более 20+ форматов, обеспечивает совместную работу и интеграцию с популярными облаками. Установить его можно из библиотеки приложений Docker.

Установка OnlyOffice через приложение Docker

Для поиска контейнеров, нам необходимо перейти во вкладку «Реестр» и ввести в поисковую строку «OnlyOffice»

Для установка нам потребуется onlyoffice/documentserver (первый в списке). Щелкаем правой кнопкой мышки по контейнеру onlyoffice/documentserver и нажимаем «Загрузить это изображение».

Выбираем последнюю версию с тегом «latest» из раскрывающегося списка и нажимаем «Выбрать»

Загрузка может заняться несколько минут. После ее окончания в левом боковом меню выбираем вкладку «Образ» и находим в списке onlyoffice. Выбираем нажатием клавиши и нажимаем клавишу «Запустить» в верхнем меню.

Во всплывающем окне задаем имя нашему контейнеру и нажимам на кнопку «Дополнительные настройки»

В первой вкладке ставим галочку напротив поля «Включить автоматический перезапуск»

Далее переходим во вкладку «Том». Здесь необходимо добавить две папки: «data» и «logs»

Во вкладке «Сеть» оставляем без изменений выбранную сеть.

Во вкладке «Настройки портов» пробрасываем порт из контейнера в Synology NAS. Вводим любые незанятые порты, отличные от 443 и 80. В своем примере я использую 319 и 320.

Нажимаем кнопку «Применить» -> «Далее» -> «Применить»

Наш контейнер успешно создан и доступен во вкладке бокового меню «Контейнер».

После успешной установки необходимо отредактировать файл config.php и исправить список доменных имен, однако Nextcloud позволяет добавить только https сервер onlyoffice. Для запуска под https есть два варианта настройки: через добавление сертификата в контейнере и использование встроенный функционал synology, а именно обратный прокси. Второй вариант мне кажется более простым и интересным. С помощью данного метода можно настроить любой контейнер под https без особых усилий и иметь прямой доступ по имени.

Для этого нам нужно перейти в «Панель управления» Synology и выбрать «Портал приложений» -> «Обратный прокси». Нажимаем «Создать»

В появивишемся окне задаем описание, указываем источник и место назначения.

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

Примечание. Имя хоста задается в формате name.nameserver.synology.me

Нажимаем «ОК»

Аналогичную операцию необходимо проделать для Nextcloud.

Обратите внимание, что для того чтобы не создавать сертификат вручную, в настройках сертификата synology должно быть имя формата «*.nameserver.synology.me». Подробней об этом можно прочитать здесь. Также на вашем роутере должен быть проброшен порт 443 и настроен NAT Loopback (в некоторых роутерах это происходит автоматически).

Готово! Теперь контейнер onlyoffice доступен по прямой ссылке https://homeserver.nameserver.synology.me и можно переходить к редактированию файла config.php

Для этого заходим под root в контейнер Nextcloud

docker exec -it namecontainer sh

Имя контейнера можно посмотреть с помощью команды docker ps. Далее открываем файл config.php

vi /config/www/nextcloud/config/config.php

Добавляем параметр 'allow_local_remote_servers'

'allow_local_remote_servers' => true,

И редактируем список доверенных имен с помощью параметра 'trusted_domains', добавляя в него новую строчку

'trusted_domains' =>
array (
0 => '192.168.XX.XX:port',
1 => 'nextcloud.nameserver.synology.me',
2 => 'homeoffice.nameserver.synology.me',
),

Не забудьте поменять зачения на свои, затем нажмите «Esc» на клавиатуре и введите «:wq» для сохранения изменений.

Следующим шагом нам необходимо скачать и включить расширение OnlyOffice в списке Приложений Nextcloud. Для этого откроем Nextcloud в браузере, в правом верхнем углу нажимаем на иконку профиля и выбираем «Приложения». Находим расширение OnlyOffice и нажимаем «Скачать и включить»

Переходим в «Настройки» -> «Onlyoffice», указываем адрес ONLYOFFICE Docs и нажимаем «Сохранить».

Не забудьте настроить форматы, которые будут открываться через OnlyOffice и вперед к использованию! :)

Комментарии (14)


  1. sanjesss
    17.05.2022 23:08

    После перезагрузки этот сетап оживёт? Изменения ведь в контейнере происходят


    1. itsmycreative Автор
      17.05.2022 23:14

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


  1. Borz
    17.05.2022 23:40
    +1

    чем вам не подошли пакеты из "коробки"? Cloud Sync, Synology Drive Server, Synology Contacts, Synology Office, Synology Calendar... которые при этом интегрированы с учётками на самом NAS

    Точнее, хотелось бы раскрытия темы "Приложений из центра пакетов мне оказалось мало"

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


    1. itsmycreative Автор
      18.05.2022 11:23

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

      Как и написано в статье - способов установки существует не мало. Спасибо, что поделились своим.


    1. crims0n_ru
      19.05.2022 01:44
      +1

      Ansible для установки на один хост? Для этого лучше подойдёт docker-compose. Он, кстати, есть в DSM.


      1. Borz
        19.05.2022 07:17

        Ansible для установки на один хост?


        ну, я через Ansible дома не только NAS настраиваю...

        И использование Docker Compose не отменяет применение Ansible - им точно так же можно управлять и Docker-Compose конфигурацией


        1. crims0n_ru
          19.05.2022 08:30

          Мне кажется, что это всё только усложняет. Использование Ansible только ради использования Ansible. Действий больше, а результат тот же.


          1. Borz
            19.05.2022 08:46

            не совсем тот же... Но раз вы не видите в нём необходимости, то он вам и не нужен...


  1. QuAzI
    18.05.2022 09:16

    Вот бы кто подсказал какой нормальный NAS для SOHO с ZFS из коробки


    1. UNIm95
      18.05.2022 22:58
      +1

    1. AlexanderS
      18.05.2022 23:35

      Microserver Gen8 + TrueNAS.


  1. VladTulku
    18.05.2022 09:32

    Запустить два контейнера на 2 Гигах оперативки это то ещё извращение!


    1. itsmycreative Автор
      18.05.2022 11:37

      Очень важное замечание, спасибо, что обратили на это внимание! Количество затрачиваемой оперативной памяти зависит от контейнера и его использования. Если верить статистике моего NAS, то за пределы 2ГБ я не выхожу, хотя в работе находится в среднем ~5 контейнеров. Но Вы правы, это подойдет не на каждый NAS от Synology. Также я могу посоветовать увеличить объем оперативной памяти для увеличения производительности. Подробней Вы можете прочитать в руководстве от Synology здесь или нагуглить самостоятельно.


    1. crims0n_ru
      19.05.2022 01:52
      +2

      А в чём проблема? Контейнер - это же не виртуалка, он потребляет столько же оперативной памяти, сколько бы потреблял процесс, запущенный из локально установленного пакета.