InfraGeek — Deploy Docker Swarm & NFS

Scripts multi-distro, idempotentes e “pipe-friendly” para qualquer Linux (Debian/Ubuntu, RHEL/CentOS/Alma/Rocky, SUSE, Arch, Alpine).

Swarm Manager

curl -fsSL https://geek.infrageek.net.br/bash/get-swarm-manager.sh | sudo bash
Variáveis: ENABLE_TCP, ADVERTISE_ADDR, SWAP_DISABLE

Swarm Worker

SWARM_MANAGER=172.16.1.10 SWARM_TOKEN=SWMTKN-1-... \
curl -fsSL https://geek.infrageek.net.br/bash/get-swarm-worker.sh | sudo bash
Também funciona interativo (pergunta IP/token se houver TTY).

NFS Server

curl -fsSL https://geek.infrageek.net.br/bash/get-nfs-server.sh | sudo bash
Variáveis: NFS_DEVICE, MOUNT_POINT, EXPORT_CIDR, USE_EXISTING_FS, FORCE_CLEAN, NFSV
Pipe-friendly Idempotente Systemd / OpenRC / SysV Firewall auto

1) Requisitos

2) Swarm Manager

# 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.

3) Swarm Worker

# 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.

4) NFS Server

# 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).

5) Variáveis de Ambiente

ScriptVariávelDescriçãoPadrão
ManagerENABLE_TCPExpor Docker TCP 2375 (sem TLS)0 (desativado)
ManagerADVERTISE_ADDRIP/iface para --advertise-addrDetecta automaticamente
Manager/WorkerSWAP_DISABLEDesativa swap e comenta no fstab0
WorkerSWARM_MANAGERIP/DNS do manager
WorkerSWARM_TOKENToken do worker
WorkerSWARM_PORTPorta de controle do Swarm2377
NFSNFS_DEVICEDisco/partição a montarAuto (1º livre)
NFSMOUNT_POINTPonto de montagem/nfs-shares/swarm
NFSEXPORT_CIDRRede/host autorizado (ex.: 172.16.0.0/21)*
NFSUSE_EXISTING_FSNão formata; usa FS existente0
NFSFORCE_CLEANApaga conteúdo do mount point0
NFSNFSVForça NFSv4 apenas— (v3+v4)

6) Segurança

7) Verificação Rápida

# 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

8) Compatibilidade

Testado/previsto para: Debian/Ubuntu, RHEL/CentOS/Alma/Rocky, SUSE, Arch, Alpine. Detecta systemd, OpenRC e SysVinit.

9) Solução de Problemas





© InfraGeek - 2025 - Powered By SolidSoft