配置 Editor 服务
Editor 是 seatmap.pro 的组件,基于 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 | 连接安全策略 | 按端口选择 |