- tocdepth
2
Организация веб-сервиса для работы с файлами в хранилище 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/nextcloud sudo 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 granted AllowOverride All Options FollowSymLinks MultiViews <IfModule mod_dav.c> Dav off </IfModule> </Directory> </VirtualHost>
Где:
IP_address
— белый IP-адрес виртуальной машины (EIP).Включите конфигурацию виртуального хоста:
a2ensite nextcloud.conf
Включите модули Apache:
a2enmod rewrite a2enmod headers a2enmod env a2enmod dir a2enmod 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 для автоматического масштабирования ресурсов и несколько веб-серверов в разных зонах доступности с балансировщиком нагрузки. Кроме того, для ускорения работы сервиса можно использовать кластер кеширования.
Пример подобной архитектуры:
для Dev & Test