Kubrik OSSUPPORTSOPORTE All productsTodos los productos
Technical manualManual técnico › Installation › Installing › Configuration referenceInstalación › Instalación › Referencia de configuración

Configuration reference

Referencia de configuración

Every setting of the application that an operator can change. All of them are environment variables of the backend service; none is edited inside the image.

Todos los ajustes de la aplicación que puede cambiar un operador. Todos son variables de entorno del servicio backend; ninguno se edita dentro de la imagen.

👤 Who: System administrator📍 Where: environment block of backend · .env
👤 Quién: Administrador de sistemas📍 Dónde: Bloque environment de backend · .env

How settings are read

Cómo se leen los ajustes

The application reads its settings once, when it starts. To change one, edit the Compose file or .env and recreate the container with docker compose -f docker-compose.<edition>.yml up -d. The tables below describe an application started with SPRING_PROFILES_ACTIVE=prod,<edition>. In that mode a required variable with no value stops the start-up and the log names it.

La aplicación lee sus ajustes una sola vez, al arrancar. Para cambiar uno, editá el archivo Compose o .env y recreá el contenedor con docker compose -f docker-compose.<edición>.yml up -d. Las tablas de abajo describen una aplicación arrancada con SPRING_PROFILES_ACTIVE=prod,<edición>. En ese modo, una variable obligatoria sin valor detiene el arranque y el registro la nombra.

Start-up mode

Modo de arranque

VariableWhat it doesDefaultRequired
SPRING_PROFILES_ACTIVESelects the set of settings. Use prod plus the edition, separated by a comma.The edition of the image, alone.Yes
JAVA_OPTSOptions passed to Java, for example the memory limits.EmptyNo
PMS_GATING_ENABLEDWith true, the application refuses the calls to a module that is off for the organisation. See Editions.falseNo
VariableQué haceValor de fábricaObligatoria
SPRING_PROFILES_ACTIVEElige el juego de ajustes. Usá prod más la edición, separados por una coma.La edición de la imagen, sola.Sí
JAVA_OPTSOpciones que se le pasan a Java, por ejemplo los límites de memoria.VacíoNo
PMS_GATING_ENABLEDCon true, la aplicación rechaza las llamadas a un módulo apagado para la organización. Mirá Ediciones.falseNo

Database

Base de datos

VariableWhat it doesDefaultRequired
SPRING_R2DBC_URLAddress the application uses for its daily work, in the form r2dbc:postgresql://<host>:<port>/<database>.NoneYes
SPRING_R2DBC_USERNAME · SPRING_R2DBC_PASSWORDUser and password for the daily work.NoneYes
SPRING_FLYWAY_URLAddress used to run the migrations at start-up, in the form jdbc:postgresql://<host>:<port>/<database>. The same database as above.NoneYes
SPRING_FLYWAY_USER · SPRING_FLYWAY_PASSWORDUser and password for the migrations. It must be the owner of the database, because it creates and alters tables.NoneYes
VariableQué haceValor de fábricaObligatoria
SPRING_R2DBC_URLDirección que usa la aplicación para el trabajo diario, con la forma r2dbc:postgresql://<host>:<puerto>/<base>.NingunoSí
SPRING_R2DBC_USERNAME · SPRING_R2DBC_PASSWORDUsuario y contraseña para el trabajo diario.NingunoSí
SPRING_FLYWAY_URLDirección con la que se corren las migraciones al arrancar, con la forma jdbc:postgresql://<host>:<puerto>/<base>. La misma base de arriba.NingunoSí
SPRING_FLYWAY_USER · SPRING_FLYWAY_PASSWORDUsuario y contraseña para las migraciones. Tiene que ser el dueño de la base, porque crea y modifica tablas.NingunoSí

The application keeps up to 60 connections to the database open. Leave room for them in the connection limit of PostgreSQL, which is 100 unless you change it.

La aplicación mantiene abiertas hasta 60 conexiones a la base de datos. Dejales lugar en el límite de conexiones de PostgreSQL, que es 100 si no lo cambiás.

💡
A separate user for the daily work. The migrations create a second database user, ks_erp_app, with fewer privileges and no password. With it, the database itself keeps each organisation's rows apart. To use it, give it a password once with ALTER ROLE ks_erp_app LOGIN PASSWORD '<your-password>'; after the first start, then set SPRING_R2DBC_USERNAME to ks_erp_app and SPRING_R2DBC_PASSWORD to that password, and leave the migration user as it is. The Compose files use the owner for both.Un usuario aparte para el trabajo diario. Las migraciones crean un segundo usuario de base de datos, ks_erp_app, con menos privilegios y sin contraseña. Con él, la propia base de datos mantiene separadas las filas de cada organización. Para usarlo, dale una contraseña una sola vez con ALTER ROLE ks_erp_app LOGIN PASSWORD '<tu-contraseña>'; después del primer arranque, después poné SPRING_R2DBC_USERNAME en ks_erp_app y SPRING_R2DBC_PASSWORD en esa contraseña, y dejá el usuario de migraciones como está. Los archivos Compose usan al dueño para las dos cosas.

Cache

Caché

VariableWhat it doesDefaultRequired
SPRING_DATA_REDIS_HOSTHost of the Redis server.NoneYes
SPRING_DATA_REDIS_PORTPort of the Redis server.6379No
SPRING_DATA_REDIS_PASSWORDPassword, when the server asks for one.EmptyNo
VariableQué haceValor de fábricaObligatoria
SPRING_DATA_REDIS_HOSTHost del servidor Redis.NingunoSí
SPRING_DATA_REDIS_PORTPuerto del servidor Redis.6379No
SPRING_DATA_REDIS_PASSWORDContraseña, cuando el servidor la pide.VacíoNo

File store

Almacén de archivos

VariableWhat it doesDefaultRequired
MINIO_S3_PROVIDERminio for a MinIO server, s3 for Amazon S3. Any other value leaves the application without a file store and it does not start.NoneYes
MINIO_S3_ENDPOINTAddress of the MinIO server. It is also the address written in the download links. With s3 it is not used, but it still needs a value.NoneYes
MINIO_S3_BUCKETBucket where files are kept. With minio, it is created at start-up when it does not exist. With s3, create it beforehand.NoneYes
MINIO_S3_REGIONRegion of the bucket.NoneYes
MINIO_S3_INDEX_LOG_BUCKETA second bucket name. No function of this version writes to it; it only needs a value.NoneYes
STORAGE_ACCESS_KEY · STORAGE_SECRET_KEYUser and password of the file store. With s3 you may leave both out, and the application takes the identity that the platform gives to the container.NoneWith minio
VariableQué haceValor de fábricaObligatoria
MINIO_S3_PROVIDERminio para un servidor MinIO, s3 para Amazon S3. Cualquier otro valor deja a la aplicación sin almacén y no arranca.NingunoSí
MINIO_S3_ENDPOINTDirección del servidor MinIO. Es también la dirección que queda escrita en los enlaces de descarga. Con s3 no se usa, pero igual necesita un valor.NingunoSí
MINIO_S3_BUCKETBucket donde se guardan los archivos. Con minio, se crea al arrancar cuando no existe. Con s3, crealo antes.NingunoSí
MINIO_S3_REGIONRegión del bucket.NingunoSí
MINIO_S3_INDEX_LOG_BUCKETUn segundo nombre de bucket. Ninguna función de esta versión escribe en él; solo necesita un valor.NingunoSí
STORAGE_ACCESS_KEY · STORAGE_SECRET_KEYUsuario y contraseña del almacén. Con s3 podés no ponerlos, y la aplicación toma la identidad que la plataforma le da al contenedor.NingunoCon minio

Secret keys

Claves secretas

VariableWhat it protectsRuleRequired
PMS_SECURITY_JWT_SECRETThe sessions of every user.At least 32 characters. Generate it with openssl rand -base64 64.Yes
PMS_SECURITY_TOTP_ENCRYPTION_KEYThe two-step verification data of every user.32 characters. Generate it with openssl rand -base64 32 | cut -c1-32.Yes
KSERP_MASTER_KEY_V1The access data of external services that organisations save in the system.Exactly 32 bytes written in Base64: openssl rand -base64 32.Yes
KSERP_CREDENTIALS_CURRENT_KEY_VERSIONWhich master key encrypts new data.Default 1.No
KUBRIK_WORKFLOW_SECRET_KEYThe access data that workflows use to call other systems.Exactly 32 bytes written in Base64: openssl rand -base64 32.Yes
KUBRIK_WORKFLOW_SECRET_KEY_IDA name for that key, recorded with everything it encrypts.Default k1. It cannot be empty.No
VariableQué protegeReglaObligatoria
PMS_SECURITY_JWT_SECRETLas sesiones de todos los usuarios.Al menos 32 caracteres. Generala con openssl rand -base64 64.Sí
PMS_SECURITY_TOTP_ENCRYPTION_KEYLos datos de la verificación en dos pasos de cada usuario.32 caracteres. Generala con openssl rand -base64 32 | cut -c1-32.Sí
KSERP_MASTER_KEY_V1Los datos de acceso de servicios externos que las organizaciones guardan en el sistema.Exactamente 32 bytes escritos en Base64: openssl rand -base64 32.Sí
KSERP_CREDENTIALS_CURRENT_KEY_VERSIONCon cuál clave maestra se cifran los datos nuevos.De fábrica 1.No
KUBRIK_WORKFLOW_SECRET_KEYLos datos de acceso con los que los flujos de trabajo llaman a otros sistemas.Exactamente 32 bytes escritos en Base64: openssl rand -base64 32.Sí
KUBRIK_WORKFLOW_SECRET_KEY_IDUn nombre para esa clave, que queda anotado junto a todo lo que cifra.De fábrica k1. No puede quedar vacío.No
⛔
Generate every key yourself and never change one lightly. The application refuses to start with a missing key, a key that is too short or one of the sample values of the source tree. Changing PMS_SECURITY_JWT_SECRET only makes everybody sign in again. Changing or losing any of the other three makes the data it protects unreadable.Generá vos cada clave y no cambies ninguna a la ligera. La aplicación se niega a arrancar si falta una clave, si es demasiado corta o si es uno de los valores de ejemplo del código fuente. Cambiar PMS_SECURITY_JWT_SECRET solo hace que todos vuelvan a ingresar. Cambiar o perder cualquiera de las otras tres vuelve ilegibles los datos que protege.

Addresses of your site

Direcciones de tu sitio

VariableWhat it doesDefaultRequired
APP_CORS_ALLOWED_ORIGINSThe web addresses allowed to call the application from a browser, separated by commas. Put the address of the administration app and, if you publish it, of the storefront.NoneYes
APP_BASE_URLThe public address of the application. It is written in the links that share a document.NoneYes
KUBRIK_FRONTEND_BASE_URLThe public address of the administration app, for the links in the notification e-mails of workflows.Taken from the verification address below.No
APP_MAIL_VERIFICATION_LINK_BASEThe page that the verification e-mail links to: the address of the administration app followed by /verify-email.An address of Kubrik's own site: always replace it.In practice, yes
VariableQué haceValor de fábricaObligatoria
APP_CORS_ALLOWED_ORIGINSLas direcciones web que pueden llamar a la aplicación desde un navegador, separadas por comas. Poné la de la aplicación de administración y, si la publicás, la de la tienda.NingunoSí
APP_BASE_URLLa dirección pública de la aplicación. Queda escrita en los enlaces para compartir un documento.NingunoSí
KUBRIK_FRONTEND_BASE_URLLa dirección pública de la aplicación de administración, para los enlaces de los correos de aviso de los flujos de trabajo.Se toma de la dirección de verificación de abajo.No
APP_MAIL_VERIFICATION_LINK_BASELa página a la que lleva el correo de verificación: la dirección de la aplicación de administración seguida de /verify-email.Una dirección del sitio de Kubrik: reemplazala siempre.En la práctica, sí

E-mail, documents, location and assistant

Correo, documentos, ubicación y asistente

VariableWhat it doesDefault
APP_MAIL_TRANSPORTHow e-mail leaves: smtp, graph (Microsoft 365) or log (nothing is sent).graph
APP_MAIL_FROM · APP_MAIL_FROM_NAMEAddress and name shown as the sender.An address of Kubrik and the name Kubrik ERP: replace both.
SPRING_MAIL_HOST · SPRING_MAIL_PORT · SPRING_MAIL_USERNAME · SPRING_MAIL_PASSWORDThe mail server, with smtp.None
AZURE_TENANT_ID · AZURE_CLIENT_ID · AZURE_CLIENT_SECRET · APP_MAIL_GRAPH_SENDERThe Microsoft 365 application and the mailbox that sends, with graph. The four are required with that transport.None
PDF_RENDERERgotenberg or openhtmltopdf. Any other value stops the start-up.gotenberg
PDF_GOTENBERG_URLAddress of the Gotenberg service.An internal cluster address: set yours.
PDF_GOTENBERG_TIMEOUTLongest wait for a document.60s
KSERP_GEOIP_MMDB_PATHPath, inside the container, of the location database file.Empty: no location.
KSERP_GEOIP_ENABLEDWith false, location is switched off even when the file exists.true
KSERP_AI_CREDENTIALS_SOURCEWhere the key of the artificial intelligence provider comes from. Use tenant-key: each organisation loads its own.cli-profile
VariableQué haceValor de fábrica
APP_MAIL_TRANSPORTPor dónde sale el correo: smtp, graph (Microsoft 365) o log (no se envía nada).graph
APP_MAIL_FROM · APP_MAIL_FROM_NAMEDirección y nombre que figuran como remitente.Una dirección de Kubrik y el nombre Kubrik ERP: reemplazá los dos.
SPRING_MAIL_HOST · SPRING_MAIL_PORT · SPRING_MAIL_USERNAME · SPRING_MAIL_PASSWORDEl servidor de correo, con smtp.Ninguno
AZURE_TENANT_ID · AZURE_CLIENT_ID · AZURE_CLIENT_SECRET · APP_MAIL_GRAPH_SENDERLa aplicación de Microsoft 365 y la casilla que envía, con graph. Las cuatro son obligatorias con ese transporte.Ninguno
PDF_RENDERERgotenberg u openhtmltopdf. Cualquier otro valor detiene el arranque.gotenberg
PDF_GOTENBERG_URLDirección del servicio Gotenberg.Una dirección interna de clúster: poné la tuya.
PDF_GOTENBERG_TIMEOUTEspera máxima por un documento.60s
KSERP_GEOIP_MMDB_PATHRuta, dentro del contenedor, del archivo de la base de ubicación.Vacío: sin ubicación.
KSERP_GEOIP_ENABLEDCon false, la ubicación queda apagada aunque el archivo exista.true
KSERP_AI_CREDENTIALS_SOURCEDe dónde sale la clave del proveedor de inteligencia artificial. Usá tenant-key: cada organización carga la suya.cli-profile

Each of these services is explained in Optional services.

Cada uno de estos servicios está explicado en Servicios opcionales.

What the prod mode switches off

Qué apaga el modo prod

Common issues

Problemas habituales

"Could not resolve placeholder" followed by a name
A required variable has no value. The name in the message, in capitals and with underscores, is the variable to set.
I changed a variable and nothing happened
Settings are read at start-up. Recreate the container with docker compose -f docker-compose.<edition>.yml up -d; restarting it is not enough when the change is in the Compose file or in .env.
The browser reports a CORS error
The address in the browser is not in APP_CORS_ALLOWED_ORIGINS. Write it exactly as it appears, with https:// and without a final slash.
«Could not resolve placeholder» seguido de un nombre
Una variable obligatoria no tiene valor. El nombre del mensaje, en mayúsculas y con guiones bajos, es la variable que falta.
Cambié una variable y no pasó nada
Los ajustes se leen al arrancar. Recreá el contenedor con docker compose -f docker-compose.<edición>.yml up -d; reiniciarlo no alcanza cuando el cambio está en el archivo Compose o en .env.
El navegador informa un error de CORS
La dirección del navegador no está en APP_CORS_ALLOWED_ORIGINS. Escribila exactamente como aparece, con https:// y sin barra final.

RelatedRelacionado