FAQ

Perguntas frequentes sobre o DeployAlly.

Geral

O que é o DeployAlly?

DeployAlly é uma plataforma de deployment declarativo para containers. Você descreve o que quer rodar (template + inputs); a plataforma cuida do como (gerar secrets, resolver dependências, configurar Traefik, esperar saúde).

Quais sistemas operacionais são suportados?

O CLI roda em Linux x86_64 e aarch64 (binário static musl, zero dependências). Os servidores de destino precisam de Linux com Docker 20.10+.

Preciso saber Docker para usar?

Conhecimento básico ajuda, mas não é obrigatório. Templates abstraem a configuração — você fornece domínio, e-mail admin e o resto vem com defaults sensatos.

O DeployAlly é gratuito?

Existem planos gratuitos e pagos. O gratuito inclui 1 servidor, catálogo público de templates e 60 requisições/minuto na API. Planos pagos oferecem mais servidores, templates premium e limites maiores.


Templates

Quais templates estão disponíveis?

Onze templates publicados atualmente:

  • Applications: memos, uptime-kuma, vaultwarden, n8n, wordpress, postal
  • Assets: mariadb, mysql, postgresql, redis
  • Network: traefik

Veja a lista completa em Templates.

Posso criar meus próprios templates?

Sim. Use deployally template new para gerar um scaffold a partir de um archetype:

deployally template new \
  --archetype application \
  --species meu-app \
  --image meu-repo/meu-app:1.0 \
  --port 8080 \
  --out meu-app.yaml

E valide com:

deployally validate --species meu-app --templates-dir .

Veja Templates e Reflang Reference.

Como atualizo um template?

Templates publicados são imutáveis (têm hash SHA256 da spec). Para mudar:

  1. Edite o YAML
  2. Bump da versão (no campo version)
  3. Publicação gera novo hash
  4. Deploys novos usam a nova versão; deploys antigos continuam na anterior

Templates remotos não são modificados diretamente. Para customizar:

  1. Pegue o template como base
  2. Edite localmente
  3. Use com --source local --templates-dir <pasta>

Deployments

Quanto demora um deploy?

Depende do tamanho da imagem e da rede:

  • Primeiro deploy (imagem precisa baixar): 1-5 minutos
  • Deploys subsequentes (imagem em cache): 10-30 segundos
  • Com auto-provisão de asset: + tempo do asset ficar saudável (~30-60s para banco)

Como funciona auto-provisão de assets?

Quando você usa --provision-missing-assets, o deployer:

  1. Detecta dependências declaradas em needs do template
  2. Para cada needs não satisfeito, escolhe a primeira opção da lista
  3. Deploya o asset com variant default: true
  4. Aguarda saúde com retry exponencial (3→15s, até 5 tentativas)
  5. Continua com o deploy do consumer

O que acontece se o deploy falhar?

O container anterior (se houver) permanece rodando. Estratégia blue-green padrão:

  1. Novo container criado em paralelo
  2. Healthcheck executado
  3. Se saudável, Traefik redireciona tráfego
  4. Container antigo removido

Falha no healthcheck = rollback automático.

Posso fazer deploy em múltiplos servidores?

Sim. Cada servidor roda o CLI independente, ou via API/dashboard com server_id por deploy.

O que o profile faz?

Profile ajusta recursos (memória, CPU, pool size) por ambiente:

deployally deploy --species mysql --instance-uid db-001 \
  --profile production --apply

Profiles disponíveis variam por template. Comuns: minimal, development, production.


Segurança

Como as senhas são armazenadas?

  • Localmente: /opt/deployally/manifests/<uid>/secrets.json com permissão 600
  • No servidor: criptografadas com AES-256-GCM no vault
  • Em trânsito: HTTPS TLS 1.3 com certificate pinning no CLI

Senhas nunca aparecem em texto plano em logs ou no banco.

As API Keys são seguras?

Sim:

  • Geradas com entropia criptográfica
  • Armazenadas como hash SHA-256 no servidor
  • Transmitidas apenas via HTTPS
  • Revogáveis a qualquer momento
  • Suportam IP allowlist

Como funcionam secrets gerados?

Templates declaram secrets com providers em cadeia:

secrets:
  DB_PASSWORD:
    provider: input
    generate:
      type: alnum
      length: 32

O motor tenta cada provider em ordem: se o input foi passado, usa; senão, executa generate.alnum(32). Resultado: um valor único por instance, persistido em disco com chmod 600.

O que é Reflang?

Reflang é a linguagem de substituição usada nos templates. Permite referenciar valores (${input.X}, ${secrets.X}), gerar valores em runtime (${random.hex(32)}), e aplicar lógica (${if(input.DEBUG, 'debug', 'info')}). Veja Reflang Reference.


Infraestrutura

Preciso de servidor dedicado?

Não. Funciona em VPS, cloud, dedicado ou máquina local. Mínimo: 1 GB RAM, 10 GB de disco, Docker instalado.

O DeployAlly gerencia DNS?

Não. Você configura o DNS apontando para o servidor; o DeployAlly faz o resto:

  • Roteamento HTTPS via Traefik
  • Certificado Let's Encrypt automático
  • Preflight de DNS antes do deploy (evita deploys quebrados)

Posso usar sem internet?

Parcialmente. Use --offline para forçar fluxo local-only (sem fetch network). Templates precisam estar em cache ou --templates-dir. Auto-provisão funciona se as imagens já estiverem no Docker.

Como faço backup?

Dados ficam em volumes Docker (/var/lib/docker/volumes/). Recomendamos:

  1. Backup periódico dos volumes
  2. Export do manifest da instance (que tem a spec rendered + secrets)
  3. Use ferramentas dedicadas (BackupAlly, restic, rsync)

CLI

Como atualizo o CLI?

deployally self-update

Para canal de release candidate:

deployally self-update --rc

O comando baixa a versão nova, valida, substitui o binário e restaura backup se a verificação falhar.

Como descubro qual versão tenho?

deployally --version

Onde fica a configuração?

/opt/deployally/
├── deployally               # binário
├── config.yaml              # configuração global (opcional)
└── manifests/<uid>/         # estado de cada instance

Troubleshooting

Container não inicia, o que fazer?

  1. Veja logs: docker logs <container-id>
  2. Veja health: docker inspect <container-id> --format '{{json .State.Health}}'
  3. Confira manifest rendered: cat /opt/deployally/manifests/<uid>/manifest.yaml

Veja Troubleshooting para mais cenários.

Como reporto um bug?

  1. Colete deployally --version, logs, manifest e saída de deployally validate
  2. Abra issue em github.com/devborlot/deployally-client
  3. Ou email: suporte@deployally.com

Onde encontro mais ajuda?


Billing e Planos

Como funciona a cobrança?

Plano Free gratuito com limitações. Planos pagos são mensais e você define os limites.

Posso cancelar a qualquer momento?

Sim, pelo dashboard. Seus dados permanecem acessíveis por 30 dias após o cancelamento.

O que acontece se exceder o limite?

Requisições além do limite retornam 429 Rate Limited. Containers continuam rodando normalmente — só a API fica limitada.

By Borlot.com.br on 05/06/2026