Nextcloud Hub 10 (v31.0.5) поддерживает хранение данных на внешнем S3-хранилище, что позволяет масштабировать систему, оптимизировать хранение и упростить бэкап. В этой инструкции мы подключим S3-бакет (например, Yandex Cloud, Selectel или MinIO) как основную директорию datadirectory
.
📋 Что понадобится
- Установленный Nextcloud Hub 10 (31.0.5)
- Доступ к S3-совместимому бакету
- Linux-сервер с правами
sudo
- Пользователь
www-data
- Установленный
s3fs
⚠️ Шаг 0. Перевод Nextcloud в режим обслуживания
sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --on
☁️ Шаг 1. Установка s3fs
sudo apt update
sudo apt install -y s3fs
Если пакет недоступен:
sudo add-apt-repository universe
sudo apt update
sudo apt install -y s3fs
🔐 Шаг 2. Создание файла с ключами доступа
sudo mkdir -p /home/www-data
echo "ACCESS_KEY:SECRET_KEY" | sudo tee /home/www-data/.passwd-s3fs
sudo chown www-data:www-data /home/www-data/.passwd-s3fs
sudo chmod 600 /home/www-data/.passwd-s3fs
📁 Шаг 3. Создание точки монтирования
sudo mkdir -p /media/nextcloud
sudo chown www-data:www-data /media/nextcloud
sudo chmod 755 /media/nextcloud
🔐 Важно: разрешение FUSE для других пользователей
Чтобы s3fs
или goofys
могли использовать опцию allow_other
, необходимо включить её в настройках FUSE:
sudo nano /etc/fuse.conf
Найдите строку:
#user_allow_other
И раскомментируйте её (уберите #
):
user_allow_other
Сохраните файл (Ctrl + O, Enter, Ctrl + X). Без этой настройки монтирование с allow_other
завершится ошибкой.
💾 Шаг 4. Монтирование S3-бакета
sudo -u www-data s3fs my-bucket-name /media/nextcloud \
-o passwd_file=/home/www-data/.passwd-s3fs \
-o url=https://storage.yandexcloud.net \
-o use_path_request_style \
-o uid=33 \
-o gid=33 \
-o allow_other
📦 Шаг 5. Перенос текущих данных (если уже есть)
sudo rsync -av /var/www/nextcloud/data/ /media/nextcloud/
sudo chown -R www-data:www-data /media/nextcloud
⚙️ Шаг 6. Обновление config.php
sudo nano /var/www/nextcloud/config/config.php
Измените параметр:
'datadirectory' => '/media/nextcloud',
📌 Шаг 7. Создание файла .ncdata
echo "# Nextcloud data directory" | sudo -u www-data tee /media/nextcloud/.ncdata
🗂 Шаг 8. Переиндексация данных
sudo -u www-data php /var/www/nextcloud/occ files:scan --all
Или для конкретного пользователя:
sudo -u www-data php /var/www/nextcloud/occ files:scan admin
✅ Шаг 9. Выход из режима обслуживания
sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --off
🔁 (Опционально) Автомонтирование S3 через systemd
Создайте файл:
sudo nano /etc/systemd/system/s3fs-nextcloud.mount
Добавьте:
[Unit]
Description=Mount S3 bucket to /media/nextcloud
After=network-online.target
Wants=network-online.target
[Mount]
What=my-bucket-name
Where=/media/nextcloud
Type=fuse.s3fs
Options=_netdev,passwd_file=/home/www-data/.passwd-s3fs,url=https://storage.yandexcloud.net,use_path_request_style,uid=33,gid=33,mp_umask=0022,allow_other
[Install]
WantedBy=multi-user.target
Активируйте:
sudo systemctl daemon-reexec
sudo systemctl enable --now s3fs-nextcloud.mount
✅ Готово!
Теперь Nextcloud использует ваш S3-бакет как основную директорию для хранения пользовательских данных.