📌 Цель
- Смонтировать S3-бакет
baket-name
(Selectel) в/mnt/nextcloud
- Включить POSIX-доступ для управления правами
chmod/chown
- Проверить доступность для пользователя
www-data
(Nextcloud) - Подготовить к использованию как
data
-директорию или внешнее хранилище
🔐 1. Получение лицензии CunoFS
- Перейди на сайт: https://cunofs.com
- Перейдите по ссылке https://cuno.io/register/ и укажи :
- Название компании (можно любое)
- Цель использования (например: Nextcloud + S3)
- Получи письмо со ссылкой на
.run
-файл и лицензионным ключом. - Ключ нужно будет ввести при установке 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 | Удалить импортированные учётные данные |
🔐 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
sudochmod 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 + O, Enter, Ctrl + 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-права не сохранятся. Но мы и не рассматриваем подключение бакета еще где то .
✅ Если не получается поменять права на корневую папку монтирования: Пересоздать бакет (если он пустой)
Если вы только тестируете и можете позволить себе очистить бакет:
- Удалите бакет или папку.
- Создайте заново.
- Смонтируйте с нужными
-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.servicesudo 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+