Configuración del servicio Editor
Editor es un componente de seatmap.pro.
Es una aplicación construida con Spring Boot.
La configuración del Editor consta de dos archivos:
- application.yaml - ajustes generales del sistema
- application-seatmap.yaml - ajustes específicos de la aplicación
Entorno y actualizaciones desde 1.74
La imagen frontend ejecuta Node y sirve el editor core junto a los archivos estáticos. Usa el punto de entrada de la imagen y /healthz para las sondas frontend. El servicio core responde en /core en el puerto web del frontend (PORT, por defecto 8081) y exige un token válido del editor a cada llamada. Editor-service acompaña cada una de sus llamadas con un token de corta duración firmado con su clave privada y llega al core en seatmap.services.core.url. El valor por defecto, http://127.0.0.1:8081/, es el contenedor frontend del mismo pod de Helm; si se ejecutan fuera de un mismo pod, por ejemplo como servicios separados de Docker Compose, indica la dirección del frontend y, en hosts distintos, mantén sincronizados sus relojes. Mantén interno el puerto de métricas (CORE_METRICS_PORT, por defecto 9091). Servir solo archivos estáticos no proporciona el servicio core.
Mantén las mismas claves RSA configuradas para backend y frontend. Helm usa el Secret existente <release>-rsa, con private-key y public-key, y monta la clave pública frontend en solo lectura en /keys/public-key. En instalaciones frontend propias, monta ahí la clave pública correspondiente o indica su ruta con CORE_PUBLIC_KEY_FILE. Sin ella, el frontend registra un error al arrancar y /core rechaza todas las llamadas; un archivo que no contenga una clave pública legible detiene el frontend al arrancar.
| Valor Helm | Predeterminado | Función |
|---|---|---|
editor.frontend.coreWorkers |
1 |
Workers core; aumenta CPU y memoria al aumentar este valor. |
editor.frontend.jobTimeoutMs |
20000 |
Plazo de un trabajo en milisegundos. |
editor.frontend.drainTimeoutMs |
15000 |
Plazo de finalización al apagar, en milisegundos. |
editor.terminationGracePeriodSeconds |
30 |
Periodo de terminación del pod en segundos. |
Admiten enteros positivos hasta 2147483647. Si se omiten o son null, se usan los valores iniciales. El periodo de terminación debe superar al de finalización en al menos cinco segundos. El chart calcula el timeout de lectura backend con cinco segundos adicionales al plazo del trabajo, redondeados hacia abajo a segundos enteros. Los recursos frontend se configuran en global.resources.frontend.
Fuera de Helm, usa CORE_WORKERS, CORE_JOB_TIMEOUT_MS y CORE_DRAIN_TIMEOUT_MS, y alinea el timeout backend. Sin CORE_WORKERS, el entorno puede elegir automáticamente; Helm fija inicialmente un worker.
En Docker Compose, los dos contenedores del editor se ejecutan como servicios normales. Indica en SEATMAP_SERVICES_CORE_URL de editor-service el servicio frontend en la red de Compose, por ejemplo http://editor-client:8081/. Monta la clave pública correspondiente en /keys/public-key del contenedor frontend y da a ambos contenedores del editor un periodo de parada de 30 segundos, porque los 10 segundos predeterminados de Compose son menos que el plazo de finalización de 15 segundos. El paquete de Docker Compose para 1.74 lo configura, genera un par de claves de firma para cada instalación e incluye una guía de actualización para las instalaciones de Compose existentes.
Para actualizar a 1.74, editor-service aplica V121–V127 antes de iniciar el nuevo booking-service. Revisa las referencias confirmadas duplicadas por evento antes de V122. Consulta la guía de despliegue de la versión para el orden, la consulta previa y la compatibilidad de planos.
application.yaml
Ajustes de retardo
Retardo antes de iniciar los trabajos tras el arranque del sistema.
| Parameter | Environment variable | Descripción | Default value |
|---|---|---|---|
| initial | INITIAL_DELAY | Retardo en milisegundos | 5000 (five seconds) |
Propiedades del framework Java Spring
| Parameter | Environment variable | Descripción | Default value |
|---|---|---|---|
| spring.profiles.include | SPRING_PROFILES_INCLUDE | Si se añaden las propiedades de otro perfil | seatmap |
| spring.jpa.generate-ddl | SPRING_JPA_GENERATE_DDL | Si se habilita la generación de DDL | true |
| spring.jpa.properties.hibernate.jdbc.batch_size | SPRING_JPA_PROPERTIES_HIBERNATE_JDBC_BATCH_SIZE | Número de sentencias INSERT, UPDATE y DELETE a agrupar en una sola llamada a la base de datos | 50 |
| spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults | SPRING_JPA_PROPERTIES_HIBERNATE_TEMP_USE_JDBC_METADATA_DEFAULTS | Si se consultan los metadatos JDBC para determinar ciertos valores predeterminados cuando la base de datos puede no estar disponible | false |
| spring.jpa.properties.hibernate.order_inserts | SPRING_JPA_PROPERTIES_HIBERNATE_ORDER_INSERTS | Si se ordenan las inserciones SQL por el valor de la clave primaria de los elementos insertados | false |
| spring.jpa.properties.javax.persistence.schema-generation.create-source | SPRING_JPA_PROPERTIES_JAVAX_PERSISTENCE_SCHEMA_GENERATION_CREATE_SOURCE | Si se generan los comandos DDL del esquema | metadata |
| spring.jpa.properties.javax.persistence.schema-generation.scripts.action | SPRING_JPA_PROPERTIES_JAVAX_PERSISTENCE_SCHEMA_GENERATION_SCRIPTS_ACTION | Si se crea o actualiza el esquema de la base de datos | update |
| spring.jpa.properties.javax.persistence.schema-generation.scripts.create-target | SPRING_JPA_PROPERTIES_JAVAX_PERSISTENCE_SCHEMA_GENERATION_SCRIPTS_CREATE_TARGET | Nombre de archivo para la generación del script | ddl_jpa_creation.sql |
| spring.jpa.hibernate.ddl-auto | SPRING_JPA_HIBERNATE_DDL_AUTO | Cómo inicializar la base de datos | update |
| spring.jpa.hibernate.use-new-id-generator-mappings | SPRING_JPA_HIBERNATE_USE_NEW_ID_GENERATOR_MAPPINGS | Si se generan valores de identificador basados en una estructura de base de datos de tipo secuencia | true |
| spring.jpa.database-platform | SPRING_JPA_DATABASE_PLATFORM | Base de datos utilizada | org.hibernate.dialect.PostgreSQLDialect |
| spring.jpa.open-in-view | SPRING_JPA_OPEN_IN_VIEW | Si se habilita OSIV | false |
| spring.jackson.mapper.DEFAULT_VIEW_INCLUSION | SPRING_JACKSON_MAPPER_DEFAULT_VIEW_INCLUSION | Si se incluyen propiedades no anotadas en todas las vistas | true |
| spring.flyway.baseline-on-migrate | SPRING_FLYWAY_BASELINE_ON_MIGRATE | Si se llama automáticamente a baseline cuando se ejecuta migrate sobre un esquema no vacío sin tabla de historial de esquema | ’true' |
| spring.datasource.hikari.data-source-properties.reWriteBatchedInserts | SPRING_DATASOURCE_HIKARI_DATA_SOURCE_PROPERTIES_REWRITEBATCHEDINSERTS | Si se reescriben las sentencias de inserción normales en sentencias de varios valores para inserciones por lotes | true |
| spring.datasource.hikari.maximum-pool-size | SPRING_DATASOURCE_HIKARI_MAXIMUM_POOL_SIZE | Tamaño máximo del pool | 20 |
| spring.datasource.hikari.connection-timeout | SPRING_DATASOURCE_HIKARI_CONNECTION_TIMEOUT | Tiempo de espera de conexión | 60000 |
| spring.datasource.driver-class-name | SPRING_DATASOURCE_DRIVER_CLASS_NAME | Controlador JDBC para comunicarse con la base de datos | org.postgresql.Driver |
| spring.datasource.password | SPRING_DATASOURCE_PASSWORD | Contraseña para conectarse a la base de datos | ${DB_PASSWORD:postgres} |
| spring.datasource.username | SPRING_DATASOURCE_USERNAME | Nombre de usuario para conectarse a la base de datos | ${DB_USERNAME:seatmap} |
| spring.datasource.url | SPRING_DATASOURCE_URL | Ubicación de la base de datos | ${DB_URL:jdbc:postgresql://localhost:15432/seatmap} |
| spring.servlet.multipart.enabled | SPRING_SERVLET_MULTIPART_ENABLED | Si se habilita el soporte de cargas multipart | true |
| spring.servlet.multipart.max-file-size | SPRING_SERVLET_MULTIPART_MAX_FILE_SIZE | Tamaño máximo permitido para los archivos cargados | 200MB |
| spring.servlet.multipart.max-request-size | SPRING_SERVLET_MULTIPART_MAX_REQUEST_SIZE | Tamaño máximo permitido para las solicitudes multipart/form-data | 215MB |
| spring.servlet.multipart.file-size-threshold | SPRING_SERVLET_MULTIPART_FILE_SIZE_THRESHOLD | Umbral de tamaño a partir del cual los archivos se escriben en disco | 2KB |
| spring.mvc.pathmatch.matching-strategy | SPRING_MVC_PATHMATCH_MATCHING_STRATEGY | Estrategia de implementación para hacer coincidir las rutas de las solicitudes con los manejadores del controlador | ant_path_matcher |
| spring.data.redis.port | SPRING_DATA_REDIS_PORT | Puerto del servidor Redis | 16379 |
| spring.data.redis.host | SPRING_DATA_REDIS_HOST | Host del servidor Redis | localhost |
Ajustes de registro
Ajustes de registro que se aplican a las clases del paquete pro.seatmap.
| Parameter | Environment variable | Descripción | Default value |
|---|---|---|---|
| logging.level.pro.seatmap | LOGGING_LEVEL_PRO_SEATMAP | Nivel de registro | DEBUG |
Ajustes del servidor
| Parameter | Environment variable | Descripción | Default value |
|---|---|---|---|
| server.compression.min-response-size | SERVER_COMPRESSION_MIN_RESPONSE_SIZE | Tamaño mínimo de los archivos a comprimir | 1024 |
| server.compression.enabled | SERVER_COMPRESSION_ENABLED | Si se comprimen los datos | true |
| server.compression.mime-types | SERVER_COMPRESSION_MIME_TYPES | Tipos MIME a comprimir | text/html,text/xml,text/plain,text/css,text/javascript,application/javascript,application/json |
| server.servlet.session.timeout | SERVER_SERVLET_SESSION_TIMEOUT | Duración de la sesión del servlet | 2d |
| server.tomcat.max-http-form-post-size | SERVER_TOMCAT_MAX_HTTP_FORM_POST_SIZE | Tamaño máximo de una solicitud POST | 20MB |
Ajustes de notificaciones
Ruta para las notificaciones de Image Ready.
| Parameter | Environment variable | Descripción | Default value |
|---|---|---|---|
| notify.path | NOTIFY_PATH | Ruta de notificación | /topic/venues/ |
application-seatmap.yaml
En el archivo application-seatmap.yaml puedes configurar los parámetros descritos a continuación.
Ajustes de seguridad
El bloque security permite definir la duración de los tokens de actualización y de acceso, así como gestionar las claves.
| Parameter | Environment variable | Descripción | Default value |
|---|---|---|---|
| seatmap.security.token.refresh.expire-duration | SEATMAP_SECURITY_TOKEN_REFRESH_EXPIRE_DURATION | Duración del token de actualización. Formato: PTnHnMnS, donde n son las horas, minutos o segundos correspondientes |
PT2H (two hours) |
| seatmap.security.token.access.expire-length | SEATMAP_SECURITY_TOKEN_ACCESS_EXPIRE_LENGTH | Duración del token de acceso en milisegundos | 300000 (five minutes) |
| seatmap.security.rsa.private-key | SEATMAP_SECURITY_RSA_PRIVATE_KEY | Ubicación de la clave privada | Recurso de la instalación |
| seatmap.security.rsa.public-key | SEATMAP_SECURITY_RSA_PUBLIC_KEY | Ubicación de la clave pública | Recurso de la instalación |
| seatmap.security.sso.user-default-password | SEATMAP_SECURITY_SSO_USER_DEFAULT_PASSWORD | Contraseña de usuario predeterminada | PASSWORD |
Clave de Google API
Una clave de API es un identificador único que autentica las solicitudes asociadas a tu proyecto para fines de uso y facturación.
| Parameter | Environment variable | Descripción | Default value |
|---|---|---|---|
| google.api.key | GOOGLE_API_KEY | Valor de la clave de API | KEY_VALUE |
Ajustes de primera ejecución
Estos ajustes se aplican la primera vez que se ejecuta el sistema.
| Parameter | Environment variable | Descripción | Default value |
|---|---|---|---|
| seatmap.first-run.organization | SEATMAP_FIRST_RUN_ORGANIZATION | Nombre de la primera organización creada | seatmap.pro |
| seatmap.first-run.email | SEATMAP_FIRST_RUN_EMAIL | Email del superadministrador | admin@seatmap.pro |
| seatmap.first-run.password | SEATMAP_FIRST_RUN_PASSWORD | Contraseña del superadministrador | PASSWORD |
Ajustes de restablecimiento de contraseña
| Parameter | Environment variable | Descripción | Default value |
|---|---|---|---|
| seatmap.reset.fromMail | SEATMAP_RESET_FROMMAIL | Dirección de email desde la que se envía al usuario un mensaje con un enlace de restablecimiento de contraseña | Sin valor |
| seatmap.reset.token.expire-duration | SEATMAP_RESET_TOKEN_EXPIRE_DURATION | Duración del enlace. Formato: PTnHnMnS, donde n son las horas, minutos o segundos correspondientes |
PT30M (thirty minutes) |
Ajustes de servicios
Las URL en las que se encuentran los servicios.
| Parameter | Environment variable | Descripción | Default value |
|---|---|---|---|
| seatmap.services.booking.url | SEATMAP_SERVICES_BOOKING_URL | Dirección del servicio de reservas | https://booking.seatmap.pro/ |
| seatmap.services.metrics.url | SEATMAP_SERVICES_METRICS_URL | Dirección del servicio al que enviar las métricas del servicio | https://stat.seatmap.pro/editor-metrics |
| seatmap.services.editor.url | SEATMAP_SERVICES_EDITOR_URL | Dirección del servicio del editor | http://localhost:3000/ |
| seatmap.services.core.url | SEATMAP_SERVICES_CORE_URL | Dirección del editor core en el entorno frontend. Editor-service firma cada llamada con su clave privada | http://127.0.0.1:8081/ |
| seatmap.services.preview.url | SEATMAP_SERVICES_PREVIEW_URL | Dirección del servicio de vista previa | http://localhost:5000/ |
| seatmap.services.preview.api-key | SEATMAP_SERVICES_PREVIEW_API_KEY | Secreto compartido enviado al conversor como token bearer. El chart de Helm lo genera y lo configura | (vacío) |
| seatmap.services.preview.jobs | SEATMAP_SERVICES_PREVIEW_JOBS | Ruta bajo la URL del conversor que se consulta para una conversión en cola | jobs/ |
| seatmap.services.preview.await-timeout | SEATMAP_SERVICES_PREVIEW_AWAIT_TIMEOUT | Tiempo máximo de espera de una conversión en cola antes de darla por fallida | PT5M |
| seatmap.services.preview.poll-interval | SEATMAP_SERVICES_PREVIEW_POLL_INTERVAL | Intervalo entre consultas del estado de la conversión | PT2S |
Ajustes de correo
Parámetros del servicio de correo para restablecer contraseñas. Configure el usuario y la contraseña de su servidor de correo, o deje ambos vacíos si el servidor acepta correo sin iniciar sesión. La estrategia admite SMTPS para TLS implícito, SMTP_TLS para STARTTLS o SMTP, que envía sin cifrar cuando el servidor no ofrece STARTTLS, así que úselo solo en una red de confianza. Sin valor, la estrategia es SMTPS en el puerto 465 y SMTP_TLS en cualquier otro puerto.
Si el host o la dirección del remitente (seatmap.reset.fromMail) están vacíos, o la contraseña está configurada sin nombre de usuario, el editor registra una advertencia al iniciarse y una solicitud de restablecimiento de contraseña responde HTTP 503 sin enviar correo. La página de restablecimiento de contraseña pide entonces al usuario que contacte con su administrador.
| Parameter | Environment variable | Descripción | Default value |
|---|---|---|---|
| seatmap.mail.username | SEATMAP_MAIL_USERNAME | Nombre de usuario | Sin valor |
| seatmap.mail.password | SEATMAP_MAIL_PASSWORD | Contraseña | Sin valor |
| seatmap.mail.host | SEATMAP_MAIL_HOST | Host | Sin valor |
| seatmap.mail.port | SEATMAP_MAIL_PORT | Puerto | 587 |
| seatmap.mail.strategy | SEATMAP_MAIL_STRATEGY | Seguridad de la conexión | Según el puerto |