🔧 Подключение S3-хранилища Selectel или Yandex к Nextcloud через CunoFS с POSIX-доступом

📌 Цель

  • Смонтировать S3-бакет baket-name (Selectel) в /mnt/nextcloud
  • Включить POSIX-доступ для управления правами chmod/chown
  • Проверить доступность для пользователя www-data (Nextcloud)
  • Подготовить к использованию как data-директорию или внешнее хранилище

🔐 1. Получение лицензии CunoFS

  1. Перейди на сайт: https://cunofs.com
  2. Перейдите по ссылке https://cuno.io/register/ и укажи :
    • Email
    • Название компании (можно любое)
    • Цель использования (например: Nextcloud + S3)
  3. Получи письмо со ссылкой на .run-файл и лицензионным ключом.
  4. Ключ нужно будет ввести при установке cuno.

🧱 2. Установка CunoFS

wget https://github.com/cunoFS/cunoFS/releases/latest/download/cuno_amd64_glibc_deb.run
chmod +x cuno_amd64_glibc_deb.run
sudo ./cuno_amd64_glibc_deb.run

Скрипт выведет соглашение вводим : y

Please type y to accept, n otherwise: y

После выедет сообщение о том что нужно установить cudo:

Creating directory cuno_1.2.7_amd64_glibc_deb
Verifying archive integrity...  100%   All good.
Uncompressing CUNO v1.2.7  100%  
Extraction complete. Please install cuno_1.2.7_amd64_glibc.deb with apt.

После распаковки устанавливаем:

cd cuno_*_amd64_glibc_deb
sudo apt install ./cuno_*.deb

В конце установки спросит :

###### Welcome to cunoFS ######

cunoFS License Manager - This utility will help you activate cunoFS.

Please select an option:
					
1. Activate a free 14-day trial of cunoFS Professional now, no sign up required
2. Activate your license 
3. Skip activation (cunoFS will not work until you activate)

Please select 1, 2 or 3 and submit (press enter/return): 

Если вы получили лицензионный ключ на e-mail нужно выбрать 2 и ввести полученный ключь активации:

Please select 1, 2 or 3 and submit (press enter/return): 2

Please enter a license key or the full path to a license file: 

Успешная установка

License type: Personal
Start date: 2025-Jun-07
Expiration date: 2099-Jan-01

1. Load cunoFS by running:
       $ cuno

2. Try it out by exploring some public datasets!

   > Check out images from the James Webb Space Telescope on AWS S3:
       (cuno) $ ls s3://stpubdata/jwst/public/

   > Or investigate satellite images on Google Cloud Storage:
       (cuno) $ ls gs://gcp-public-data-landsat/

   > Or even take a look at COVID-19 pandemic data on Azure:
       (cuno) $ ls az://pandemicdatalake/public/curated/

3. For instructions on how to set up cunoFS for your environment, access private buckets,
   and more, see the documentation at https://cuno-cunofs.readthedocs-hosted.com

Processing triggers for man-db (2.12.0-4build2) ...
Processing triggers for libc-bin (2.39-0ubuntu8.4) ...
Scanning processes...                                                                                                                
Scanning linux images...                                                                                                             

Running kernel seems to be up-to-date.

No services need to be restarted.

No containers need to be restarted.

No user sessions are running outdated binaries.

No VM guests are running outdated hypervisor (qemu) binaries on this host.
N: Download is performed unsandboxed as root as file '/root/cuno_1.2.7_amd64_glibc_deb/cuno_1.2.7_amd64_glibc.deb' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied)

Сообщение:

N: Download is performed unsandboxed as root as file '/root/cuno_1.2.7_amd64_glibc_deb/cuno_1.2.7_amd64_glibc.deb' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied)

не критическая ошибка, это предупреждение от apt о том, что он не может проверить .deb из-за ограничений прав доступа. Оно не мешает установке и появляется, когда ты устанавливаешь .deb из каталога, доступного только root.

Способ установки если не удалось из root:

mv /root/cuno_1.2.7_amd64_glibc_deb/cuno_1.2.7_amd64_glibc.deb /tmp/
sudo apt install /tmp/cuno_1.2.7_amd64_glibc.deb

Проверь версию:

cuno --version

Выведет:

CUNO v1.2.7 (c78d9341df)

Шпаргалка Cuno:

📦 Управление учётными данными (credentials)
sudo -u www-data cuno creds import credentials.txtИмпорт файла с S3-ключами
sudo -u www-data cuno creds listПоказать все учётные данные и связки бакетов
sudo -u www-data cuno creds pair s3://baket-name-1 credentials.s3cПривязать бакет к учётным данным
sudo -u www-data cuno creds unpair s3://baket-name-1Отвязать бакет от учётных данных
sudo -u www-data cuno creds purge credentials.s3cУдалить импортированные учётные данные
sudo -u www-data cuno creds setposix s3://baket-name-1 trueВключить POSIX-режим для бакета (если поддерживается)
sudo -u www-data cuno creds info s3://baket-name-1Получить информацию о бакете
🔗 Монтирование и демонтаж
sudo -u www-data cuno mount –posix –root s3://baket-name-1 /mnt/nextcloudМонтировать бакет с POSIX-правами
sudo -u www-data cuno mount –unmount /mnt/nextcloudРазмонтировать путь
sudo -u www-data fusermount3 -u /mnt/nextcloudАльтернативный способ размонтирования
sudo -u www-data cuno -o uid=33 -o gid=33 -o filemode=0644 -o dirmode=0755 mount -o allow_other –root s3://baket-name-1 /mnt/nextcloudЗадать владельца и права по умолчанию при монтировании
👥 Работа с пользователями
sudo -u www-data cuno mount …Запуск монтирования от имени пользователя
sudo -u www-data touch /mnt/nextcloud/file.txtПроверка прав записи
sudo -u www-data cuno creds listПоказать все учётные данные и связки бакетов от пользователя www-data
sudo -u www-data cuno creds purge credentials.s3cУдалить импортированные учётные данные
⚠️ Обязательно настрой allow_other в /etc/fuse.conf: ниже есть пояснение

🔐 2. Создание файла учётных данных для пользователя www-data

Создай файл credentials.txt в домашнем каталоге www-data:

nano /var/www/credentials.txt
aws_access_key_id = YOUR_ACCESS_KEY
aws_secret_access_key = YOUR_SECRET_KEY
endpoint = https://s3.ru-1.storage.selcloud.ru
region=ru-1

Пример для Yandex или Selectel может быть endpoint https://storage.yandexcloud.net или https://s3.storage.selcloud.ru . Регион обязателен для Selectel

Сохрани (в nano : ctrl-O, ctrl-X) и задай права:

sudo chown www-data:www-data /var/www/credentials.txt
sudo chmod 0600 /var/www/credentials.txt

Так же нужно создать скрытую папку .config

sudo mkdir -p /var/www/.config/
sudo chown www-data:www-data /var/www/.config/


📥 3. Импорт в CunoFS

sudo -u www-data cuno creds import /var/www/credentials.txt

Увидишь:

- Examining credential file..
- Importing credential file into CUNO's credentials store...
- Detecting available buckets/containers..
Detected buckets: 2     
- Attempting to pair 2 buckets/containers..
Paired 2/2 buckets: 
 [+] s3://baket-name-1
 [+] s3://baket-name-2

🔐 Важно: разрешение FUSE для других пользователей

Для использования -o allow_other в CunoFS:

sudo nano /etc/fuse.conf

Найдите строку:

#user_allow_other

И раскомментируйте её (уберите #):

user_allow_other

Сохраните файл (Ctrl + OEnterCtrl + X). Без этой настройки монтирование с allow_other завершится ошибкой.

⚙️ 4. Включение POSIX-доступа на бакете

Например если нужно установить на монтируемую папку /mnt/nextcloud другие права . По умолчанию права устанавливаются 0777. Но после монтирования права не устанавливаются . С данной проблемой так и не разобрался.

💡 Советы

  • Права в POSIX-режиме хранятся в объектном хранилище (в скрытых объектах), и их можно менять обычными Unix-командами (chmod, chown, chgrp).
  • Установка -o dirmode=0755 работает только при первом монтировании без POSIX-режима, либо если POSIX-метаданных ещё не было.

sudo -u www-data cuno creds setposix s3://baket-name-1 true

Это позволит использовать chown, chmod и POSIX-права на вложенные папки /mnt/nextcloud.

Если при выполнении:

sudo -u www-data cuno creds setposix s3://baket-name-1 true

вы получаете ошибку:

NotImplemented: A header you provided implies functionality that is not implemented.

— это означает, что ваш S3-провайдер (например, SelCloud) не поддерживает установку тегов на бакеты.
В этом случае пропустите эту команду и просто укажите флаг --posix при монтировании:

sudo -u www-data cuno mount --posix -o allow_root -o allow_other --root s3://baket-name-1 /mnt/nextcloud

⚠️ Ограничение: POSIX-метаданные будут храниться локально на машине, а не в бакете. Это означает, что на других серверах при монтировании тех же данных POSIX-права не сохранятся. Но мы и не рассматриваем подключение бакета еще где то .

✅ Если не получается поменять права на корневую папку монтирования: Пересоздать бакет (если он пустой)

Если вы только тестируете и можете позволить себе очистить бакет:

  1. Удалите бакет или папку.
  2. Создайте заново.
  3. Смонтируйте с нужными -o filemode и -o dirmode.

📂 5. Монтирование S3-бакета как локальной POSIX ФС

Создай точку монтирования:

sudo mkdir -p /mnt/nextcloud

Выполни монтирование:

sudo -u www-data cuno -o filemode=0644 -o dirmode=0755 mount --posix -o allow_root -o allow_other --root s3://baket-name-1 /mnt/nextcloud

Вывод:

Setting fusermount3 (fum3) options for POSIX enforcement: -o allow_other -o default_permissions -o noatime
Done.

Проверь:

ls -la /mnt/nextcloud

👤 6. Проверка доступа от имени www-data

Назначь владельца:

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

Проверь доступность:

sudo -u www-data touch /mnt/nextcloud/test_www.txt

🔄 7. Размонтирование при необходимости

cuno unmount /mnt/nextcloud

Или:

fusermount3 -u /mnt/nextcloud

🧪 8. Использование в Nextcloud

🔸 Основное data-хранилище (для новой установки)

  • При установке укажи /mnt/nextcloud как data-директорию
  • Убедись, что у пользователя www-data есть права

📌 Важные замечания

  • POSIX-права сохраняются внутри бакета, в скрытых служебных объектах — используй только CunoFS для доступа
  • Не рекомендуется изменять содержимое бакета извне
  • UID/GID должны быть одинаковыми на всех серверах, если доступ идёт с нескольких машин

🛠 9. Автоматическое монтирование через systemd

🔸 Шаг 1. Создай systemd unit-файл

sudo nano /etc/systemd/system/cuno-nextcloud.mount.service

Вставь следующее:

[Unit]
Description=Mount CunoFS bucket for Nextcloud
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=www-data
ExecStart=/bin/bash -c '/usr/bin/cuno mount --posix -o allow_root -o allow_other --root s3://cloud-hws-ru-1 /mnt/nextcloud'
ExecStop=/usr/bin/fusermount3 -u /mnt/nextcloud
RemainAfterExit=true
Restart=on-failure
TimeoutSec=30

[Install]
WantedBy=multi-user.target

🧠 Убедись, что путь к cuno — корректный (which cuno покажет его, чаще всего /usr/bin/cuno). Но нужно установить именно /bin/bash -c

🔸 Шаг 2. Перезагрузить systemd и включить юнит

sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl enable cuno-nextcloud.mount.service
sudo systemctl start cuno-nextcloud.mount.service

🔎 Проверка статуса

sudo systemctl status cuno-nextcloud.mount.service

Ожидаемый результат:

Active: active (running)

✅ После перезагрузки

reboot

После загрузки:

mount | grep nextcloud
ls /mnt/nextcloud

Должны быть видны файлы из бакета baket-name-1.

🛠 10. Подключаем (если уже есть nextcloud)

🔸 Шаг 1. Перевод Nextcloud в режим обслуживания

sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --on

🔸 Шаг 2. Перенос текущих данных

sudo rsync -avzh /var/www/nextcloud/data /mnt/nextcloud/
sudo chown -R www-data:www-data /mnt/nextcloud/data
sudo chown -R 770 /mnt/nextcloud/data

🔸 Шаг 3. Обновление config.php

sudo nano /var/www/nextcloud/config/config.php

Измените параметр:

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

🔸 Шаг 4. Выход из режима обслуживания

sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --off

🔸 Шаг 5. Переиндексация данных

sudo -u www-data php /var/www/nextcloud/occ files:scan --all

Или для конкретного пользователя:

sudo -u www-data php /var/www/nextcloud/occ files:scan admin

✅ Готово!

Теперь Nextcloud использует ваш S3-бакет как основную директорию для хранения пользовательских данных.

✅ Проверено на:

  • Selectel Object Storage (S3)
  • Yandex Cloud (S3)
  • CunoFS 1.2.7
  • Ubuntu 24.04 LTS
  • Nextcloud 31+

0

Автор публикации

не в сети 2 дня

Илья Коковин

0
Комментарии: 0Публикации: 36Регистрация: 30-05-2019
Илья Коковин:

This website uses cookies.

Read More