Организация веб-сервиса для работы с файлами в хранилище OBS

В этой инструкции описано, как подготовить веб-сервис для работы с Object Storage Service — высокодоступным хранилищем для файлов любого формата и размера. Веб-интерфейс помогает организовать личное или корпоративное файловое хранилище с возможностью разграничения доступа к файлам на базе OBS.

Веб-интерфейс для работы с OBS реализован с помощью NextCloud — платформы с открытой архитектурой для совместной работы с контентом. Помимо браузерной версии, NextCloud предоставляет десктопные приложения для Windows, MacOS X и Linux, а также мобильные приложения для Android и iOS.

Порядок организации веб-сервиса для работы с OBS:

  1. Подготовка бакета OBS.

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

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

  4. Установка NextCloud.

  5. Настройка NextCloud.

Используемое окружение

В качестве примера для инструкции используется следующее окружение:

  • Виртуальная машина под управлением Ubuntu 20.04.

  • Веб-сервер Apache.

  • База данных MySQL (MariaDB 10.3.34) для хранения учетных записей и настроек приложения.

  • S3-совместимое хранилище OBS для хранения файлов.

Подготовка бакета OBS

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

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

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

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

  3. Сгенерируйте ключи доступа Access key ID и Secret Access Key для нового пользователя.

    Ключи AK/SK нужны для подключения бакета OBS к NextCloud.

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

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

    Примечание

    При выборе флейвора руководствуйтесь рекомендуемыми требованиями NextCloud (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_address — белый IP-адрес виртуальной машины (EIP).

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

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

    Примечание

    Иную версию приложения или архива можно найти на официальном сайте NextCloud в разделе 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-адрес виртуальной машины (EIP).

  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
            ),
    ),
    );
    

    Где:

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

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

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

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

В промышленной эксплуатации рекомендуется использовать сервис Relational Database Service (RDS) для управления базой данных MySQL, сервис Auto Scaling для автоматического масштабирования ресурсов и несколько веб-серверов в разных зонах доступности с балансировщиком нагрузки. Кроме того, для ускорения работы сервиса можно использовать кластер кеширования.

Пример подобной архитектуры:

../_images/schm__web-service__obs-storage.svg
Запустили Evolution free tier
для Dev & Test
Получить