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_PASSWORD

Schema 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: false

Gerenciamento 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

  1. Deploy: Usuário fornece senha
  2. Save: Client salva em secrets/{key_name}
  3. Reference: manifest.yaml contém "file:secrets/MYSQL_PASSWORD"
  4. 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_r00t

Tipos 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 list

Saí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-19

Ver Detalhes

deployally manifests show mysql_abc123

Exportar Manifesto

deployally manifests export mysql_abc123 > mysql_backup.yaml

Importar Manifesto

deployally manifests import mysql_backup.yaml

Nota: 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 mysql

Isso 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_abc123

Saí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 possible

Executar Recuperação

deployally recovery restore mysql_abc123

Score 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: 7

Sincronizaçã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 diff

Importante: Secrets nunca são sincronizados para a nuvem.


Boas Práticas

  1. Backup regular: Faça backup dos manifestos periodicamente
  2. Não edite manualmente: Use comandos do CLI para modificar
  3. Proteja secrets: Mantenha permissões 0600
  4. Versionamento: Considere versionar manifestos (sem secrets) em git
  5. Recovery test: Teste recuperação periodicamente

Próximos Passos

By Borlot.com.br on 13/02/2026