Настройка сервиса Editor
Editor – это компонент seatmap.pro.
Это приложение, построенное на Spring Boot.
Конфигурация Editor состоит из двух файлов:
- application.yaml - общие системные настройки
- application-seatmap.yaml - настройки, специфичные для приложения
Среда выполнения и обновление с 1.74
Образ frontend запускает Node и обслуживает editor core рядом со статическими файлами. Используйте точку входа образа и /healthz для проверок готовности и работоспособности frontend. Сервис core отвечает по пути /core на веб-порту frontend (PORT, по умолчанию 8081) и требует действительный токен редактора от каждого вызова. Editor-service сопровождает каждый свой вызов короткоживущим токеном, подписанным его закрытым ключом, и обращается к core по seatmap.services.core.url. Значение по умолчанию, http://127.0.0.1:8081/, указывает на контейнер frontend того же пода Helm; если они работают не в одном поде, например как отдельные сервисы Docker Compose, укажите адрес frontend, а на разных хостах синхронизируйте их часы. Порт метрик (CORE_METRICS_PORT, по умолчанию 9091) оставляйте внутренним. Раздача только статических файлов не предоставляет сервис core.
Согласуйте настроенные ключи RSA между backend и frontend. Helm использует существующий Secret <release>-rsa с private-key и public-key; публичный ключ frontend монтируется только для чтения в /keys/public-key. Для собственной установки frontend смонтируйте туда соответствующий публичный ключ или укажите путь через CORE_PUBLIC_KEY_FILE. Без ключа frontend записывает ошибку в журнал при запуске, а /core отклоняет все вызовы; если файл не содержит читаемого публичного ключа, frontend останавливается при запуске.
| Значение Helm | По умолчанию | Назначение |
|---|---|---|
editor.frontend.coreWorkers |
1 |
Число воркеров core; при увеличении добавьте CPU и память. |
editor.frontend.jobTimeoutMs |
20000 |
Срок выполнения задания в миллисекундах. |
editor.frontend.drainTimeoutMs |
15000 |
Срок завершения работы при остановке в миллисекундах. |
editor.terminationGracePeriodSeconds |
30 |
Время завершения pod в секундах. |
Допустимы положительные целые до 2147483647. Для отсутствующих значений или null используются значения по умолчанию. Время завершения pod должно превышать срок остановки минимум на пять секунд. Chart задаёт срок чтения backend на пять секунд больше срока задания с округлением вниз до целых секунд. Ресурсы frontend задаются в global.resources.frontend.
Вне Helm настройте CORE_WORKERS, CORE_JOB_TIMEOUT_MS и CORE_DRAIN_TIMEOUT_MS и согласуйте срок чтения backend. Без CORE_WORKERS среда может выбирать число воркеров автоматически; Helm по умолчанию задаёт один.
В Docker Compose два контейнера редактора работают как обычные сервисы. Укажите в SEATMAP_SERVICES_CORE_URL для editor-service сервис frontend в сети Compose, например http://editor-client:8081/. Смонтируйте соответствующий публичный ключ в /keys/public-key контейнера frontend и задайте обоим контейнерам редактора время остановки 30 секунд: стандартные для Compose 10 секунд меньше 15-секундного срока завершения. Пакет Docker Compose для 1.74 настраивает всё это, создаёт пару ключей подписи для каждой установки и содержит руководство по обновлению существующих установок на Compose.
При обновлении до 1.74 editor-service применяет V121–V127 до запуска нового booking-service. Перед V122 проверьте повторяющиеся подтверждённые ссылки на бронирование в пределах события. Порядок, запрос проверки и совместимость схем описаны в руководстве по развёртыванию версии.
application.yaml
Настройки задержки
Задержка перед запуском задач после старта системы.
| Parameter | Environment variable | Описание | Default value |
|---|---|---|---|
| initial | INITIAL_DELAY | Задержка в миллисекундах | 5000 (five seconds) |
Свойства фреймворка Java Spring
| Parameter | Environment variable | Описание | Default value |
|---|---|---|---|
| spring.profiles.include | SPRING_PROFILES_INCLUDE | Добавлять ли свойства из другого профиля | seatmap |
| spring.jpa.generate-ddl | SPRING_JPA_GENERATE_DDL | Включать ли генерацию DDL | true |
| spring.jpa.properties.hibernate.jdbc.batch_size | SPRING_JPA_PROPERTIES_HIBERNATE_JDBC_BATCH_SIZE | Количество операторов INSERT, UPDATE и DELETE, выполняемых за один вызов базы данных | 50 |
| spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults | SPRING_JPA_PROPERTIES_HIBERNATE_TEMP_USE_JDBC_METADATA_DEFAULTS | Использовать ли метаданные JDBC для определения значений некоторых настроек по умолчанию, когда база данных может быть недоступна | false |
| spring.jpa.properties.hibernate.order_inserts | SPRING_JPA_PROPERTIES_HIBERNATE_ORDER_INSERTS | Упорядочивать ли SQL-вставки по значению первичного ключа вставляемых элементов | false |
| spring.jpa.properties.javax.persistence.schema-generation.create-source | SPRING_JPA_PROPERTIES_JAVAX_PERSISTENCE_SCHEMA_GENERATION_CREATE_SOURCE | Генерировать ли команды DDL для схемы | metadata |
| spring.jpa.properties.javax.persistence.schema-generation.scripts.action | SPRING_JPA_PROPERTIES_JAVAX_PERSISTENCE_SCHEMA_GENERATION_SCRIPTS_ACTION | Создавать или обновлять схему базы данных | update |
| spring.jpa.properties.javax.persistence.schema-generation.scripts.create-target | SPRING_JPA_PROPERTIES_JAVAX_PERSISTENCE_SCHEMA_GENERATION_SCRIPTS_CREATE_TARGET | Имя файла для генерации скрипта | ddl_jpa_creation.sql |
| spring.jpa.hibernate.ddl-auto | SPRING_JPA_HIBERNATE_DDL_AUTO | Как инициализировать базу данных | update |
| spring.jpa.hibernate.use-new-id-generator-mappings | SPRING_JPA_HIBERNATE_USE_NEW_ID_GENERATOR_MAPPINGS | Генерировать ли значения идентификаторов на основе sequence-структуры базы данных | true |
| spring.jpa.database-platform | SPRING_JPA_DATABASE_PLATFORM | Используемая база данных | org.hibernate.dialect.PostgreSQLDialect |
| spring.jpa.open-in-view | SPRING_JPA_OPEN_IN_VIEW | Включать ли OSIV | false |
| spring.jackson.mapper.DEFAULT_VIEW_INCLUSION | SPRING_JACKSON_MAPPER_DEFAULT_VIEW_INCLUSION | Включать ли неаннотированные свойства во все представления | true |
| spring.flyway.baseline-on-migrate | SPRING_FLYWAY_BASELINE_ON_MIGRATE | Автоматически ли вызывать baseline при выполнении migrate для непустой схемы без таблицы истории схемы | ’true' |
| spring.datasource.hikari.data-source-properties.reWriteBatchedInserts | SPRING_DATASOURCE_HIKARI_DATA_SOURCE_PROPERTIES_REWRITEBATCHEDINSERTS | Переписывать ли обычные операторы вставки в многозначные для пакетных вставок | true |
| spring.datasource.hikari.maximum-pool-size | SPRING_DATASOURCE_HIKARI_MAXIMUM_POOL_SIZE | Максимальный размер пула | 20 |
| spring.datasource.hikari.connection-timeout | SPRING_DATASOURCE_HIKARI_CONNECTION_TIMEOUT | Тайм-аут подключения | 60000 |
| spring.datasource.driver-class-name | SPRING_DATASOURCE_DRIVER_CLASS_NAME | JDBC-драйвер для связи с базой данных | org.postgresql.Driver |
| spring.datasource.password | SPRING_DATASOURCE_PASSWORD | Пароль для подключения к базе данных | ${DB_PASSWORD:postgres} |
| spring.datasource.username | SPRING_DATASOURCE_USERNAME | Имя пользователя для подключения к базе данных | ${DB_USERNAME:seatmap} |
| spring.datasource.url | SPRING_DATASOURCE_URL | Расположение базы данных | ${DB_URL:jdbc:postgresql://localhost:15432/seatmap} |
| spring.servlet.multipart.enabled | SPRING_SERVLET_MULTIPART_ENABLED | Включать ли поддержку multipart-загрузок | true |
| spring.servlet.multipart.max-file-size | SPRING_SERVLET_MULTIPART_MAX_FILE_SIZE | Максимальный допустимый размер загружаемых файлов | 200MB |
| spring.servlet.multipart.max-request-size | SPRING_SERVLET_MULTIPART_MAX_REQUEST_SIZE | Максимальный допустимый размер запросов multipart/form-data | 215MB |
| spring.servlet.multipart.file-size-threshold | SPRING_SERVLET_MULTIPART_FILE_SIZE_THRESHOLD | Порог размера, после которого файлы будут записаны на диск | 2KB |
| spring.mvc.pathmatch.matching-strategy | SPRING_MVC_PATHMATCH_MATCHING_STRATEGY | Стратегия сопоставления путей запросов с обработчиками контроллеров | ant_path_matcher |
| spring.data.redis.port | SPRING_DATA_REDIS_PORT | Порт сервера Redis | 16379 |
| spring.data.redis.host | SPRING_DATA_REDIS_HOST | Хост сервера Redis | localhost |
Настройки логирования
Настройки логирования, применяемые к классам в пакете pro.seatmap.
| Parameter | Environment variable | Описание | Default value |
|---|---|---|---|
| logging.level.pro.seatmap | LOGGING_LEVEL_PRO_SEATMAP | Уровень логирования | DEBUG |
Настройки сервера
| Parameter | Environment variable | Описание | Default value |
|---|---|---|---|
| server.compression.min-response-size | SERVER_COMPRESSION_MIN_RESPONSE_SIZE | Минимальный размер файлов для сжатия | 1024 |
| server.compression.enabled | SERVER_COMPRESSION_ENABLED | Сжимать ли данные | true |
| server.compression.mime-types | SERVER_COMPRESSION_MIME_TYPES | MIME-типы для сжатия | text/html,text/xml,text/plain,text/css,text/javascript,application/javascript,application/json |
| server.servlet.session.timeout | SERVER_SERVLET_SESSION_TIMEOUT | Время жизни сессии сервлета | 2d |
| server.tomcat.max-http-form-post-size | SERVER_TOMCAT_MAX_HTTP_FORM_POST_SIZE | Максимальный размер POST-запроса | 20MB |
Настройки уведомлений
Путь для уведомлений Image Ready.
| Parameter | Environment variable | Описание | Default value |
|---|---|---|---|
| notify.path | NOTIFY_PATH | Путь уведомления | /topic/venues/ |
application-seatmap.yaml
В файле application-seatmap.yaml вы можете настроить параметры, описанные ниже.
Настройки безопасности
Блок security позволяет задать время жизни refresh- и access-токенов, а также управлять ключами.
| Parameter | Environment variable | Описание | Default value |
|---|---|---|---|
| seatmap.security.token.refresh.expire-duration | SEATMAP_SECURITY_TOKEN_REFRESH_EXPIRE_DURATION | Время жизни refresh-токена. Формат: PTnHnMnS, где n – соответствующие часы, минуты или секунды |
PT2H (two hours) |
| seatmap.security.token.access.expire-length | SEATMAP_SECURITY_TOKEN_ACCESS_EXPIRE_LENGTH | Время жизни access-токена в миллисекундах | 300000 (five minutes) |
| seatmap.security.rsa.private-key | SEATMAP_SECURITY_RSA_PRIVATE_KEY | Расположение приватного ключа | Ресурс конкретной установки |
| seatmap.security.rsa.public-key | SEATMAP_SECURITY_RSA_PUBLIC_KEY | Расположение публичного ключа | Ресурс конкретной установки |
| seatmap.security.sso.user-default-password | SEATMAP_SECURITY_SSO_USER_DEFAULT_PASSWORD | Пароль пользователя по умолчанию | PASSWORD |
Ключ Google API
API-ключ – это уникальный идентификатор, который аутентифицирует запросы, связанные с вашим проектом, для целей учёта использования и биллинга.
| Parameter | Environment variable | Описание | Default value |
|---|---|---|---|
| google.api.key | GOOGLE_API_KEY | Значение API-ключа | KEY_VALUE |
Настройки первого запуска
Эти настройки применяются при первом запуске системы.
| Parameter | Environment variable | Описание | Default value |
|---|---|---|---|
| seatmap.first-run.organization | SEATMAP_FIRST_RUN_ORGANIZATION | Имя первой созданной организации | seatmap.pro |
| seatmap.first-run.email | SEATMAP_FIRST_RUN_EMAIL | Email суперадмина | admin@seatmap.pro |
| seatmap.first-run.password | SEATMAP_FIRST_RUN_PASSWORD | Пароль суперадмина | PASSWORD |
Настройки сброса пароля
| Parameter | Environment variable | Описание | Default value |
|---|---|---|---|
| seatmap.reset.fromMail | SEATMAP_RESET_FROMMAIL | Email-адрес, с которого пользователю отправляется сообщение со ссылкой для сброса пароля | Не задано |
| seatmap.reset.token.expire-duration | SEATMAP_RESET_TOKEN_EXPIRE_DURATION | Время жизни ссылки. Формат: PTnHnMnS, где n – соответствующие часы, минуты или секунды |
PT30M (thirty minutes) |
Настройки сервисов
URL-адреса, по которым расположены сервисы.
| Parameter | Environment variable | Описание | Default value |
|---|---|---|---|
| seatmap.services.booking.url | SEATMAP_SERVICES_BOOKING_URL | Адрес сервиса бронирования | https://booking.seatmap.pro/ |
| seatmap.services.metrics.url | SEATMAP_SERVICES_METRICS_URL | Адрес сервиса для отправки сервисных метрик | https://stat.seatmap.pro/editor-metrics |
| seatmap.services.editor.url | SEATMAP_SERVICES_EDITOR_URL | Адрес сервиса редактора | http://localhost:3000/ |
| seatmap.services.core.url | SEATMAP_SERVICES_CORE_URL | Адрес editor core в среде frontend. Editor-service подписывает каждый вызов своим закрытым ключом | http://127.0.0.1:8081/ |
| seatmap.services.preview.url | SEATMAP_SERVICES_PREVIEW_URL | Адрес сервиса предпросмотра | http://localhost:5000/ |
| seatmap.services.preview.api-key | SEATMAP_SERVICES_PREVIEW_API_KEY | Общий секрет, передаваемый конвертеру как bearer-токен. Helm-чарт создаёт и подключает его сам | (пусто) |
| seatmap.services.preview.jobs | SEATMAP_SERVICES_PREVIEW_JOBS | Путь относительно URL конвертера для опроса состояния конверсии в очереди | jobs/ |
| seatmap.services.preview.await-timeout | SEATMAP_SERVICES_PREVIEW_AWAIT_TIMEOUT | Сколько ждать конверсию из очереди, прежде чем считать её неудачной | PT5M |
| seatmap.services.preview.poll-interval | SEATMAP_SERVICES_PREVIEW_POLL_INTERVAL | Интервал между опросами состояния конверсии | PT2S |
Настройки почты
Параметры почтового сервиса для восстановления паролей. Укажите имя пользователя и пароль вашего почтового сервера или оставьте оба пустыми, если сервер принимает почту без входа. Стратегия принимает SMTPS для неявного TLS, SMTP_TLS для STARTTLS или SMTP, который отправляет почту без шифрования, если сервер не предлагает STARTTLS, поэтому используйте его только в доверенной сети. Если стратегия не задана, используется SMTPS на порту 465 и SMTP_TLS на любом другом порту.
Если хост или адрес отправителя (seatmap.reset.fromMail) пуст или пароль задан без имени пользователя, редактор при запуске пишет предупреждение в журнал, а запрос на сброс пароля получает ответ HTTP 503, и письмо не отправляется. Страница сброса пароля в этом случае предлагает пользователю обратиться к администратору.
| Parameter | Environment variable | Описание | Default value |
|---|---|---|---|
| seatmap.mail.username | SEATMAP_MAIL_USERNAME | Имя пользователя | Не задано |
| seatmap.mail.password | SEATMAP_MAIL_PASSWORD | Пароль | Не задано |
| seatmap.mail.host | SEATMAP_MAIL_HOST | Хост | Не задано |
| seatmap.mail.port | SEATMAP_MAIL_PORT | Порт | 587 |
| seatmap.mail.strategy | SEATMAP_MAIL_STRATEGY | Защита соединения | Выбирается по порту |