Подключаем Nextcloud к s3ql – файловой системе на базе облачного хранилища

2021-03-28 1991 комментарии
Рассмотрим инструкцию по подключению пользовательской директории Nextcloud к файловой системе s3ql, которая хранит все свои данные в Интернете с помощью таких сервисов хранения, как Google Storage, Amazon S3 и OpenStack

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

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

Nextcloud – платформа, предлагающая набор программ для создания собственного облачного хранилища. Nextcloud поддерживает функцию внешнего хранилища, с помощью которой можно подключить (монтировать) внешние облачные хранилища, работающие по протоколу Amazon S3, FTP/FTPS, OpenStack Object Storage, SFTP, SMB/CIFS, WebDAV.

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

Таким образом мы можем легко расширить файловое хранилище, при этом использовать недорогой сервис, предоставляющий хранение по протоколу S3 (протокол, совместимый с объектным хранилищем Amazon S3).

Как видно на скриншоте ниже, на сервере использовано всего 13 ГБ объема диска, при этом на Nextcloud (который расположен на этом сервере), использовано 182 ГБ объема диска. Используются параметры производительности сервера, но в качестве физического диска используется файловая система S3QL.

Обобщено, нам нужно установить пакет s3ql, примонтировать сетевую файловую систему, перенести данные Nextcloud в новую файловую систему, в настройках конфигурационного файла Nextcloud указать новое расположение директории хранения данных, создать службу systemd для автоматического монтирования файловой системы (в случае перезагрузки системы).

Установка и монтирование файловой системы S3QL

В качестве операционной системы используется Ubuntu 20.04. Пакет s3ql доступен в репозитории Ubuntu, однако версия выше в более новых версиях дистрибутива. По этой причине рекомендую использовать Ubuntu версии 20.04 или другой дистрибутив, который чаcто обновляет пакеты.

Установка пакета s3ql:

sudo apt install s3ql

Создаём директорию (каталог, папку), в которую будет примонтирована файловая система s3ql:

sudo mkdir -p /mnt/nextcloud

Название каталога может быть произвольным.

Задаем необходимые права для каталога:

chown -R www-data:www-data  /mnt/nextcloud

В качестве хранилища S3 я выбрал сервис Wasabi. Цена одна из самых минимальных, скорость отличная. В сочетании с сервером Hetzner, скорость открытия файлов не отличается от скорости расположения файлов на сервере. Кроме того, Wasabi официально поддерживает файловую систему s3ql.

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

Пример инициализации при использовании бэкэнда Amazon S3, где nikratio-s3ql-bucket – это бакет S3, в котором будет храниться файловая система:

mkfs.s3ql s3://ap-south-1/nikratio-s3ql-bucket

Пример инициализации при использовании Wasabi:

mkfs.s3ql s3c://s3.wasabisys.com:443/<BUCKET-NAME>

Где <BUCKET-NAME> это название созданного вами бакета.

В процессе инициализации необходимо будет указать данные access-key, secret-key, которые можно получить при создании пользователя в используемом сервисе S3. В ходе запроса данных encryption password можно ничего не указывать и нажать Enter.

Монтирование файловой системы s3ql в созданную ранее папку:

mount.s3ql s3://ap-south-1/nikratio-s3ql-bucket  /mnt/nextcloud

Пример монтирования s3ql при использовании Wasabi:

mount.s3ql s3c://s3.wasabisys.com:443/<BUCKET-NAME>  /mnt/nextcloud

Размонтирование (отключение) файловой системы:

umount.s3ql  /mnt/nextcloud

Другие команды s3ql

  • fsck.s3ql – проверка файловой системы s3ql
  • s3qlstat – статистика файловой системы s3ql

Создание службы systemd для s3ql

Служба sysmd будет использовать в качестве автомонтирования файловой системы s3ql.

Сначала нужно создать файл авторизации:

nano /etc/s3ql.authinfo

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

[wasabi-s3]

backend-login: access-key

backend-password: secret-key

storage-url: s3c://s3.wasabisys.com:443/<BUCKET-NAME>

Сохраняем изменения и закрываем редактор nano комбинацией клавиш CTRL+O, CTRL+X.

Где access-key, secret-key – ключи, полученные на используемом сервисе, а BUCKET-NAME – название бакета.

Задаем права файлу авторизации:

chmod 600 /etc/s3ql.authinfo

Создаем папку /var/cache/s3ql:

sudo mkdir -p /var/cache/s3ql

Создаем службу systemd:

nano /etc/systemd/system/s3ql-mounthing.service

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

[Unit]

Description=mount s3ql filesystem

Wants=network-online.target

[Service]

ExecStart=/usr/bin/mount.s3ql --fg --cachedir /var/cache/s3ql --authfile /etc/s3ql.authinfo --compress none --cachesize 1048576 --allow-other s3c://s3.wasabisys.com:443/tuxcloud /mnt/nextcloud

ExecStop=/usr/bin/umount.s3ql /mnt/nextcloud

TimeoutStopSec=42

[Install]

WantedBy=multi-user.target

Где tuxcloud – это название вашего бакета, а /mnt/nextcloud – папка монтирования файловой системы s3ql.

Сохраняем изменения и закрываем редактор nano комбинацией клавиш CTRL+O, CTRL+X.

Включаем службу:

systemctl enable s3ql-mounthing

Для проверки, вы можете перезагрузить систему и затем проверить статус службы командой systemctl status s3ql-mounthing

Перенос данных, пользовательской папки (директории) Nextcloud в новое расположение

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

Останавливаем службы, необходимые для Nextcloud:

service nginx stop

service php7.4-fpm stop

service redis-server stop

service mysql stop

Проверяем, если права папки монтирования принадлежат www-data, если нет, то задаем их:

chown -R www-data:www-data /mnt/nextcloud

Копируем содержимое данных пользовательского каталога Nextcloud в примонтированную папку:

rsync -av /nextcloud-data/ /mnt/nextcloud

Где nextcloud-data – это используемый каталог, указанный в ходе установки Nextcloud, у вас может быть другой. А /mnt/nextcloud – ранее созданный каталог для монтирования файловой системы s3ql.

Вносим изменения в конфигурационный файл Nextcloud:

sudo -u www-data nano /var/www/nextcloud/config/config.php

В следующих двух строках указываем новое расположение пользовательского каталога Nextcloud:

...
'datadirectory' => '/mnt/nextcloud',
...
и ниже:
[...]
'logfile' => '/mnt/nextcloud/nextcloud.log',
[...]

Так же меняем параметр строки filelocking.enabled с true на false.

[...]

 'filelocking.enabled' => 'false',

[...]

Сохраняем изменения и закрываем редактор nano комбинацией клавиш CTRL+O, CTRL+X.

Перезапускаем ранее остановленные службы и выполняем индексирование:

service php7.4-fpm start

service redis-server start

service mysql start

cd /var/www/nextcloud

redis-cli -s /var/run/redis/redis-server.sock 

FLUSHALL

quit

sudo -u www-data php occ files:scan --all -v

sudo -u www-data php occ files:scan-app-data -v

service nginx restart

Некоторое время потребуется для загрузки скопированных файлов на сервер S3.

Решение возможных проблем

Столкнулся с проблемой, при которой сразу после переноса данных, функция «Версии» сохраняла в большом количестве версии файлов. Решение:

sudo -u www-data php /var/www/nextcloud/occ versions:cleanup Tux

Где Tux – это имя пользователя Nextcloud.

Никаких других проблем не было. Использую сервер от Hetzner, перед созданием снимков системы (snapshot), останавливаю службы, необходимые для Nextcloud, затем делаю снимок.

Перенос данных, пользовательской папки (директории) в Nextcloud snap

Инструкция по переносу пользовательской директории Nextcloud при использовании версии Nextcloud snap в удаленную файловую систему s3ql.

Nextcloud snap позволяет использовать другое расположение пользовательского каталога только в директориях /media/ и /mnt/, поэтому монтировать файловую систему s3ql надо только в одну из перечисленных директорий.

Из инструкции выше выполните шаги по установке пакета s3ql, созданию файла s3ql.authinfo и каталога монтирования, директории кэширования /var/cache/s3ql и службы systemd – s3ql-mounthing. А так же выполните монтирование файловой системы s3ql.

Прежде чем мы сменим пользовательскую директорию в конфигурационном файле Nextcloud, нам нужно подключить модули removable-media и network-observe:

sudo snap connect nextcloud:removable-media

sudo snap connect nextcloud:network-observe

Согласно официальному руководству отключаем Nextcloud:

sudo snap stop nextcloud

Меняем расположение пользовательского каталога в конфигурационном файле:

sudo nano /var/snap/nextcloud/current/nextcloud/config/config.php
// ...

 'datadirectory' => '/mnt/nextcloud',

 // ...

Где /mnt/nextcloud – это созданный каталог для монтирования s3ql.

Копируем содержимое каталога данных в новую директорию:

rsync -av /var/snap/nextcloud/common/nextcloud/data /mnt/nextcloud

Запускаем Nextcloud snap:

sudo snap start nextcloud
© . Анатолий Гусляков

Комментарии и отзывы

Добавляя комментарий, ознакомьтесь с Правилами сообщества

Нашли ошибку?