配置 Editor 服务

Editor 是 的组件,基于 Spring Boot 构建。

配置分为两个文件:

  • application.yaml:通用系统设置。
  • application-seatmap.yaml:应用专属设置。

1.74 起的运行时与升级

编辑器前端镜像运行 Node,在静态文件之外提供 Editor Core。自定义安装请使用镜像入口点,并通过 /healthz 检查前端就绪与存活。Core 在前端 Web 端口(PORT,默认 8081)的 /core 提供服务,所有调用方都必须提供有效 Editor 令牌。Editor-service 使用私钥为每次调用签发短期令牌,通过 seatmap.services.core.url 访问 Core。默认 http://127.0.0.1:8081/ 指向同一 Helm Pod 的前端容器;若不在同一 Pod,例如分别作为 Compose 服务,需改为前端地址。跨主机时保持时钟同步。指标监听端口(CORE_METRICS_PORT,默认 9091)应仅内部访问。单独托管静态文件不提供 Core 服务。

后端与前端必须使用匹配的 RSA 签名密钥。Helm 使用已有 <release>-rsa Secret 中的 private-key 和 public-key,将前端公钥只读挂载到 /keys/public-key。自定义前端也应在该位置挂载匹配公钥,或通过 CORE_PUBLIC_KEY_FILE 指定。缺少公钥时,前端启动记录错误,/core 拒绝所有调用;文件无法读取为有效公钥时,前端启动失败。

Helm 配置项 默认值 用途
editor.frontend.coreWorkers 1 核心工作进程数,提高时需增加前端 CPU 和内存
editor.frontend.jobTimeoutMs 20000 核心任务截止时间,毫秒
editor.frontend.drainTimeoutMs 15000 关闭排空截止时间,毫秒
editor.terminationGracePeriodSeconds 30 Pod 终止宽限期,秒

这些值接受不超过 2147483647 的正整数,省略或 null 使用默认值。终止宽限期必须比排空截止时间至少长五秒。Chart 将后端 Core 读取超时设为任务截止时间加五秒,再向下取整为秒。前端资源限制使用 global.resources.frontend。

Helm 之外设置 CORE_WORKERS、CORE_JOB_TIMEOUT_MS、CORE_DRAIN_TIMEOUT_MS,并同步后端 Core 读取超时。不设 CORE_WORKERS 时,运行时可自动选进程数;Helm 默认固定为一个。

Docker Compose 中,两个 Editor 容器作为普通服务运行。将 Editor-service 的 SEATMAP_SERVICES_CORE_URL 设为 Compose 网络中的前端服务,例如 http://editor-client:8081/。在前端挂载匹配公钥到 /keys/public-key,为两个 Editor 容器均设置 30 秒停止宽限期,因为 Compose 默认 10 秒短于 15 秒排空截止时间。1.74 部署包已配置这些内容,为每次安装生成签名密钥对,并包含现有安装升级指南。

升级 1.74 时,Editor-service 与前端应一起升级;新 Booking-service 启动前,Editor-service 应完成 V121–V127 迁移。迁移完成后立即升级 Booking-service,因为旧版本在 V121 执行后无法读取活动。V122 前应检查每活动重复的已确认引用。迁移预检、服务顺序和布局兼容限制见版本部署指南。

application.yaml

延迟设置

系统启动后开始任务前的延迟。

参数 环境变量 说明 默认值
initial INITIAL_DELAY 延迟,毫秒 5000 (五秒)

Java Spring 框架属性

参数 环境变量 说明 默认值
spring.profiles.include SPRING_PROFILES_INCLUDE 是否加载其他 profile 的属性 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 是否基于序列式数据库结构生成标识符 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 对非空且无历史表的数据库结构执行迁移时,是否自动建立基线 ’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 请求路径与 Controller 处理器的匹配策略 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 包中类的日志配置。

参数 环境变量 说明 默认值
logging.level.pro.seatmap LOGGING_LEVEL_PRO_SEATMAP 日志级别 DEBUG

服务器设置

参数 环境变量 说明 默认值
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 Servlet 会话有效期 2d
server.tomcat.max-http-form-post-size SERVER_TOMCAT_MAX_HTTP_FORM_POST_SIZE POST 请求最大大小 20MB

通知设置

图片就绪通知路径。

参数 环境变量 说明 默认值
notify.path NOTIFY_PATH 通知路径 /topic/venues/

application-seatmap.yaml

在此文件配置以下参数。

安全设置

security 配置块设置刷新令牌、访问令牌的有效期,并管理密钥。

参数 环境变量 说明 默认值
seatmap.security.token.refresh.expire-duration SEATMAP_SECURITY_TOKEN_REFRESH_EXPIRE_DURATION 刷新令牌有效期;格式 PTnHnMnS,n 分别为小时、分钟或秒 PT2H (两小时)
seatmap.security.token.access.expire-length SEATMAP_SECURITY_TOKEN_ACCESS_EXPIRE_LENGTH 访问令牌有效期,毫秒 300000 (五分钟)
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 密钥是用于验证项目请求、统计用量和计费的唯一标识符。

参数 环境变量 说明 默认值
google.api.key GOOGLE_API_KEY API 密钥值 KEY_VALUE

首次运行设置

首次运行系统时应用。

参数 环境变量 说明 默认值
seatmap.first-run.organization SEATMAP_FIRST_RUN_ORGANIZATION 首次创建的组织名称 seatmap.pro
seatmap.first-run.email SEATMAP_FIRST_RUN_EMAIL 租户管理员邮箱 admin@seatmap.pro
seatmap.first-run.password SEATMAP_FIRST_RUN_PASSWORD 租户管理员密码 PASSWORD

密码重置设置

参数 环境变量 说明 默认值
seatmap.reset.fromMail SEATMAP_RESET_FROMMAIL 向用户发送密码重置链接的发件地址 未设置
seatmap.reset.token.expire-duration SEATMAP_RESET_TOKEN_EXPIRE_DURATION 链接有效期,格式 PTnHnMnS,n 分别为小时、分钟或秒 PT30M (三十分钟)

服务设置

各服务的 URL。

参数 环境变量 说明 默认值
seatmap.services.booking.url SEATMAP_SERVICES_BOOKING_URL Booking 服务地址 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 Editor 服务地址 http://localhost:3000/
seatmap.services.core.url SEATMAP_SERVICES_CORE_URL 前端运行时的 Editor Core 地址,每次调用由 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 时明文发送,仅应在可信网络使用。未设置策略时,465 端口使用 SMTPS,其他端口使用 SMTP_TLS。

主机或发件地址 seatmap.reset.fromMail 为空,或设置密码但无用户名时,Editor 启动会记录警告,密码重置请求返回 HTTP 503 且不发送邮件。密码重置页会要求用户联系管理员。

参数 环境变量 说明 默认值
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 连接安全策略 按端口选择

输入功能、设置、端点或 SDK 方法。