Multi-service no mesmo repo
Cenário: 3 services no mesmo docker-compose.yml, registrados como 3
apps separadas. App 1 deploya OK. App 2 falha assim:
Sintoma:
[FAIL] meu-app-2 bundle decrypt failed: invalid macCausa
runner add --repo agency/meet --instance frontend e
runner add --repo agency/meet --instance backend criam duas ckeys
distintas. As duas apps compartilham o mesmo .runner/secrets.enc
no repo — só a primeira a fazer push consegue decriptar. A segunda
tenta decriptar com a própria ckey e falha.
Workflow correto — setup inicial (v2.30.6+)
# 1. Registra app primária
runner add --repo agency/meet --instance frontend
# 2. Registra as outras apps do mesmo repo
runner add --repo agency/meet --instance backend
runner add --repo agency/meet --instance livekit
# 3. Unifica ckey — frontend é o source-of-truth
runner ckeys copy --from frontend --to backend
runner ckeys copy --from frontend --to livekit
# 4. Verifica que os valores plaintext batem
runner secrets diff frontend backend
runner secrets diff frontend livekit
# 5. Deploya
runner deploy frontend
runner deploy backend
runner deploy livekitSe já está em produção e quebrado
Operator descobre 3 apps com 3 ckeys diferentes.
# 1. Backup ANTES de mexer
runner ckeys export backend > backend.ckey.bak
runner ckeys export livekit > livekit.ckey.bak
# 2. Unifica ckeys para a do frontend
runner ckeys copy --from frontend --to backend
runner ckeys copy --from frontend --to livekit
# 3. Re-encripta bundle com a nova ckey (frontend)
runner secrets reset-bundle frontend --yes
# 4. Deploya todos para puxar o novo bundle
runner deploy frontend
runner deploy backend
runner deploy livekitSe runner secrets diff mostrou valores conflitantes no passo de
diagnóstico, resolva o conflito antes do reset-bundle:
runner env set backend KEY=valor-correto
runner secrets diff frontend backend # deve estar limpo antes de continuarPer-service bundle paths (v2.30.7+)
Em compose multi-service, o runner salva bundles separados por service:
pull/frontend/.runner/secrets.encpull/backend/.runner/secrets.encpull/livekit/.runner/secrets.enc
Isso reduz colisão de bundle, mas as ckeys ainda precisam estar
alinhadas para secrets reset-bundle funcionar sem sobrescrever o
bundle do outro service.
Como prevenir
No primeiro runner add de cada service adicional, copie a ckey
imediatamente:
runner add --repo agency/meet --instance backend
runner ckeys copy --from frontend --to backendUse runner secrets diff antes de unificar a ckey — ele mostra
valores conflitantes entre as apps antes que a unificação os esconda.
Ver também
- Secrets lifecycle — como a ckey funciona
- Wizard state machine — estado MultiServiceCompose
- Bundle decrypt failed — ckey errada, bundle corrompido ou sumido