Saltar al contenido principal
Una plantilla cerrada permite a un cliente ejecutar tu software en su propia cuenta sin poder abrir su código. Defines code.view: false en el manifiesto, ocultas las variables que te pertenecen con env_hidden y envías un enlace de uso: el cliente lo previsualiza, rellena sus propias respuestas y obtiene una aplicación que arranca, se detiene, registra logs y hace snapshots como cualquier otra, con el código sellado. En este tutorial entregas un bot a un cliente de este modo. La plataforma aplica el sellado en su propia API, en cada ruta que lee o modifica archivos y código, no solo en el panel. No hace que tu código sea secreto para quien controle la máquina donde se ejecuta ni para el equipo de Vertra, y no puede protegerte de un fallo en tu propio código que sirva archivos. Lee Permisos para ver la lista completa de garantías.

Antes de empezar

Una plantilla de código privada que funcione, como la del primer tutorial. Las plantillas abiertas y cerradas comparten la misma estructura, así que solo cambias los permisos.
Un plan que pueda crear plantillas privadas (consulta Planes y límites).
Una segunda cuenta en la que puedas iniciar sesión. Es la única forma de ver la vista previa y la aplicación cerrada exactamente como las ve el cliente.

Qué puede y qué no puede hacer el cliente

Las bases de datos nunca están cerradas: el cliente tiene acceso completo a sus datos, como en cualquier base de datos que posea. Mantén todo lo que deba quedar fuera del alcance del cliente en tu propio código y variables, no en la base de datos.

Paso a paso

1

Decide qué es tuyo y qué es del cliente

Divide la configuración en dos. Lo que aporta el cliente (su token de Discord) se convierte en una pregunta. Lo que aportas tú (una clave de un servicio que pagas tú, o una licencia) se convierte en una variable oculta: se inyecta en la aplicación, la API nunca la devuelve y nunca se muestra en el panel. En este tutorial el bot lee VENDOR_API_KEY, que es tuya.
2

Escribe el manifiesto cerrado

Parte del manifiesto del primer tutorial y cambia tres cosas: define code.view como false, añade la variable oculta y deja fuera todo lo que una plantilla cerrada no puede permitir.
vertracloud.template.yaml
  • permissions.code.view: false es lo que cierra la plantilla. La plataforma deduce el resto: sin variables libres, sin edición de comandos, sin terminal, sin guardar como plantilla, sin desvincular, sin despliegue de código.
  • env_hidden lista claves de env. El valor se escribe en el manifiesto solo para que la plataforma pueda almacenarlo; una vez creada la plantilla, el manifiesto almacenado ya no lo contiene.
  • Lo que debes dejar fuera. code.edit: true, env.add: true, commands.edit: true y share.full_copy: true se rechazan en una plantilla cerrada con invalid_permissions, porque cada uno devolvería el código o sus secretos. No los incluyas en absoluto.
  • Los placeholders siguen funcionando. Las respuestas del cliente y los secretos generados entran en la aplicación como de costumbre; el código que ocultas es lo único que el cliente no puede leer.
El valor real de VENDOR_API_KEY está en este archivo, así que mantén este manifiesto fuera de cualquier repositorio público. Define el valor solo en la máquina que ejecuta vertra template create y no lo subas al repositorio. Cuando publicas una versión nueva, una clave oculta que dejes fuera de env conserva su valor anterior, y un valor que envíes de nuevo lo sustituye. vertra template validate no conoce la versión anterior, así que sigue exigiendo la clave en env.
El código cerrado y env_hidden solo existen en plantillas privadas, y env_hidden solo en una cerrada (si no, el validador da el error invalid_permissions). Una plantilla del catálogo público siempre muestra su código, y el catálogo rechaza code.view: false y env_hidden con forbidden_in_public.
3

Valida

Prueba una combinación prohibida para ver la regla en acción: añade code: { view: false, edit: true } y el hallazgo es permissions.code.edit con código invalid_permissions (“A closed template cannot let users edit its code”). Quita de nuevo la línea edit.
4

Crea la plantilla

La plantilla es privada y aparece como una entrada nueva en Plantillas, Mis plantillas, con la etiqueta Código cerrado. Una plantilla cerrada nunca es legible por otras cuentas: pedir el manifiesto de una que no es tuya devuelve null.
5

Crea el enlace de uso

Un enlace de uso da al cliente el derecho de crear aplicaciones a partir de la plantilla, con su propia copia de la imagen cuando la plantilla usa una. Para un cliente, hazlo de un solo uso y de corta duración:
La CLI imprime el token una sola vez. Cópialo y envíaselo al cliente de inmediato; después solo podrás ver el final y revocarlo. En el panel, lo mismo es Plantillas, Mis plantillas, la plantilla, Enlaces para compartir, Crear enlace.También existe un enlace de copia completa, que da al receptor una plantilla propia con código e imagen. No está disponible aquí: un enlace de copia completa muestra el código, así que en una plantilla cerrada el panel dice “No disponible: plantilla cerrada” y la API rechaza la combinación del manifiesto con invalid_permissions.
Haz tú mismo la primera ejecución con la segunda cuenta: abre el enlace sin sesión iniciada, comprueba la vista previa, inicia sesión y crea la aplicación. Después prueba el gestor de archivos y el terminal, y confirma que están cerrados.
6

Conoce lo que ve el cliente

El enlace abre una página de vista previa antes de crear nada. El cliente ve el autor, la versión, lo que se creará (servicios, memoria mínima, plan necesario, cupos de imagen), una insignia No verificado por Vertra y este aviso:
Código cerrado. Los valores que rellenas (por ejemplo, tu clave de OpenAI) van a un código que no puedes ver. Estás confiando en el autor.
Después el cliente inicia sesión, elige dónde crear la aplicación y responde a las preguntas. La vista previa tiene un botón Denunciar para cualquiera que considere abusivo la plantilla. En la aplicación, el cliente ve la etiqueta Plantilla cerrada y la explicación de que el código pertenece al autor y qué acciones siguen abiertas.Sé honesto con tu cliente sobre la confianza que implica: el aviso anterior se le muestra por diseño.
7

Actualiza y revoca

Para corregir algo, sube version y ejecuta vertra template create --template support-bot --changelog "Describe the change". El cliente ve Nueva versión disponible y actualiza cuando quiere, con un snapshot de seguridad previo; una actualización nunca es automática. Cuando termina el contrato con el cliente, revoca el enlace:
Revocar detiene las nuevas creaciones y deja de ofrecer actualizaciones. Lo que el cliente ya creó sigue funcionando: le pertenece, y tú nunca puedes detener, eliminar ni leer nada en su cuenta.

Solución de problemas

Próximos pasos

Última modificación el 28 de octubre de 2026