Manifestos
Manifestos são snapshots locais de cada deployment, permitindo redeploy, update e recuperação sem perder configuração.
Visão Geral
Cada vez que você faz deploy de um serviço, o DeployAlly salva um manifesto em:
~/.deployally/manifests/{instance_id}/O manifesto contém:
- Configuração exata usada no deploy
- Secrets (em arquivos separados)
- Informações de container, network, volumes
- Estado atual do serviço
Estrutura de Diretórios
~/.deployally/
├── config.yaml # Configuração do client
└── manifests/
├── mysql_abc123/
│ ├── manifest.yaml # Dados da instância
│ └── secrets/
│ ├── MYSQL_ROOT_PASSWORD
│ └── MYSQL_PASSWORD
├── redis_def456/
│ ├── manifest.yaml
│ └── secrets/
│ └── REDIS_PASSWORD
└── wordpress_ghi789/
├── manifest.yaml
└── secrets/
└── WORDPRESS_DB_PASSWORDSchema do Manifest
schema_version: "1.0"
instance:
id: mysql_abc123 # ID único da instância
name: mysql # Species name
created_at: "2026-01-21T10:00:00Z"
updated_at: "2026-01-21T10:00:00Z"
template:
id: tpl_mysql_v1
version: "1.0"
spec_hash: "sha256:abc123..."
inputs:
database: dev_blog
user: blog_app
root_password: "file:secrets/MYSQL_ROOT_PASSWORD"
user_password: "file:secrets/MYSQL_PASSWORD"
connection:
host: mysql
port: 3306
network: mysql_network
url_template: "mysql://{{user}}:{{password}}@mysql:3306/{{database}}"
container:
id: "a1b2c3d4e5f6..."
name: mysql
image: "mysql:8.4"
ports: []
labels:
da_type: mysql
da_instance: mysql_abc123
restart_policy: "unless-stopped"
networks:
created:
- name: mysql_network
id: "net_xyz789"
joined: []
volumes:
- name: mysql_data
host_path: ""
container_path: /var/lib/mysql
docker_volume: mysql_data
volume_type: named
mode: "rw"
persistent: true
state:
status: running
health: healthy
last_check: "2026-01-21T15:30:00Z"
adopted: falseGerenciamento de Secrets
Segurança
Secrets nunca são armazenados no manifest.yaml:
- Salvos em arquivos separados em
secrets/ - Permissões:
0600(apenas owner) - Diretório:
0700 - Referenciados como
"file:secrets/{key_name}"
Fluxo de Secrets
- Deploy: Usuário fornece senha
- Save: Client salva em
secrets/{key_name} - Reference: manifest.yaml contém
"file:secrets/MYSQL_PASSWORD" - Load: Client lê arquivo e substitui ao carregar
Exemplo
# manifest.yaml
inputs:
database: app_db
user: app_user
root_password: "file:secrets/MYSQL_ROOT_PASSWORD" # Referência
user_password: "file:secrets/MYSQL_PASSWORD"# secrets/MYSQL_ROOT_PASSWORD (arquivo)
p4ssw0rd_s3cr3t0_d0_r00tTipos de Volume
O manifest diferencia tipos de mount:
volumes:
- name: mysql_data
volume_type: Named # Docker named volume
docker_volume: mysql_data
host_path: ""
- name: custom_config
volume_type: Bind # Host bind mount
host_path: /etc/my-config
container_path: /etc/mysql/conf.d
- name: temp_cache
volume_type: Tmpfs # Em memória
container_path: /tmp/cache| Tipo | Descrição | Persistente |
|---|---|---|
Named |
Volume Docker nomeado | Sim |
Bind |
Bind mount do host | Sim |
Tmpfs |
Em memória | Não |
Estados
Status do Container
| Status | Descrição |
|---|---|
running |
Container em execução |
stopped |
Container parado |
restarting |
Container reiniciando |
error |
Falha na execução |
removed |
Container não existe |
Health
| Health | Descrição |
|---|---|
healthy |
Healthcheck OK |
unhealthy |
Healthcheck falhando |
unknown |
Sem healthcheck |
starting |
Aguardando primeiro check |
Comandos de Manifesto
Listar Manifestos
deployally manifests listSaída:
INSTANCE TEMPLATE STATUS HEALTH CREATED
mysql_abc123 mysql:8.4 running healthy 2026-01-21
redis_def456 redis:7 running healthy 2026-01-20
wordpress_ghi789 wp:6 stopped unknown 2026-01-19Ver Detalhes
deployally manifests show mysql_abc123Exportar Manifesto
deployally manifests export mysql_abc123 > mysql_backup.yamlImportar Manifesto
deployally manifests import mysql_backup.yamlNota: Secrets não são exportados. Você precisa fornecê-los novamente no import.
Adoption (Containers Pré-existentes)
O DeployAlly pode "adotar" containers criados manualmente:
deployally adopt mysqlIsso cria um manifesto para um container existente:
adopted: true
container_created_at: "2025-12-15T08:30:00Z"Um arquivo ADOPTED.txt é criado:
This manifest was created for a pre-existing container.
Container was originally created at: 2025-12-15T08:30:00Z
Manifest adopted at: 2026-01-21T10:00:00Z
Note: Secrets are NOT stored in this manifest since the container
was not deployed by DeployAlly. You may need to manually add
secrets to the secrets/ directory if needed for future redeployments.Recovery (Recuperação)
Quando um container desaparece, o manifesto permite recuperação.
Verificar Capacidade de Recuperação
deployally recovery check mysql_abc123Saída:
Recovery Assessment for mysql_abc123:
Secrets: ✓ Available (2/2)
Volumes: ✓ Exist (1/1)
Image: ✓ Available locally
Network: ✓ Exists
Key Files: ✓ Available (1/1)
Recovery Score: 95/100
Recommendation: Full recovery possibleExecutar Recuperação
deployally recovery restore mysql_abc123Score de Recuperação
| Componente | Pontos | Descrição |
|---|---|---|
| Manifest existe | 20 | Base |
| Secrets disponíveis | 25 | Crítico para DB |
| Volumes existem | 30 | Proporcional |
| Image disponível | 10 | Ou 5 se puder pull |
| Network existe | 10 | Ou 5 se puder criar |
| Key files | 5 | Arquivos de config |
Backup de Manifestos
Backup Manual
# Backup de todos os manifestos
tar -czvf deployally-manifests.tar.gz ~/.deployally/manifests/
# Backup de um específico
tar -czvf mysql-manifest.tar.gz ~/.deployally/manifests/mysql_abc123/Restore
tar -xzvf deployally-manifests.tar.gz -C ~/Backup Automático
Configure backup automático no config.yaml:
backup:
enabled: true
path: /backup/deployally/
interval: daily
keep: 7Sincronização com API
Manifestos locais podem ser sincronizados com a API:
# Enviar manifestos para API
deployally sync push
# Baixar manifestos da API
deployally sync pull
# Verificar diferenças
deployally sync diffImportante: Secrets nunca são sincronizados para a nuvem.
Boas Práticas
- Backup regular: Faça backup dos manifestos periodicamente
- Não edite manualmente: Use comandos do CLI para modificar
- Proteja secrets: Mantenha permissões
0600 - Versionamento: Considere versionar manifestos (sem secrets) em git
- Recovery test: Teste recuperação periodicamente
Próximos Passos
- Playbooks - Estrutura dos templates
- Ecologia - Relações entre serviços
- Referência CLI - Comandos de manifesto
By Borlot.com.br on 13/02/2026