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.yamlE 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:
- Edite o YAML
- Bump da versão (no campo
version) - Publicação gera novo hash
- Deploys novos usam a nova versão; deploys antigos continuam na anterior
Posso modificar um template do catálogo?
Templates remotos não são modificados diretamente. Para customizar:
- Pegue o template como base
- Edite localmente
- 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:
- Detecta dependências declaradas em
needsdo template - Para cada
needsnão satisfeito, escolhe a primeira opção da lista - Deploya o asset com variant
default: true - Aguarda saúde com retry exponencial (3→15s, até 5 tentativas)
- 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:
- Novo container criado em paralelo
- Healthcheck executado
- Se saudável, Traefik redireciona tráfego
- 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 --applyProfiles disponíveis variam por template. Comuns: minimal, development, production.
Segurança
Como as senhas são armazenadas?
- Localmente:
/opt/deployally/manifests/<uid>/secrets.jsoncom 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: 32O 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:
- Backup periódico dos volumes
- Export do manifest da instance (que tem a spec rendered + secrets)
- Use ferramentas dedicadas (BackupAlly, restic, rsync)
CLI
Como atualizo o CLI?
deployally self-updatePara canal de release candidate:
deployally self-update --rcO 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 --versionOnde fica a configuração?
/opt/deployally/
├── deployally # binário
├── config.yaml # configuração global (opcional)
└── manifests/<uid>/ # estado de cada instanceTroubleshooting
Container não inicia, o que fazer?
- Veja logs:
docker logs <container-id> - Veja health:
docker inspect <container-id> --format '{{json .State.Health}}' - Confira manifest rendered:
cat /opt/deployally/manifests/<uid>/manifest.yaml
Veja Troubleshooting para mais cenários.
Como reporto um bug?
- Colete
deployally --version, logs, manifest e saída dedeployally validate - Abra issue em github.com/devborlot/deployally-client
- 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.