Как настроить MinIO для 1С:Сервера Взаимодействия и решить ошибки 400, 403 и проблемы с файлами?

Системный администратор 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Настройка 1С:Сервера Взаимодействия (Collaboration Server) — задача нетривиальная, особенно когда речь заходит о подключении внешнего хранилища файлов. Часто встроенные инструменты регистрации через командную строку (Ring) или специальные обработки не отрабатывают корректно с S3-совместимыми хранилищами, такими как MinIO. В этой статье мы подробно разберем, как «подружить» 1С и MinIO, выполнив настройки напрямую в базе данных PostgreSQL, и решим распространенные ошибки, возникающие в процессе.

Почему не работает стандартная настройка?

При попытке зарегистрировать хранилище через утилиту curl, консоль администрирования или стандартную обработку CollaborationSystemRegister.epf, администраторы часто сталкиваются с ошибками HTTP 400 (Bad Request) или проблемами с авторизацией. Это связано с тем, что сервер взаимодействия может некорректно формировать запросы к MinIO или использовать параметры, которые ваша версия хранилища не поддерживает (например, различия в версиях подписи V2/V4 или API).

Самый надежный способ настройки в таких случаях — прямая вставка конфигурации в таблицу public.storage_server базы данных, которую использует сервер взаимодействия.

Этап 1. Прямая регистрация хранилища через SQL

Рассмотрим ситуацию, когда сервер взаимодействия установлен, PostgreSQL работает, но при попытке отправить файл через обсуждения 1С возникает ошибка. Нам необходимо добавить запись о сервере хранилища вручную.

Для этого нам понадобится инструмент администрирования PostgreSQL, например, pgAdmin или DBeaver. Подключимся к базе данных сервера взаимодействия и выполним SQL-запрос INSERT. Обратите внимание, что структура таблицы может меняться в зависимости от версии сервера взаимодействия, поэтому мы приведем наиболее полный вариант запроса, решающий проблему отсутствующих полей.

Сформируем запрос, учитывая обязательные поля api_type и storage_type, отсутствие которых часто вызывает ошибку SQL state: 23502 (нарушение ограничения NOT NULL).


INSERT INTO public.storage_server(
    id, 
    type, 
    base_url, 
    container_url, 
    container_name, 
    region, 
    access_key_id, 
    secret_key, 
    signature_version, 
    is_deleted, 
    upload_limit, 
    download_limit, 
    file_size_limit, 
    created_at, 
    updated_at, 
    cdn_url, 
    cdn_key_id, 
    cdn_secret_key, 
    state, 
    cdn_enabled, 
    path_style_access_enabled, 
    bytes_to_keep, 
    days_to_keep, 
    pricing_url, 
    api_type,       -- Важное поле для новых версий
    storage_type    -- Важное поле для новых версий
) VALUES (
    uuid_generate_v4(), 
    'AMAZON', 
    'http://IP_ВАШЕГО_MINIO:9000',  -- Внимание на порт!
    '', 
    'имя_вашего_бакета', 
    'us-east-1',      -- Регион (часто можно оставить пустым или us-east-1)
    'minio_access_key', -- Ваш логин MinIO
    'minio_secret_key', -- Ваш пароль MinIO
    'V2',             -- Версия подписи (V2 часто стабильнее для старых версий CS)
    false, 
    1073741824,       -- Лимиты
    1073741824, 
    104857600, 
    CURRENT_TIMESTAMP, 
    CURRENT_TIMESTAMP, 
    NULL, NULL, NULL, 
    'ACTIVE', 
    false, 
    true,             -- path_style_access_enabled (важно для локальных IP)
    0, 0, NULL, 
    'AMAZON',         -- Значение для S3-совместимых хранилищ
    'DEFAULT'
);

Разберем ключевые параметры, влияющие на успех подключения:

  1. api_type и storage_type: Если при выполнении запроса вы получаете ошибку о том, что значение NULL недопустимо, обязательно добавьте эти поля со значениями 'AMAZON' и 'DEFAULT' соответственно. В крайнем случае, можно временно снять галочку «Not NULL» в свойствах столбца через pgAdmin, но лучше заполнить данные корректно.
  2. path_style_access_enabled: Установите в true. MinIO в локальной сети обычно работает через путь (http://host/bucket), а не через субдомены (http://bucket.host), что характерно для настоящего Amazon S3.
  3. signature_version: Если с V4 возникают проблемы (ошибки подписи), попробуйте указать V2.

Этап 2. Проблема скачивания файлов размером 2 КБ (Ошибки портов)

Одна из самых частых и неочевидных проблем: файлы успешно загружаются в MinIO (их видно в веб-интерфейсе), но в 1С приходят битые файлы размером около 2 КБ. При попытке открыть такой файл пользователь видит ошибку формата.

Причина: В новых версиях MinIO разделены порты для API и для веб-консоли.

Если в поле base_url вы укажете порт веб-консоли (например, 9001), сервер взаимодействия вместо файла скачает HTML-код страницы авторизации MinIO. Этот HTML-код как раз весит около 2 КБ.

Решение: Проверьте, на каких портах слушает MinIO. В Linux это можно сделать командой:

sudo netstat -pnltu | grep minio

Убедитесь, что в базе данных в поле base_url указан именно API-порт (чаще всего 9000).

Этап 3. Ошибка 403 Forbidden и версия MinIO

Если вы все настроили верно, порты указаны правильно, но при отправке файла вы получаете ошибку HTTP 403 Forbidden, а в логах MinIO видите сообщение Access Denied, связанное с полями формы (PostPolicyBucket), проблема кроется в версиях ПО.

Современные версии MinIO (выпущенные в конце 2023 – 2024 годах) стали строже проверять POST-запросы. 1С:Сервер Взаимодействия может отправлять дополнительные поля формы, которые не объявлены в политике безопасности MinIO, из-за чего сервер отклоняет запрос.

Решение: Использовать более старую версию MinIO. Практика показывает, что версии 2022 года (например, релизы октября-ноября 2022) работают стабильно и не блокируют запросы от 1С.

Этап 4. Проблемы с запуском служб на Windows (Тайм-аут)

Иногда после настройки и перезагрузки сервера на Windows службы 1ce-cs-hazelcast или 1ce-cs-elasticsearch не запускаются автоматически, выдавая ошибку: «Служба не ответила на запрос своевременно» (Event ID 7009). Для решения подобных системных сложностей при развертывании инфраструктуры полезно использовать справочник по администрированию систем Windows, Linux и 1С.

Это происходит потому, что Java-приложения тяжелые и не успевают стартовать за отведенные Windows по умолчанию 30 секунд.

Решение: Увеличьте тайм-аут ожидания служб через реестр.

  1. Запустите редактор реестра regedit.
  2. Перейдите в ветку: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control.
  3. Найдите или создайте параметр DWORD (32 бита) с именем ServicesPipeTimeout.
  4. Установите значение (в десятичной системе) равным 180000 (это 3 минуты) или более.
  5. Перезагрузите сервер.

Чек-лист для проверки

Если что-то не работает, пройдемся по пунктам:

  1. Перезапуск служб: После любых изменений в базе данных storage_server обязательно перезапускайте службу сервера взаимодействия.
  2. Права доступа: Убедитесь, что Access Key и Secret Key в базе совпадают с тем, что задано в MinIO.
  3. Протокол путей: Проверьте, что path_style_access_enabled установлен в true.
  4. Версия подписи: Если используете V4 и получаете ошибки, попробуйте сменить на V2 в базе данных (поле signature_version).
  5. Порты: Убедитесь, что 1С стучится в API-порт, а не в порт веб-консоли.

Следуя этим шагам и используя прямую конфигурацию через SQL, вы сможете обеспечить стабильную работу обмена файлами в Системе Взаимодействия.

← На главную