Saltar al contenido principal
Una plantilla con dos o más servicios crea un stack: un recurso que agrupa las apps, las bases de datos y las carpetas Blob, las mantiene conectadas y se actualiza, se guarda en snapshot y se elimina como una unidad. No declaras el stack; existe porque services tiene más de una entrada (hasta 8). Una plantilla con una sola app crea solo esa app, sin stack.

Declara los servicios

Cada servicio es una entrada de services. Las apps, las bases de datos y las carpetas Blob conviven, y los placeholders las conectan:
Todo se crea en un solo job. El orden es: validación, el stack, las bases de datos (el job espera a que estén listas), las carpetas Blob, las imágenes, las apps, las variables, los certificados, el inicio, el healthcheck y los outputs. Si falla algún paso, la plataforma elimina solo lo que creó ese job, sin snapshot de seguridad porque todavía nada contiene datos del usuario, e informa del paso y del error.

Servicios opcionales

Haz opcional una base de datos con when, o activa o desactiva cualquier servicio con sets.services en una opción de pregunta. Un servicio desactivado no se crea y sus placeholders quedan vacíos. Así un misma plantilla ofrece «Postgres o SQLite» o «añadir workers»; consulta Opciones y sets. La memoria de un servicio desactivado no cuenta para el plan requerido.

Varias bases de datos del mismo motor

Puedes declarar más de una base de datos del mismo motor, por ejemplo un Redis para caché y otro para una cola. Cada una es una base de datos normal con su propia memoria tomada del plan, y cada una tiene su propio id de servicio y sus placeholders. Una base de datos pertenece a un solo stack, y varias apps del stack pueden usar la misma base de datos.

Carpetas Blob

Un servicio blob da al stack la carpeta stacks/<stack-slug>/ y una clave gestionada por la plataforma, restringida a esa carpeta. La app la lee mediante los placeholders de estilo S3_*. Si el usuario deshace el stack, la clave se revoca y los archivos se conservan. Consulta el servicio Blob para ver los campos.

Cómo se conectan los servicios

Nunca escribes una dirección. Usa {{services.<id>.host}} o {{services.<id>.url}}. La app llega a la base de datos por su dirección pública, con certificados de cliente. Un network_mode distinto de public se rechaza con STACK_NETWORK_MODE_UNAVAILABLE.

Certificados

Las bases de datos exigen un certificado de cliente. La plataforma escribe los archivos en la app en /app/.vertra/certs/<database_id>/ en cada inicio, en solo lectura, y {{services.<id>.ssl.*_path}} te da sus rutas absolutas: La carpeta está reservada por la plataforma: las subidas de código, las restauraciones de snapshot, los rollbacks, las descargas y «Guardar como plantilla» la omiten, de modo que una clave privada nunca viaja con el código. Si el usuario restablece los certificados de la base de datos, la plataforma reescribe los archivos y le pide que reinicie la app. Algunos drivers no pueden recibir certificados solo por ruta. Cuando el tuyo los lee de la URL de conexión, usa {{services.<id>.url}}; para Prisma 6, usa {{services.<id>.prisma_url}}. Consulta Conectar una app a una base de datos para ver cómo lee los certificados cada driver.

Conectar app con app

Una app llega a otra por su URL pública, así que la app llamada necesita web: required o web: optional y queda expuesta en internet. La plataforma no autentica la llamada: si quieres que solo se acepte tu propia app, comprueba un secreto compartido en ambos lados:
Tu api debe rechazar una petición sin ese token.

Variables gestionadas por el stack

Las variables que vienen de un placeholder de una base de datos, de una carpeta Blob o de una app están gestionadas: llevan una insignia «gestionada por el stack» y se actualizan solas cuando cambia una contraseña, un certificado o una dirección. La plataforma avisa al usuario de que la app debe reiniciarse. Editar una a mano la convierte en una variable normal.

Actualizaciones

Un stack que vino de tu plantilla actualiza todos sus servicios juntos: un snapshot de seguridad de cada miembro, luego los servicios uno tras otro y una vuelta completa al snapshot si uno falla. Los recursos que el usuario añadió a mano al stack son ignorados por las actualizaciones. Consulta Actualizar y hacer rollback.

Relacionado

Placeholders e inputs

Todos los placeholders de bases de datos y Blob.

Stacks para usuarios

Qué ve y qué puede hacer el usuario con un stack.
Última modificación el 30 de octubre de 2026