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.
Desde 1.75.0, editor-service valida el par RSA configurado al arrancar y registra la huella SHA-256 de la clave pública. Configura ambos parámetros y proporciona al frontend la clave pública correspondiente. Helm y el paquete Docker Compose ya suministran el par. Al sustituirlo, todos los usuarios deben iniciar sesión de nuevo una vez. Las claves externas de al menos 2048 bits son obligatorias desde 1.76.0.
| 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, cambia editor-service y el frontend del editor a la vez; editor-service aplica V121–V127 antes de iniciar el nuevo booking-service. Actualiza booking-service en cuanto terminen las migraciones, porque la versión anterior no puede leer eventos una vez aplicada V121. 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.flyway.user | SPRING_FLYWAY_USER | Usuario que aplica las migraciones de la base de datos al arrancar | Igual que spring.datasource.username |
| spring.flyway.password | SPRING_FLYWAY_PASSWORD | Contraseña del usuario de migraciones | Igual que spring.datasource.password |
| spring.flyway.placeholders.approles | SPRING_FLYWAY_PLACEHOLDERS_APPROLES | Roles, separados por comas, que usan los servicios y no son el usuario de migraciones; al arrancar reciben acceso a las tablas | (vacío) |
| 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 |
Roles separados para migraciones y aplicación
Editor-service aplica las migraciones de la base de datos al arrancar con el usuario de SPRING_FLYWAY_USER y la contraseña de SPRING_FLYWAY_PASSWORD, o con el usuario del origen de datos si no están definidas. Si editor-service o booking-service se conecta con otro rol, más restringido, indica ese rol en SPRING_FLYWAY_PLACEHOLDERS_APPROLES de editor-service. Si los servicios usan roles distintos, enuméralos separados por comas, por ejemplo editor_app,booking_app.
En cada arranque, editor-service concede a cada rol indicado SELECT, INSERT, UPDATE y DELETE sobre las tablas y vistas del esquema, y USAGE, SELECT y UPDATE sobre sus secuencias, pero ningún acceso a la tabla de historial de esquema de Flyway. Los privilegios predeterminados dan el mismo acceso a las tablas y secuencias que creen las migraciones posteriores. Cada rol indicado debe existir; si no, editor-service se detiene al arrancar con un error que nombra el rol que falta.
Define la variable antes de actualizar, para que el primer arranque conceda también acceso a las tablas de versiones anteriores. Déjala vacía cuando todos los servicios se conecten con el usuario de migraciones. Las instalaciones con Helm y Docker Compose se conectan así y no necesitan cambios.
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 | PEM PKCS#8 RSA de clave privada propio de la instalación, obligatorio; en línea o ruta file:; al menos 2048 bits |
Recurso de la instalación |
| seatmap.security.rsa.public-key | SEATMAP_SECURITY_RSA_PUBLIC_KEY | PEM SPKI RSA de clave pública propio de la instalación, obligatorio; en línea o ruta file:; al menos 2048 bits |
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 |