Организация веб-сервиса для работы с файлами в хранилище OBS
В этой инструкции описано, как подготовить веб-сервис для работы с OBS — высокодоступным хранилищем для файлов любого формата и размера. Веб-интерфейс помогает организовать на базе OBS личное или корпоративное файловое хранилище с возможностью разграничения доступа к файлам.
Веб-интерфейс для работы с OBS реализован с помощью NextCloud — платформы с открытой архитектурой для совместной работы с контентом. Помимо браузерной версии, NextCloud предоставляет десктопные приложения для Windows, MacOS X и Linux и мобильные приложения Android и iOS для доступа к файлам.
Организация веб-сервиса для работы с OBS может выполняться в следующем порядке:
Подготовка бакета OBS.
Создание виртуальной машины.
Настройка виртуальной машины.
Установка NextCloud.
Настройка NextCloud.
Используемое окружение
В качестве примера для инструкции используется следующее окружение:
Виртуальная машина под управлением Ubuntu 20.04.
Веб-сервер Apache.
База данных MySQL (MariaDB 10.3.34) для хранения учетных записей и настроек приложения.
S3–совместимое хранилище OBS для хранения загружаемых файлов.
Подготовка бакета OBS
Создайте бакет OBS. При создании задайте параметры:
Класс хранения Storage Class — Standard для часто используемых файлов.
Политику хранения Bucket Policy — Private, чтобы доступ к файлам через консоль Advanced был только у администратора бакета.
Примечание
При необходимости можно включить шифрование файлов (параметр Default Encryption).
Создайте IAM-пользователя с типом доступа Programmatic access.
Сгенерируйте ключи доступа для нового пользователя — нажмите Create Access Key и сохраните полученный файл с ключами.
Примечание
Обычно файл с ключами называется credentials.csv. Эти ключи пригодятся при подключении бакета OBS к 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-адрес виртуальной машины можно найти в консоли на вкладке Summary в блоке EIPs.
Скачайте архив с последней версией NextCloud:
wget https://download.nextcloud.com/server/releases/latest.zip
Примечание
Иную версию приложения или архива можно найти на официальном сайте в разделе 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-адрес виртуальной машины.
Включите конфигурацию виртуального хоста:
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' => 'mKa1Nf2VWgny35wHJQmFThP7hPuSaImwM6q39yOO', '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 из файла credentials.csv;
secret — Secret Access Key из файла credentials.csv.
Откройте браузер, указав в качестве URL IP-адрес виртуальной машины. Завершите настройку, задав администратора NextCloud и параметры подключения к базе данных.
Примечание
Дополнительно можно задать параметры PHP веб-сервера, такие как время жизни сессии, максимальный размер файла для загрузки, максимальное время выполнения операций и другие.
Об архитектуре решения
Пример в этой инструкции основан на базовом варианте архитектуры, который состоит из одной виртуальной машины и OBS-хранилища. У этого варианта архитектуры есть ряд ограничений с точки зрения масштабирования ресурсов и отказоустойчивости каждого компонента. Поэтому подобный подход можно рассматривать только для тестирования возможностей NextCloud в связке с OBS или для небольших проектов, не требовательных к ресурсам.
Для промышленной эксплуатации рекомендуется использовать сервисы RDS для управления базой данных MySQL, сервис AutoScaling для автоматического масштабирования ресурсов и несколько веб-серверов в разных зонах доступности с балансировщиком нагрузки между ними. Кроме того, для ускорения работы сервиса можно использовать кластер кеширования.
Пример подобной архитектуры представлен на схеме ниже.