specsfy-specialist-deploy
Orquestrar release e deploy em servidor com SEMVER, Docker Swarm e Ansible. Use para publicação completa ou preparação desse fluxo.
SKILL.mdspecialists/specsfy-specialist-deploy/SKILL.md
GitHubDeploy
Quando usar
- Acionar quando a pessoa pedir release ou deploy de uma aplicação em servidor.
- Acionar para preparar um servidor que receberá stacks Docker Swarm via Ansible.
- Acionar quando a pessoa pedir para cadastrar, adicionar, substituir ou conferir um servidor do ambiente.
- Não executar push, provisionamento ou mudança remota sem alvo e autorização explícitos.
Fluxo
Apresente o plano, informe o progresso por etapa e encerre com arquivos alterados, validações e pendências. Para texto público, siga o Contrato Editorial Compartilhado aplicável ao projeto consumidor.
Confirmar a raiz do sistema do usuário e acionar
$specsfy-specialist-versioningpara ler ou prepararSEMVER.Inspecionar
Dockerfile, Compose, stack eansible/existentes. Comparar PHP, extensões, dependências, assets, entrypoint, usuário interno, portas, healthcheck e comando do Octane com a aplicação atual. Preservar trechos personalizados e apresentar o diff antes de substituir um arquivo sem marcações gerenciadas.Executar o gerador somente na primeira preparação, quando todos os destinos estiverem ausentes:
node scripts/scaffold.mjs --project <raiz> --image <registry>/<aplicacao>O padrão inclui Cloudflare Tunnel na stack. Se a pessoa pedir outro proxy, gerar sem
cloudflaredcom--proxy externale configurar a alternativa solicitada em etapa própria.Acionar
$specsfy-specialist-debian-serverpara levantar as máquinas uma por rodada. Registrar hostname, endereço, porta SSH, usuário de conexão e papelmanagerouworkeremansible/inventory.yml, preservando os hosts já cadastrados. Quando chegar uma máquina nova, adicionar somente esse host.Testar todos os hosts declarados antes de qualquer alteração remota. A skill executa o utilitário, mas também mostra a forma curta para uso no Herdr:
./deploy check-hostsLocalizar apenas chaves públicas
~/.ssh/*.pubna máquina controladora e adicioná-las aoauthorized_keysdo usuáriodeploy. Nunca ler, copiar ou transmitir uma chave privada. Manter acessos remotos já cadastrados.Perguntar quais senhas, tokens, chaves e keys a aplicação consome e registrar os nomes em
ansible/vault-fields.txt. Não pedir os valores na conversa. O utilitário solicita cada valor com entrada oculta e grava o YAML criptografado:./deploy secretsA repetição mantém os campos existentes e pergunta somente os ausentes.
No padrão Cloudflare Tunnel, incluir
vault_cloudflare_tunnel_token. O serviço lê o token pelo arquivo/run/secrets/cloudflare_tunnel_token.Gerar a referência da imagem com
docker-tag. Recusar qualquer tag Docker diferente do valor presente emSEMVER.Acionar
$specsfy-specialist-debian-servere$specsfy-specialist-dockerpara definir o estado do host e do Docker Engine.Acionar
$specsfy-specialist-ansiblepara criar ou revisar roles idempotentes que criam o usuáriodeploy, instalam Docker Engine, configuram daemon, firewall, permissões e diretórios da aplicação.Acionar
$specsfy-specialist-docker-swarmpara definir managers, workers, redes e stacks. O playbook executadocker swarm initsomente quando o manager ainda não participa de um swarm e usa tokens protegidos para joins.Validar Ansible em syntax check, lint, check mode e duas execuções num alvo descartável. Validar a stack com
docker stack config.Com autorização para o alvo informado, usar
./deploy run --non-interactivequando o agente executar o deploy. A senha vem de uma fonte externa já configurada. Na ausência dessa fonte, orientar a pessoa a executar./deploy configure-vaultno próprio terminal; não pedir, ler ou imprimir a senha na conversa. Preservar./deploy runcomo caminho manual. Aplicar o playbook, publicar a imagem versionada e executardocker stack deploypelo manager.Conferir réplicas, healthchecks, logs, versão e digest. Guardar o comando de rollback para a versão anterior.
Padrões
Ler references/vault.md antes de configurar a senha, migrar scripts existentes ou executar pelo agente. A fonte explícita tem precedência sobre ambiente e
ansible.cfg; o cadastro local é a alternativa quando nenhuma fonte nativa existe. Falha de uma fonte encerra a execução.Não executar
configure-vaultpela IA para preencher a senha. Esse comando pertence à preparação humana, em terminal com entrada oculta.Atualizar projetos existentes por diff, preservando personalizações. O scaffold continua recusando sobrescrita e a atualização da skill não migra automaticamente
./deployouansible/.SEMVERna raiz do sistema do usuário governa imagem, manifesto, tag Git e release.Gerar
compose.yamlpara desenvolvimento estack.yamlpara produção. Toda produção usa a stack pelo Docker Swarm; não use Compose como runtime de produção.Em Laravel, exigir
laravel/octanee Open Swoole. A imagem instalaopenswoole; Compose e stack executam Octane com--server=swoole.Sugerir Cloudflare Tunnel como entrada pública padrão. Executar
cloudflaredcomo serviço da stack, ligado à mesma rede overlay da aplicação e sem porta pública no serviço Laravel. O hostname do túnel aponta parahttp://app:8000.Trocar o padrão somente quando a pessoa pedir outro proxy. Nesse caso, não gerar o serviço
cloudflarednem o secret do token.Ansible configura o servidor e o estado do Swarm. Não deixe uma sequência manual de comandos SSH como procedimento principal.
Criar o usuário de serviço
deploy, adicionar somente esse usuário ao grupodockere atribuir a ele os diretórios da aplicação. O grupo concede acesso administrativo amplo ao host e não deve incluir contas sem essa função.Manter
ansible/inventory.ymlcomo mapa dos servidores conhecidos. Uma inclusão preserva os hosts atuais, testa a nova conexão e só então configura o node e seu papel no Swarm.Mostrar
./deploy check-hosts,./deploy secrets,./deploy sync-keysou./deploy runquando a pessoa precisar copiar uma ação para outro painel do Herdr. A skill executa esses utilitários sem exigir memorização.Em nova chamada, ler novamente a aplicação e reconciliar apenas o que mudou. O gerador serve ao primeiro bootstrap e não deve sobrescrever arquivos existentes para simular atualização.
Use módulos idempotentes e
community.docker; comandos necessários para iniciar ou integrar o swarm precisam de condições baseadas no estado atual.Mantenha managers em número ímpar e restrinja as portas do Swarm aos nodes autorizados.
Publique uma imagem uma vez e promova o mesmo digest entre ambientes.
Senhas, tokens e chaves entram em um Ansible Vault criado por prompt seguro. O Ansible transforma os valores descriptografados em Docker Secrets com
no_log: true; a stack guarda apenas nomes e mounts externos.
Antipadrões
- Usar
latestou outra tag que não reproduzaSEMVER. - Executar
docker swarm initem toda rodada do playbook. - Expor token de join em log, variável aberta ou arquivo commitado.
- Guardar senha, token ou chave no
stack.yaml, em variável aberta ou na imagem. - Passar o token do Cloudflare Tunnel por argumento, variável aberta ou arquivo versionado.
- Conceder
sudoirrestrito ao usuáriodeploysem necessidade confirmada. - Fazer build no servidor ou recompilar uma imagem para cada ambiente.
- Considerar o deploy concluído apenas porque o comando retornou código zero.
Validação
Comprovar o prompt manual, arquivo externo, script de cofre e configuração nativa em um alvo descartável. Sem senha válida, a execução deve parar antes de conectar aos hosts. Conferir permissões
700e600, confirmação de substituição e ausência de valores secretos na saída do configurador.Executar
current,docker-tageverify-docker-tagpela skill de versionamento.Confirmar que
deployexiste, pertence ao grupodocker, acessa o daemon e é owner dos diretórios da aplicação.Confirmar Docker Engine ativo, manager alcançável e swarm em estado
active.Executar o playbook duas vezes; a segunda rodada deve terminar sem mudanças.
Comparar a imagem de cada serviço com
SEMVERe com o digest publicado.Observar a convergência e ensaiar rollback em ambiente compatível.
Skills relacionadas
$specsfy-specialist-server-reportreúne logs, serviços e uso de disco em relatórios por host, com coleta somente leitura via Ansible.$specsfy-specialist-versioninggoverna a versão do sistema do usuário.$specsfy-specialist-debian-serverdefine o estado base do host.$specsfy-specialist-dockerprepara e publica a imagem.$specsfy-specialist-ansibleautomatiza o servidor e o cluster.$specsfy-specialist-docker-swarmgoverna serviços, rollout e rollback.$specsfy-specialist-delivery-engineeringgoverna pipeline e promoção entre ambientes quando esses componentes fizerem parte da entrega.
Leia references/standards.md antes de criar ou alterar o playbook de provisionamento e deploy.