Referência CLI
Documentação completa dos comandos do deployally.
Instalação
curl -fsSL https://get.deployally.com/init.sh | sudo bashCanal de release candidate:
curl -fsSL https://get.deployally.com/init.sh | sudo bash -s -- --rcDownload direto do binário:
# x86_64
curl -Lo deployally https://get.deployally.com/x86_64/deployally
chmod +x deployally
sudo mv deployally /usr/local/bin/
# aarch64
curl -Lo deployally https://get.deployally.com/aarch64/deployally
chmod +x deployally
sudo mv deployally /usr/local/bin/Estrutura de Comandos
deployally [comando-global]
deployally <subcomando> [opções]Comandos globais (--version, self-update) e os comandos de catálogo e deploy (deploy, validate, template new, templates, apikey) ficam todos no nível raiz.
Comandos Globais
`--version` / `-V`
Exibe a versão do CLI.
deployally --version`--help` / `-h`
Exibe ajuda.
deployally --help
deployally deploy --help`self-update`
Atualiza o CLI para a versão mais recente do CDN.
deployally self-update| Flag | Descrição |
|---|---|
--rc |
Usa canal de release candidate em vez de stable |
--force |
Força reinstalação mesmo na última versão |
O comando baixa o binário, valida (-V), substitui e restaura backup se falhar.
Comandos de Catálogo e Deploy
Tabela rápida:
| Comando | Descrição |
|---|---|
validate |
Valida um template do catálogo ou local |
template new |
Gera scaffold de template a partir de um archetype |
deploy |
Faz deploy de uma instance |
undeploy |
Remove uma instance (inverso do deploy) |
templates |
Lista, localiza e identifica templates (list, locate, check, identify) |
apikey |
Gerencia API keys (list, create, show, rotate, revoke) |
`validate`
Valida a estrutura, referências da Reflang e contratos de archetype de um template.
Sintaxe
deployally validate --species <SPECIES> [opções]Opções
| Opção | Tipo | Default | Descrição |
|---|---|---|---|
--species |
string | — | Obrigatório. Species do template (ex: memos) |
--templates-dir |
path | — | Diretório com templates locais; se omitido busca no catálogo remoto |
--json |
bool | false |
Saída em JSON estruturado |
Exit Codes
| Código | Significado |
|---|---|
| 0 | Válido, sem warnings |
| 1 | Válido com warnings |
| 2 | Erros de validação |
Exemplos
# Validar template do catálogo
deployally validate --species memos
# Validar template local antes de publicar
deployally validate --species meu-app --templates-dir ./templates
# Saída JSON (uso programático)
deployally validate --species memos --jsonO que é validado
- Schema do template (campos obrigatórios por archetype)
- Cada referência
${input.X},${secrets.X}, etc. tem origem declarada - Funções da Reflang têm aridade correta
- Healthcheck declarado se archetype exigir (multi_component_saas)
- Rotas HTTP referenciam componentes existentes
- Predicates do ContractIR satisfazem o archetype
`template new`
Gera um scaffold YAML para um novo template, pronto para edição.
Sintaxe
deployally template new --archetype <A> --species <S> [opções]Opções
| Opção | Tipo | Default | Descrição |
|---|---|---|---|
--archetype |
enum | — | Obrigatório. application, asset, static, worker, multi_component_saas, network_appliance |
--species |
string | — | Obrigatório. Slug do template (ex: meu-app) |
--out |
path | stdout | Arquivo de saída |
--port |
int | 8080 | Porta interna do container |
--data-path |
path | — | Path para volume de dados (assets) |
--version |
string | 0.1.0 |
Versão inicial do template |
--family |
string | derivado | Family taxonômica |
--repo |
url | — | URL do repositório upstream (referência) |
--image |
string | — | Image reference (ex: repo/app:1.0) |
--listen-port |
int | — | Porta no host para bind direto (sem proxy) |
--provision-action |
string | — | Action exposta como per-instance dispatcher |
Exemplos
# Application simples
deployally template new \
--archetype application \
--species memos-clone \
--image neosmemo/memos:0.20 \
--port 5230 \
--out memos-clone.yaml
# Asset com dispatcher para criação de databases
deployally template new \
--archetype asset \
--species meu-db \
--image meu-org/db:latest \
--port 5432 \
--data-path /var/lib/db \
--provision-action create-database \
--out meu-db.yaml
# Multi-component SaaS
deployally template new \
--archetype multi_component_saas \
--species meu-saas \
--out meu-saas.yaml`deploy`
Faz deploy de uma instance do template.
Sintaxe
deployally deploy --species <S> --instance-uid <UID> [opções]Opções
| Opção | Tipo | Default | Descrição |
|---|---|---|---|
--species |
string | — | Obrigatório. Species do template |
--instance-uid |
string | — | Obrigatório. Identificador único da instance (ex: memos-001) |
--apply |
bool | false |
Aplica o deploy de verdade; sem isso é dry-run implícito |
--dry-run |
bool | false |
Mostra o que seria feito, sem executar |
--profile |
string | — | Profile do template (minimal, production, etc.) |
--input KEY=VALUE |
repetível | — | Define um input do template |
--variant |
string | default | Variant de imagem (ex: mysql-8.4, mysql-5.7) |
--provision-missing-assets |
bool | false |
Auto-provisiona assets declarados em needs se não estiverem rodando |
--offline |
bool | false |
Força fluxo local-only (sem fetch do registry) |
--templates-dir |
path | — | Usa templates desse diretório em vez do catálogo remoto |
--source |
enum | local |
local ou remote |
Exemplos
# Deploy básico
deployally deploy --species memos \
--instance-uid memos-001 \
--input WEB_HOSTNAME=memos.exemplo.com \
--apply
# Dry-run pra ver o que seria feito
deployally deploy --species memos \
--instance-uid memos-001 \
--input WEB_HOSTNAME=memos.exemplo.com \
--dry-run
# Com profile de produção
deployally deploy --species mysql \
--instance-uid mysql-prod \
--profile production \
--apply
# Variant específico (MySQL 5.7 em vez de 8.4)
deployally deploy --species mysql \
--instance-uid mysql-legacy \
--variant mysql-5.7 \
--apply
# Auto-provisão de banco para WordPress
deployally deploy --species wordpress \
--instance-uid blog-001 \
--input WEB_HOSTNAME=blog.exemplo.com \
--input ADMIN_EMAIL=admin@exemplo.com \
--provision-missing-assets \
--apply
# Deploy de template local
deployally deploy --species meu-app \
--instance-uid meu-app-001 \
--templates-dir ./templates \
--source local \
--apply
# Modo offline (não fala com registry)
deployally deploy --species memos \
--instance-uid memos-001 \
--offline \
--applyPipeline de Execução
- Fetch: busca o template (local → cache → registry, exceto se
--offline) - Build context: aplica defaults dos inputs declarados; merge com
--input - Wizard: pede o que falta (compactado por prefixo); pula em
--inputexaustivos - Reflang resolve: substitui
${...}em todas as seções - Validate: ContractIR + predicates do archetype
- Archetype defaults merge: aplica networks, labels CCS, restart policy
- Preflight: DNS, port conflicts, network existence
- Auto-provision (se
--provision-missing-assets): sobe assets faltantes em cascata - Apply: cria volumes, networks, containers (Docker SDK)
- Wait healthy: poll do healthcheck declarado com retry
`undeploy`
Remove uma instance criada por deploy — é a operação inversa. Dry-run é o
default: sem --apply, o comando só imprime o plano de remoção, sem tocar em nada.
Sintaxe
deployally undeploy --instance-uid <UID> [opções]Opções
| Opção | Tipo | Default | Descrição |
|---|---|---|---|
--instance-uid |
string | — | Obrigatório. Identificador da instance a remover |
--dry-run |
bool | false |
Mostra o plano de remoção sem executar (comportamento default; a flag só explicita a intenção) |
--apply |
bool | false |
Remove os containers da instance (label ccs.systems/uid) e o registro local (manifests/<uid>/). Preserva dados em /data, volumes legados e secrets |
--purge-data |
bool | false |
Usado com --apply. Remove também a árvore /data da instance (config staging, dados e o dynamic/ do traefik ≥3.0.5), volumes nomeados legados {uid}-* e o diretório de secrets. Honra lifecycle.on_uninstall.preserve do template. Exige confirmar digitando o instance_uid, ou --yes |
--yes |
bool | false |
Pula a confirmação interativa do purge; obrigatório com -o json|yaml |
--force |
bool | false |
Prossegue com evidência degradada (record corrompido, ou template irresolvível no purge) — ignora preserve |
-o, --output |
enum | human |
json ou yaml — saída máquina (Envelope v2.0) |
Exemplos
# Preview (dry-run — não toca em nada)
deployally undeploy --instance-uid memos-001
# Remove containers + registro, preservando dados (redeploy volta com tudo)
deployally undeploy --instance-uid memos-001 --apply
# Remoção total (irreversível) — exige digitar o instance_uid ou --yes
deployally undeploy --instance-uid memos-001 --apply --purge-data --yes
# Saída máquina para integração (CCS)
deployally undeploy --instance-uid memos-001 --apply --purge-data --yes -o jsonO que nunca é removido
- Volumes
kind: bind(paths de sistema) - A rede
public - Assets compartilhados ou bancos de tenant (declarados em
deps[]) - Containers que não têm a label
ccs.systems/uidda instance
Undeploy é local
Uma instance removida localmente ainda pode estar registrada no servidor:
rodar deploy de novo com o mesmo --instance-uid reprovisiona tudo (mesmos
secrets, mesmos volumes). Para desativação definitiva, desregistre a instance
no servidor.
Arquivo de Configuração
Localização padrão: /opt/deployally/config.yaml
api:
url: https://sys.deployally.com
api_key: da_xxx
defaults:
source: remote
profile: development
logging:
level: infoVariáveis de Ambiente
| Variável | Descrição |
|---|---|
DEPLOYALLY_API_URL |
URL da API |
DEPLOYALLY_API_KEY |
Chave da API |
DEPLOYALLY_CONFIG |
Path do config alternativo |
RUST_LOG |
Nível de log (debug, info, warn, error) |
Exit Codes Globais
| Código | Significado |
|---|---|
| 0 | Sucesso |
| 1 | Sucesso com warnings |
| 2 | Erro de validação ou input |
| 3 | Erro de I/O (Docker, rede) |
| 4 | Erro de autenticação |
| 5 | Recurso não encontrado |
Próximos Passos
- Reflang Reference — sintaxe completa da linguagem de template
- Getting Started — primeiro deploy
- Templates — como funcionam os archetypes
- Integração API — uso programático (restrito)