Сервис "Файловое хранилище"

Установка filestorage

Так как у многих МФЦ в качестве сервера используется openserver установка будет показана на его примере

1) Необходимо получить установочный архив - скачать его нужно из личного кабинета МФЦ на портале обновлений

2) Выбрать сервер, на котором будет располагаться хранилище - это должена быть машина с большим объемом диска, по процессору и памяти требования не большие. На этой машине должен быть открыть 80 порт для доступа с сервера приложений, сервера ЭДО, серверов СМЭВ2, СМЭВ3 (если они разделены).

3) На выбранном сервере развернуть инфраструктуру для работы приложения - web сервер apache + php5(7). Для примера будем использовать openserver.

4) Распаковать установочный архив в папку, являющуюся корнем сайта.

5) Переименовать файл /config/config.php.tmpl в /config/config.php

6) Открыть его текстовым редактором и прописать настройки

array(
'name'      => 'test', // Имя хранилища - нужен при множестве хранилищ - пока не используется
'db'        => array(  // Доступ к базе в которой ведется список сохраненных файлов 
                    'host'  =>  '192.168.1.5', 
                    'port'  =>  '5432',
                    'dbname'=>  'filestorage41',
                    'user'  =>  'postgres',
                    'pass'  =>  '2222'
),
'prefix'    => '', // Префикс ИД сохрененного файла - нужен при множестве хранилищ - пока не используется
'path_for_files'=>'C://bigData/dataFS' // Имя папки для хранения файлов

параметр db - это НЕ база данных, на которой работает МФЦ, это отдельная база только для хранилища - в ней хранятся ссылки на файлы. Если пароль к БД у вас содержит спецсимволы, то вписать его нужно в виде - urlencode('ваш пароль') Пример :

                    'dbname'=>  'filestorage41',
                    'user'  =>  'postgres',
                    'pass'  =>   urlencode('!@#$QAZ')

7) Открыть приложение в браузере, программа педложит создать базу - нажать "Создать базу"

8) После создания базы страница перезагрузится и сообщит о том, что сервер работает.

Необходимые модули PHP:

php5-fileinfo

Масштабирование файлового хранилища

При необходимости файловое хранилище можно горизонтально масштабировать. Ниже будет приведен пример горизонгального масштабирования ФХ.

Создадим 3 сервера для хранения файлов - 3 отдельных машины с настроенным окружением (веб сервер + PHP), лучше всего настроить один, а потом скопировать на остальные или воспользоваться вредствами виртуалтзации типа Docker. База данных серверов ФХ может быть как одна на всех так и отдельная для каждого.

сервера будут называться fs1, fs2, fs3. также нам понадобится 4-й сервер, который будет заниматься балансировкой нагрузки. В качестве балансировщика будем использовать nginx.

На каждом из серверов-хранилищ в конфигурационном файле нужно прописать префикс хранилища, этот префикс должен соответствовать имени сервера

После этого файлы сохраняемые на этом ФХ будут иметь идентификатор вида fs1_12345

Теперь настроим балансир. После установки nginx его нужно настроить как балансировщик нагрузки

В конфигурационном файле (в debian/ubuntu linux это /etc/nginx/nginx.conf) нужно заменить секцию http на следующее содержимое

http {
upstream fs.ru {
    server 192.168.10.5;
    server 192.168.10.6;
    server 192.168.10.7;
}
server{
    listen 80;
    location / {
           proxy_pass http://fs.ru;
    }
            location ~.*fs1_.* {
               proxy_pass http://192.168.10.5;
        }
        location ~.*fs2_.* {
               proxy_pass http://192.168.10.6;
        }
        location ~.*fs3_.* {
               proxy_pass http://192.168.10.7;
        }
}
}        

адреса 192.168.10.5, 192.168.10.6, 192.168.10.7 - это ip серверов хранилищ fs1, fs2, fs3 соответственно, можно использовать и dns имена, в таком случае необходимо обеспечить доступность серверов хранилищ по именам с сервера балансировщика.

такая настройка говорит серверу, что все запросы в адресе которых есть строка "fs1_" нужно отправлять на сервер 192.168.10.5, так же и для fs2_ и fs3_(это нужно для операций чтения файлов), запросы не подходящие под эти услови будут отправлены на сервер fs.ru. В свою очередь запросы к fs.ru будут проксироваться динамически на сервера хранилищ (описано в секции upstream). По умолчанию метод проксирования - round-robin, т.е. запросы по очереди пересылаются на следующий сервер из списка. В приведенном примере первый запрос пойдет на 192.168.10.5, второй на 192.168.10.6, третий на 192.168.10.7 четвертый снова на 192.168.10.5 и так далее.

В настройках программы в форме "НАСТРОЙКА ХРАНЕНИЯ БОЛЬШИХ ФАЙЛОВ" нужно указать адрес проксирующего сервера

после этих настроек файлы при сохранении в ФХ будут динамически распределяться между несколькими экземплярами серверов. Таким образом для больших МФЦ можно обеспечить повышенную отказоустойчивость программы и уменьшить нагрузку на файловые хранилища.