В этой инструкции описано, как подготовить веб-сервис для работы с Object Storage Service — высокодоступным хранилищем для файлов любого формата и размера. Веб-интерфейс помогает организовать личное или корпоративное файловое хранилище с возможностью разграничения доступа к файлам на базе OBS.
Веб-интерфейс для работы с OBS реализован с помощью NextCloud — платформы с открытой архитектурой для совместной работы с контентом. Помимо браузерной версии, NextCloud предоставляет десктопные приложения для Windows, MacOS X и Linux, а также мобильные приложения для Android и iOS.
Порядок организации веб-сервиса для работы с OBS:
В качестве примера для инструкции используется следующее окружение:
Виртуальная машина под управлением Ubuntu 20.04.
Веб-сервер Apache.
База данных MySQL (MariaDB 10.3.34) для хранения учетных записей и настроек приложения.
S3-совместимое хранилище OBS для хранения файлов.
Создайте бакет OBS с параметрами:
Storage Class — Standard для часто используемых файлов.
Bucket Policies — Private, чтобы доступ к файлам через консоль Advanced был только у администратора бакета.
Создайте IAM-пользователя с типом доступа Programmatic access.
Сгенерируйте ключи доступа Access key ID и Secret Access Key для нового пользователя.
Ключи AK/SK нужны для подключения бакета OBS к NextCloud.
При выборе флейвора руководствуйтесь рекомендуемыми требованиями NextCloud (en).
Убедитесь, что в выбранной группе безопасности открыт 22 порт для доступа к виртуальной машине по SSH.
Обновите индекс пакетов ОС и установите обновления пакетов:
sudo apt update && sudo apt upgrade
Установите веб-сервер Apache, СУБД MariaDB, PHP и другие модули, необходимые для работы NextCloud:
sudo apt install apache2 mariadb-server libapache2-mod-php php-gd php-mysql \php-curl php-mbstring php-intl php-gmp php-bcmath php-xml php-imagick php-zip php-fpm
Запустите MySQL:
sudo mysql
Создайте пользователя и базу данных. Выдайте пользователю привелегии для работы с базой данных:
CREATE USER 'user'@'localhost' IDENTIFIED BY 'password';CREATE DATABASE IF NOT EXISTS nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;GRANT ALL PRIVILEGES ON nextcloud.* TO 'user'@'localhost';FLUSH PRIVILEGES;quit;
Где:
user — имя пользователя базы данных.
password — пароль пользователя для доступа к базе данных.
nextcloud — название базы данных.
Чтобы повысить безопасность БД, используйте скрипт mysql-secure-installation (en).
Подключитесь к виртуальной машине по SSH:
ssh root@IP_address
Где:
IP_address — белый IP-адрес виртуальной машины (EIP).
Скачайте архив с последней версией NextCloud:
wget https://download.nextcloud.com/server/releases/latest.zip
Иную версию приложения или архива можно найти на официальном сайте NextCloud в разделе Download Server.
Разархивируйте пакет:
unzip latest.zip
Скопируйте полученные файлы приложения в рабочий каталог Apache:
sudo cp -r nextcloud /var/www
Выдайте веб-серверу права владельца на каталог с приложением и измените права на чтение/запись/выполнение файлов в каталоге:
sudo chown -R www-data:www-data /var/www/nextcloudsudo chmod -R 755 /var/www/nextcloud/
Создайте файл с конфигурацией для веб-сервера:
nano /etc/apache2/sites-available/nextcloud.conf
Задайте конфигурацию виртуального хоста:
<VirtualHost *:80>DocumentRoot /var/www/nextcloud/ServerName IP_address<Directory /var/www/nextcloud/>Require all grantedAllowOverride AllOptions FollowSymLinks MultiViews<IfModule mod_dav.c>Dav off</IfModule></Directory></VirtualHost>
Где:
IP_address — белый IP-адрес виртуальной машины (EIP).
Включите конфигурацию виртуального хоста:
a2ensite nextcloud.conf
Включите модули Apache:
a2enmod rewritea2enmod headersa2enmod enva2enmod dira2enmod mime
Перезапустите веб-сервер:
systemctl restart apache2
Создайте файл с конфигурации NextCloud для хранилища:
nano /var/www/nextcloud/storage.config.php
Задайте конфигурацию хранилища:
<?php$CONFIG = array('objectstore' => array('class' => '\\OC\\Files\\ObjectStore\\S3','arguments' => array('bucket' => 'nextcloud-bucket','autocreate' => true,'key' => '3AJRZL4VMWJRQFC8CGSFDD','secret' => 'j8eAMouA15uA0VHPZeicNWa7SL','hostname' => 'obs.ru-moscow-1.hc.sbercloud.ru','port' => 443,'use_ssl' => true,'region' => 'ru-moscow','use_path_style'=>true),),);
Где:
bucket — название бакета OBS.
key — Access key ID, сгенерированный при подготовке бакета OBS.
secret — Secret Access Key, сгенерированный при подготовке бакета OBS.
Откройте браузер, указав в качестве URL IP-адрес виртуальной машины. Завершите настройку, задав администратора NextCloud и параметры подключения к базе данных.
Дополнительно можно задать параметры PHP веб-сервера, такие как время жизни сессии, максимальный размер файла для загрузки, максимальное время выполнения операций и другие.
Пример в этой инструкции основан на базовом варианте архитектуры, который состоит из одной виртуальной машины и OBS-хранилища. У этого варианта архитектуры есть ряд ограничений с точки зрения масштабирования ресурсов и отказоустойчивости каждого компонента. Подобный подход можно рассматривать только для тестирования возможностей NextCloud в связке с OBS или для небольших проектов, не требовательных к ресурсам.
В промышленной эксплуатации рекомендуется использовать сервис Relational Database Service (RDS) для управления базой данных MySQL, сервис Auto Scaling для автоматического масштабирования ресурсов и несколько веб-серверов в разных зонах доступности с балансировщиком нагрузки. Кроме того, для ускорения работы сервиса можно использовать кластер кеширования.
Пример подобной архитектуры: