Организация веб-сервиса для работы с файлами в хранилище OBS
В этой инструкции описано, как подготовить веб-сервис для работы с 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
Создайте бакет 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).
Установка NextCloud
Подключитесь к виртуальной машине по 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/
Настройка 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 для автоматического масштабирования ресурсов и несколько веб-серверов в разных зонах доступности с балансировщиком нагрузки. Кроме того, для ускорения работы сервиса можно использовать кластер кеширования.
Пример подобной архитектуры:
- Используемое окружение
- Подготовка бакета OBS
- Создание виртуальной машины
- Настройка виртуальной машины
- Установка NextCloud
- Настройка NextCloud
- Об архитектуре решения