Skip to content

Autoalojamiento

Referencia de configuración

Cada ajuste de Keyright autoalojado: la referencia completa de variables de entorno, cómo generar los secretos, la configuración de la base de datos y las cadenas de conexión, la marca blanca del panel y el portal, y los valores de Kubernetes/Helm que realmente establecerás.

La referencia completa para configurar una instancia autoalojada. La guía de despliegue te lleva a aplicar estos ajustes en orden; esta página es a la que vuelves para el nombre y el significado exactos de cada ajuste.

Variables de entorno

Establécelas como variables de entorno (o mediante un gestor de secretos en producción).

VariableObligatoriaPropósito
KEYRIGHT_DBsíCadena de conexión Npgsql (consulta Base de datos). Compose la construye a partir de POSTGRES_PASSWORD para la BD incluida.
KEYRIGHT_ADMIN_TOKENsíTu credencial de proveedor/administración, que protege cada llamada /admin/*. La ruta de runtime del cliente (/v1/*) nunca la necesita. Trátala como una contraseña de root — si no se establece, toda la superficie de administración devuelve 401.
KEYRIGHT_KEKsíClave de cifrado de claves de 32 bytes en Base64 que cifra tus claves de firma en reposo. El servicio se niega a arrancar sin ella en Producción.
KEYRIGHT_SELF_LICENSE / _FILEsíTu licencia o clave de prueba de Keyright (Licenciamiento) — JSON en línea, o una ruta a un archivo. Necesaria para ejecutar.
KEYRIGHT_SIGNING_KEYrecomendadaClave privada RSA PKCS#8 en Base64 que firma los leases offline y los bloques de crédito aislados. Las aplicaciones de tus clientes integran la clave pública correspondiente. Si no se establece, se genera una clave por inquilino en la BD.
KEYRIGHT_SELF_LICENSE_GRACE_DAYSopcionalVentana de gracia de solo lectura de pago tras el vencimiento (por defecto 15).
KEYRIGHT_LEASE_TTL_DAYSopcionalDuración del lease en línea (por defecto 14).
KEYRIGHT_PUBLIC_URLopcionalOrigen externo https://… del panel/portal, para que los enlaces se resuelvan correctamente detrás de un proxy.
KEYRIGHT_CRON_SECRETopcionalProtege los endpoints del planificador externo (consulta Operaciones → Tareas programadas).
KEYRIGHT_BRAND_NAME / _COMPANY / _LOGO_URL / _COLOR / _SUPPORT_URLopcionalMarca blanca del panel/portal — una característica Enterprise (se aplica solo cuando tu licencia otorga whitelabel; de lo contrario, la marca neutra de Keyright). Consulta Marca blanca.
KEYRIGHT_SSO_ISSUER / _AUDIENCE / _PUBLIC_KEY / _AUTHORITYopcionalSSO del panel (SAML/OIDC) — una característica Enterprise (activa solo cuando tu licencia otorga sso).
KEYRIGHT_GEOIP_URLopcionalBúsqueda de ubicación del equipo; déjala vacía para desactivarla en ejecuciones aisladas.
KEYRIGHT_PORTopcionalPuerto del host para el archivo Compose incluido (por defecto 8080).
KEYRIGHT_PLATFORM_TOKENdéjala sin establecerEl modo multi-inquilino / operador es una capacidad licenciada, exclusiva del modo gestionado. Este token solo se respeta cuando la autolicencia otorga un derecho operator — que las licencias autoalojadas nunca llevan — así que en una instancia autoalojada no tiene ningún efecto: la instancia siempre es de un solo inquilino y permanece totalmente sujeta a licencia. La multi-inquilinaria es exclusiva del servicio gestionado (SaaS) de Keyright.

Generar los secretos

openssl rand -hex 24                                                            # KEYRIGHT_ADMIN_TOKEN
openssl rand -base64 32                                                         # KEYRIGHT_KEK (decodes to 32 bytes)
openssl genrsa 2048 | openssl pkcs8 -topk8 -nocrypt -outform DER | base64 -w0   # KEYRIGHT_SIGNING_KEY

(En macOS/BSD, base64 no tiene -w0; usa ... -outform DER | base64 | tr -d '\n'.) Tu KEYRIGHT_KEK y tu KEYRIGHT_SIGNING_KEY son tuyas — las generas tú, nosotros nunca las vemos. Haz copia de seguridad de ellas por separado y de forma segura: sin la KEK, las claves de firma cifradas en tu base de datos no pueden recuperarse.

Base de datos

Tú proporcionas un servidor PostgreSQL y una base de datos vacía; Keyright construye el esquema por sí mismo en el primer arranque. Nunca importas un esquema ni ejecutas SQL a mano — las migraciones están compiladas en la imagen y se ejecutan automáticamente (db.Database.Migrate()), de modo que el primer arranque y cada actualización son un solo paso.

Crear la base de datos y el rol

CREATE DATABASE keyright ENCODING 'UTF8' TEMPLATE template0;
CREATE ROLE keyright_app LOGIN PASSWORD 'a-strong-password';
ALTER DATABASE keyright OWNER TO keyright_app;   -- simplest: the app role owns its database

El rol de la aplicación debe poder ejecutar DDL (CREATE/ALTER/DROP), porque Keyright aplica migraciones de EF Core al arrancar — el primer arranque crea cada tabla y siembra el inquilino por defecto; las actualizaciones aplican solo las migraciones nuevas. Hacer que el rol sea el propietario de la base de datos es la configuración correcta más simple. En PostgreSQL 15+, si el rol no es el propietario, añade también GRANT ALL ON SCHEMA public TO keyright_app;.

Algunos proveedores gestionados (Azure Database for PostgreSQL Flexible Server, Cloud SQL) no te dejan ejecutar CREATE DATABASE directamente — crea la base de datos vacía y el rol desde su consola/CLI en su lugar, y luego otorga permisos como se indica arriba. AWS RDS/Aurora, Google Cloud SQL, Azure, Neon, Supabase, etc. funcionan todos.

Cadena de conexión (KEYRIGHT_DB)

Formato Npgsql; exige TLS contra cualquier Postgres gestionado:

Host=db.internal.example.com;Port=5432;Database=keyright;Username=keyright_app;Password=...;SSL Mode=Require;Trust Server Certificate=true

Usa Trust Server Certificate=true solo si no validas la CA del servidor; prefiere SSL Mode=VerifyFull con una CA de confianza en producción.

Postgres incluido (solo evaluación)

docker compose y el chart de Helm (postgres.enabled=true) pueden arrancar un postgres:16 por ti, con la base de datos y el rol precreados y un volumen persistente. Está bien para evaluación e instalaciones pequeñas de un solo nodo; para producción ejecuta un Postgres gestionado o HA y apunta KEYRIGHT_DB a él.

Marca blanca del panel y el portal (Enterprise)

Establece las variables de marca y reinicia. Se aplican solo cuando tu licencia otorga whitelabel (Enterprise); en Standard o una licencia caducada se usa la marca neutra Keyright y estas se ignoran. No hay un conmutador “Settings” en el panel para esto en autoalojamiento — la marca es configuración, no un ajuste almacenado.

KEYRIGHT_BRAND_NAME=Acme Licensing                     # replaces "Keyright" in the dashboard/portal + emails
KEYRIGHT_BRAND_COMPANY=Acme GmbH                       # footer / legal line
KEYRIGHT_BRAND_LOGO_URL=https://cdn.acme.example/logo.svg   # absolute https URL to a logo (SVG/PNG); omit for the default mark
KEYRIGHT_BRAND_COLOR=#2f63f6                           # accent colour as a hex #RRGGBB
KEYRIGHT_BRAND_SUPPORT_URL=https://acme.example/support    # "Support" link target

Confirma que se aplicó con GET <base>/branding (devuelve el nombre/empresa/logo/color en vivo).

Valores de Kubernetes (Helm)

El chart en deploy/helm/keyright/ lee estos valores. La guía de despliegue tiene los comandos helm upgrade --install completos; los parámetros que establecerás con más frecuencia:

ValorPropósito
image.repository / image.tagImagen + versión. Sin image.tag se usa por defecto el appVersion del chart; fíjalo (p. ej. --set image.tag=2.2.2) para despliegues reproducibles.
secrets.adminToken / secrets.kekObligatorios — el chart se niega a renderizar sin ellos. Pásalos con --set-string.
secrets.selfLicenseTu licencia. Pásala con --set-file secrets.selfLicense=license.json — nunca con --set-string (las comas del JSON rompen el parser).
postgres.enabledtrue (por defecto) ejecuta un Postgres incluido dentro del clúster para evaluación; ponlo en false para producción y proporciona externalDatabase.connectionString.
postgres.imageSustituye la imagen de BD incluida, p. ej. --set postgres.image=<registry>/postgres:16 para evitar los límites de descarga de Docker Hub o en un clúster restringido.
externalDatabase.connectionStringTu KEYRIGHT_DB cuando postgres.enabled=false. Pásala con --set-string (contiene comas).
replicaCountNúmero de nodos de aplicación sin estado (2+ para HA — no se necesita afinidad de sesión).
brand.name / .company / .color / .logoUrl / .supportUrlMarca blanca (Enterprise). Pásalos con --set-string.
ingress.*, resources.*Host/TLS del ingress y CPU/memoria por pod. Consulta values.yaml para cada parámetro.

La aplicación ejecuta sus migraciones de base de datos al arrancar, así que la base de datos debe estar accesible cuando arranca el pod — una BD inaccesible (host/credenciales incorrectos, sin ruta de red, regla de firewall ausente) deja el pod en CrashLoopBackOff con un error de “connection” de Npgsql, no en un pod no-listo. Confirma el DNS/egreso a tu BD antes de desplegar. GET /health es liveness; GET /health/ready también comprueba la conectividad de la BD una vez en marcha.

Llega al servicio sin un ingress mediante un port-forward. El servicio se llama <release>-keyright — con el release keyright eso se resuelve a keyright-keyright:

kubectl port-forward -n keyright svc/keyright-keyright 8080:8080