Организация веб-сервиса для работы с файлами в хранилище 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

  1. Создайте бакет OBS. При создании задайте параметры:

    • Класс хранения Storage ClassStandard для часто используемых файлов.

    • Политику хранения Bucket PolicyPrivate, чтобы доступ к файлам через консоль Advanced был только у администратора бакета.

    Примечание

    При необходимости можно включить шифрование файлов (параметр Default Encryption).

  2. Создайте IAM-пользователя с типом доступа Programmatic access.

  3. Сгенерируйте ключи доступа для нового пользователя — нажмите Create Access Key и сохраните полученный файл с ключами.

    Примечание

    Обычно файл с ключами называется credentials.csv. Эти ключи пригодятся при подключении бакета OBS к NextCloud.

Создание виртуальной машины

  1. Создайте виртуальную машину.

    Примечание

    При выборе флейвора руководствуйтесь рекомендуемыми минимальными требованиями (en).

  2. Убедитесь, что в выбранной группе безопасности открыт 22 порт для доступа к виртуальной машине по SSH.

Настройка виртуальной машины

  1. Обновите индекс пакетов ОС и установите обновления пакетов:

    sudo apt update && sudo apt upgrade
    
  2. Установите веб-сервер 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
    
  3. Запустите MySQL:

    sudo mysql
    
  4. Создайте пользователя и базу данных. Выдайте пользователю привелегии для работы с базой данных:

    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 — название базы данных.

  5. Для повышения безопасности базы данных используйте скрипт mysql-secure-installation (en).

Установка NextCloud

  1. Подключитесь к виртуальной машине по SSH:

    ssh root@IP_address
    

    Примечание

    Белый IP-адрес виртуальной машины можно найти в консоли на вкладке Summary в блоке EIPs.

  2. Скачайте архив с последней версией NextCloud:

    wget https://download.nextcloud.com/server/releases/latest.zip
    

    Примечание

    Иную версию приложения или архива можно найти на официальном сайте в разделе Download Server.

  3. Разархивируйте пакет:

    unzip latest.zip
    
  4. Скопируйте полученные файлы приложения в рабочую директорию Apache:

    sudo cp -r nextcloud /var/www
    
  5. Выдайте веб-серверу права владельца на директорию с приложением и измените права на чтение/запись/выполнение файлов в директории:

    sudo chown -R www-data:www-data /var/www/nextcloud
    sudo chmod -R 755 /var/www/nextcloud/
    

Настройка NextCloud

  1. Создайте файл с конфигурацией для веб-сервера:

    nano /etc/apache2/sites-available/nextcloud.conf
    
  2. Задайте конфигурацию виртуального хоста:

    <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-адрес виртуальной машины.

  3. Включите конфигурацию виртуального хоста:

    a2ensite nextcloud.conf
    
  4. Включите модули Apache:

    a2enmod rewrite
    a2enmod headers
    a2enmod env
    a2enmod dir
    a2enmod mime
    
  5. Перезапустите веб-сервер:

    systemctl restart apache2
    
  6. Создайте файл с конфигурации NextCloud для хранилища:

    nano /var/www/nextcloud/storage.config.php
    
  7. Задайте конфигурацию хранилища:

    <?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;

    • keyAccess key ID из файла credentials.csv;

    • secretSecret Access Key из файла credentials.csv.

  8. Откройте браузер, указав в качестве URL IP-адрес виртуальной машины. Завершите настройку, задав администратора NextCloud и параметры подключения к базе данных.

    Примечание

    Дополнительно можно задать параметры PHP веб-сервера, такие как время жизни сессии, максимальный размер файла для загрузки, максимальное время выполнения операций и другие.

Об архитектуре решения

Пример в этой инструкции основан на базовом варианте архитектуры, который состоит из одной виртуальной машины и OBS-хранилища. У этого варианта архитектуры есть ряд ограничений с точки зрения масштабирования ресурсов и отказоустойчивости каждого компонента. Поэтому подобный подход можно рассматривать только для тестирования возможностей NextCloud в связке с OBS или для небольших проектов, не требовательных к ресурсам.

Для промышленной эксплуатации рекомендуется использовать сервисы RDS для управления базой данных MySQL, сервис AutoScaling для автоматического масштабирования ресурсов и несколько веб-серверов в разных зонах доступности с балансировщиком нагрузки между ними. Кроме того, для ускорения работы сервиса можно использовать кластер кэширования.

Пример подобной архитектуры представлен на схеме ниже.

../_images/schm__web-service__obs-storage.svg