specsfy-specialist-docker-swarm
About specsfy-specialist-docker-swarm
A specialist skill for operating Docker Swarm clusters across multiple nodes. It guides topology decisions, stack configuration, rollout and rollback design, quorum recovery, and deployment validation, while distinguishing Swarm from local Compose use.
Key features
- 01Plan manager and worker topology
- 02Validate stack configuration
- 03Configure services and cluster resources
- 04Design rollout and rollback behavior
- 05Monitor convergence and test recovery
Use cases
- 01Prepare a multi-node Swarm deployment
- 02Review stack files before deployment
- 03Plan a safe service upgrade and rollback
- 04Assess manager failure recovery
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ promovaweb/ specsfy --skill specsfy-specialist-docker-swarmAfter installing, type/specsfy-specialist-docker-swarmin Claude Code to confirm it loaded.
Bundled filesagents/openai.yamlreferences/standards.md
Details
From the project READMEDocker Swarm
Quando usar
- Acionar quando o projeto orquestra múltiplos nós com
docker swarm init/join,docker stack deployou arquivos de stack comdeploy:. - Acionar também para decidir topologia de managers/workers, rollout, rollback ou recuperação de quorum.
- Não acionar para desenvolvimento local com
docker compose upem uma única máquina, nem para build de imagem — usar$specsfy-specialist-dockernesse caso; muitas chaves do Compose (profiles,depends_on.condition,buildem runtime) não têm efeito emdocker stack deploy. - Combinar com
$specsfy-specialist-delivery-engineeringquando o rollout faz parte de um pipeline de release, e com$specsfy-specialist-observabilitypara decidir os sinais que autorizam ou revertem o rollout.
Fluxo
- Em release ou deploy completo, trabalhar sob
$specsfy-specialist-deploy. Conferir oSEMVERpreparado por$specsfy-specialist-versioning, executarverify-docker-tagantes dedocker stack deploye interromper quando a tag for diferente. - Mapear managers, workers, zonas, labels, quorum e dependências externas (registry, storage, DNS) antes de qualquer mudança de topologia.
- Validar que a imagem publicada é a mesma testada e que o arquivo de stack
usa apenas chaves suportadas por
docker stack deploy(não todo o schema do Compose). - Definir services, redes, ports, volumes, configs e secrets, com um owner claro para cada recurso compartilhado.
- Configurar replicas, placement constraints/preferences,
resources.limits/reservations, healthcheck erestart_policy. - Projetar
update_configerollback_config(paralelismo, delay, ordemstart-first/stop-first,failure_action) garantindo que a versão nova e a antiga coexistam sem quebrar contrato de API/dados durante o rollout. - Aplicar em um swarm representativo (staging com topologia equivalente, não
um único nó) e observar convergência com
docker service psedocker service logs. - Documentar procedimento de deploy, rollback, rotação de secret, backup do estado do Raft e plano de recuperação de perda de manager.
Padrões
-
Em deploy coordenado por
$specsfy-specialist-deploy, usar Cloudflare Tunnel como entrada pública padrão. Mantercloudflarede a aplicação na mesma rede overlay, sem publicar a porta do Laravel no host. Aceitar outro proxy quando a pessoa pedir essa troca de forma explícita. -
Entregar o token do túnel por Docker Secret montado como arquivo e iniciar
cloudflaredcom--token-file. Nunca guardar o valor na stack. -
Separar dependências, aplicação e ingress em stacks diferentes. Publicar em ordem de dependência, aguardar a convergência declarada de cada serviço e só então abrir o caminho público.
-
Concentrar migrations em uma réplica escolhida. Os demais serviços iniciam com migrations desativadas para impedir concorrência durante rollout.
-
Usar a mesma imagem imutável para HTTP, filas, scheduler e WebSocket, com comandos e healthchecks próprios. Manter o worker de contingência em zero réplica quando outro supervisor de filas estiver ativo.
-
Criar redes overlay externas e criptografadas antes das stacks. Serviços de dados ficam apenas na rede interna; um tunnel outbound-only pode eliminar portas públicas no host quando esse desenho atende ao projeto.
-
Manter número ímpar de managers (1, 3 ou 5) e nunca deixar o quorum dependente de um único manager em produção.
-
Publicar imagens imutáveis por digest (
image@sha256:...) acessíveis por todos os nodes; um node não pode divergir por ter build local. -
Usar secrets/configs versionados por nome (
app_secret_v2) e nunca embutir segredo em variável de ambiente do arquivo de stack. -
Separar rede de ingress, rede interna de serviço e rede de dados; não expor uma porta de serviço interno via
ports:publicado. -
Definir
resources.limitsereservationsexplicitamente; não depender de capacidade implícita do node mais folgado. -
Aplicar
placement.constraintsapenas com labels administradas (node.labels.*), nunca com hostname hardcoded. -
Não assumir que uma opção do Compose (
profiles,build,develop,depends_oncomcondition) é respeitada porstack deploy— validar contra a lista de campos suportados antes de depender dela.
Antipadrões
- Rolling update sem
update_config.order: start-firstem serviço com poucas réplicas: a réplica antiga cai antes da nova ficar saudável, e o serviço fica momentaneamente sem capacidade. - Volume local (
bindou volume nomeado sem driver distribuído) em serviço com múltiplas réplicas ou reagendamento: o dado "desaparece" quando o scheduler realoca o container para outro node. - Secret alterado in-place trocando o conteúdo do arquivo referenciado: Swarm
trata secrets como imutáveis por nome; a mudança correta é criar uma nova
versão (
app_secret_v2), anexá-la ao serviço e só então remover a antiga. - Confundir
docker-compose.ymlde desenvolvimento com o arquivo de stack de produção: healthcheck,deploy:, secrets e redes overlay costumam faltar ou divergir entre os dois.
Validação
- Rodar
docker stack config --compose-file <arquivo>(ou validação equivalente do provedor) antes do deploy para detectar erro de interpolação e de schema. - Observar
docker service ps <serviço>,docker service logs, réplicas desejadas vs atuais e eventos do node durante todo o rollout, não apenas no fim. - Simular falha de worker e, em ambiente autorizado e com backup validado, perda de um manager, confirmando que o quorum sobrevive com os managers restantes.
- Provar rollback de aplicação (
docker service update --rollbackourollback_config) e a compatibilidade de migrations de dados durante a janela em que as duas versões coexistem. - Não declarar a stack "pronta para produção" sem esses quatro pontos verificados; "funcionou no meu node" não é evidência de convergência do cluster.
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-deploycoordena servidor, imagem, Ansible e publicação da stack; esta skill governa somente o Swarm. -
$specsfy-specialist-versioningpreparaSEMVERe confere a versão usada pela imagem e pelo manifesto da stack. -
$specsfy-specialist-ansibleprepara e mantém os nodes; esta skill governa quorum, scheduler, services e redes do Swarm. -
$specsfy-specialist-laraveldefine os contratos da aplicação e$specsfy-specialist-redisa persistência/cache usados pelos services. -
$specsfy-specialist-dockerpara build de imagem, Dockerfile e desenvolvimento local com Compose — fronteira: Swarm começa onde a aplicação passa a rodar em múltiplos nós com estado de cluster. -
$specsfy-specialist-delivery-engineeringquando o rollout do serviço faz parte de um pipeline de release com promoção entre ambientes. -
$specsfy-specialist-observabilitypara instrumentar os sinais (health, taxa de erro, latência) que decidem continuar, pausar ou reverter um rollout. -
$specsfy-specialist-debian-serverpara portas do cluster, kernel, filesystem e serviço Docker dos nodes.
Leia references/standards.md para topologia do Raft, ciclo de vida de secrets/configs, redes overlay, estratégias de rollout e disaster recovery, com fontes oficiais da documentação do Docker.