services tem mais de uma entrada (até 8).
Um template com um único app cria apenas esse app, sem stack.
Declare os serviços
Cada serviço é uma entrada deservices. Apps, bancos de dados e pastas Blob ficam lado a lado, e os placeholders conectam todos:
Serviços opcionais
Torne um banco de dados opcional comwhen, ou ligue e desligue qualquer serviço com sets.services em uma opção de pergunta. Um serviço desligado não é criado e seus placeholders ficam vazios. É assim que um template oferece “Postgres ou SQLite” ou “adicionar workers”; veja Opções e sets. A memória de um serviço desligado não conta para o plano necessário.
Vários bancos de dados do mesmo engine
Você pode declarar mais de um banco de dados do mesmo engine, como um Redis para cache e outro para uma fila. Cada um é um banco de dados comum, com memória própria tirada do plano, e tem seu próprio id de serviço e placeholders. Um banco de dados pertence a uma única stack, e vários apps da stack podem usar o mesmo banco.Pastas Blob
Um serviçoblob dá à stack a pasta stacks/<stack-slug>/ e uma chave gerenciada pela plataforma, restrita a essa pasta. O app a lê pelos placeholders no estilo S3_*. Se o usuário desfizer a stack, a chave é revogada e os arquivos são mantidos. Veja o serviço Blob para os campos.
Como os serviços se conectam
Você nunca escreve um endereço. Use{{services.<id>.host}} ou {{services.<id>.url}}. O app alcança o banco pelo endereço público dele, com certificados de cliente. Um network_mode diferente de public é recusado com STACK_NETWORK_MODE_UNAVAILABLE.
Certificados
Os bancos de dados exigem um certificado de cliente. A plataforma grava os arquivos no app em/app/.vertra/certs/<database_id>/ a cada início, somente leitura, e {{services.<id>.ssl.*_path}} dá os caminhos absolutos:
A pasta é reservada pela plataforma: é ignorada por uploads de código, restaurações de snapshot, rollbacks, downloads e “Salvar como template”, então uma chave privada nunca viaja junto com o código. Se o usuário redefinir os certificados do banco de dados, a plataforma reescreve os arquivos e pede que ele reinicie o app.
Alguns drivers não aceitam certificados apenas por caminho. Quando o seu lê os certificados da URL de conexão, use
{{services.<id>.url}}; para o Prisma 6, use {{services.<id>.prisma_url}}. Veja Conectar um app a um banco de dados para saber como cada driver lê os certificados.
Conectando app a app
Um app alcança outro pela URL pública dele, então o app chamado precisa deweb: required ou web: optional e fica exposto na internet. A plataforma não autentica a chamada: se você quer que apenas o seu próprio app seja aceito, verifique um segredo compartilhado nos dois lados:
api deve recusar uma requisição sem esse token.
Variáveis gerenciadas pela stack
Variáveis que vêm de um placeholder de banco de dados, pasta Blob ou app são gerenciadas: ganham um selo “gerenciada pela stack” e se atualizam sozinhas quando uma senha, certificado ou endereço muda. A plataforma avisa o usuário de que o app precisa ser reiniciado. Editar uma delas à mão a transforma em uma variável comum.Atualizações
Uma stack que veio do seu template atualiza todos os serviços juntos: um snapshot de segurança de cada membro, depois os serviços um após o outro, e um retorno completo ao snapshot se um falhar. Recursos que o usuário adicionou à stack manualmente são ignorados pelas atualizações. Veja Atualizações e rollback.Relacionados
Placeholders e inputs
Todos os placeholders de banco de dados e Blob.
Stacks para usuários
O que o usuário vê e pode fazer com uma stack.