Scripts multi-distro, idempotentes e “pipe-friendly” para qualquer Linux (Debian/Ubuntu, RHEL/CentOS/Alma/Rocky, SUSE, Arch, Alpine).
curl -fsSL https://geek.infrageek.net.br/bash/get-swarm-manager.sh | sudo bash
SWARM_MANAGER=172.16.1.10 SWARM_TOKEN=SWMTKN-1-... \
curl -fsSL https://geek.infrageek.net.br/bash/get-swarm-worker.sh | sudo bash
curl -fsSL https://geek.infrageek.net.br/bash/get-nfs-server.sh | sudo bash
# instalação e init do cluster
curl -fsSL https://geek.infrageek.net.br/bash/get-swarm-manager.sh | sudo bash
# opções
ENABLE_TCP=1 \ # expõe Docker em tcp://0.0.0.0:2375 (sem TLS) — use apenas em rede confiável
ADVERTISE_ADDR=172.16.1.10 \
SWAP_DISABLE=1 \
curl -fsSL https://geek.infrageek.net.br/bash/get-swarm-manager.sh | sudo bash
# obter token do worker no manager:
docker swarm join-token worker
Portas abertas (se firewall ativo): 2377/TCP (control), 7946/TCP+UDP, 4789/UDP.
# modo não-interativo (recomendado):
SWARM_MANAGER=172.16.1.10 SWARM_TOKEN=SWMTKN-1-... \
curl -fsSL https://geek.infrageek.net.br/bash/get-swarm-worker.sh | sudo bash
# modo interativo (pergunta IP/token se houver TTY):
curl -fsSL https://geek.infrageek.net.br/bash/get-swarm-worker.sh | sudo bash
# checar estado:
docker info --format 'Swarm: {{.Swarm.LocalNodeState}} | NodeID: {{.Swarm.NodeID}}'
Portas abertas (se firewall ativo): 7946/TCP+UDP, 4789/UDP.
# auto-seleciona disco "livre", formata ext4 e exporta /nfs-shares/swarm para todos (*):
curl -fsSL https://geek.infrageek.net.br/bash/get-nfs-server.sh | sudo bash
# usar disco/partição específica e exportar rede restrita:
NFS_DEVICE=/dev/sdb1 EXPORT_CIDR="172.16.0.0/21" \
curl -fsSL https://geek.infrageek.net.br/bash/get-nfs-server.sh | sudo bash
# não formatar (usar FS existente) e manter conteúdo:
USE_EXISTING_FS=1 NFS_DEVICE=/dev/sdb1 \
curl -fsSL https://geek.infrageek.net.br/bash/get-nfs-server.sh | sudo bash
# limpar conteúdo (cuidado!) e usar somente NFSv4:
FORCE_CLEAN=1 NFSV=4 \
curl -fsSL https://geek.infrageek.net.br/bash/get-nfs-server.sh | sudo bash
Portas padronizadas no nfs.conf: 111, 2049, 20048, 32765, 32766, 32767 (TCP/UDP).
| Script | Variável | Descrição | Padrão |
|---|---|---|---|
| Manager | ENABLE_TCP | Expor Docker TCP 2375 (sem TLS) | 0 (desativado) |
| Manager | ADVERTISE_ADDR | IP/iface para --advertise-addr | Detecta automaticamente |
| Manager/Worker | SWAP_DISABLE | Desativa swap e comenta no fstab | 0 |
| Worker | SWARM_MANAGER | IP/DNS do manager | — |
| Worker | SWARM_TOKEN | Token do worker | — |
| Worker | SWARM_PORT | Porta de controle do Swarm | 2377 |
| NFS | NFS_DEVICE | Disco/partição a montar | Auto (1º livre) |
| NFS | MOUNT_POINT | Ponto de montagem | /nfs-shares/swarm |
| NFS | EXPORT_CIDR | Rede/host autorizado (ex.: 172.16.0.0/21) | * |
| NFS | USE_EXISTING_FS | Não formata; usa FS existente | 0 |
| NFS | FORCE_CLEAN | Apaga conteúdo do mount point | 0 |
| NFS | NFSV | Força NFSv4 apenas | — (v3+v4) |
# Manager:
docker info --format 'Swarm: {{.Swarm.LocalNodeState}}'
docker node ls
# Worker:
docker info --format 'Swarm: {{.Swarm.LocalNodeState}} | NodeID: {{.Swarm.NodeID}}'
# NFS:
exportfs -v
showmount -e localhost # em distros com showmount
Testado/previsto para: Debian/Ubuntu, RHEL/CentOS/Alma/Rocky, SUSE, Arch, Alpine. Detecta systemd, OpenRC e SysVinit.