# Reconfiguração automática do haproxy.cfg do HAPROXY

ChatGPT:

##### Perfeito! Aqui está um script cron completo e seguro para fazer o reload do haproxy.cfg em todos os containers haproxy do Swarm, sem reiniciar os containers — apenas recarregando o processo haproxy com kill -HUP.

<div id="bkmrk-">  
</div>✅ Script: reload-haproxy-containers.sh

<div id="bkmrk-bash">bash</div>##### \## INICIO SCRIPT ##

<div id="bkmrk-%23%21%2Fbin%2Fbash">\#!/bin/bash</div><div id="bkmrk-%23-nome-da-imagem-usa">\# Nome da imagem usada no serviço haproxy</div><div id="bkmrk-image_name%3D%22haproxyt">IMAGE_NAME="haproxytech/haproxy-debian:3.3"</div><div id="bkmrk-%23-comando-de-reload-">\# Comando de reload usado dentro do container</div><div id="bkmrk-reload_cmd%3D%22haproxy-">RELOAD_CMD="haproxy -c -f /usr/local/etc/haproxy/haproxy.cfg &amp;&amp; kill -HUP 1"</div><div id="bkmrk-%23-busca-containers-q">\# Busca containers que usam a imagem especificada</div><div id="bkmrk-containers%3D%24%28docker-">CONTAINERS=$(docker ps --filter "ancestor=$IMAGE_NAME" --format "{{.ID}}")</div><div id="bkmrk--1">  
</div><div id="bkmrk-if-%5B--z-%22%24containers">if [ -z "$CONTAINERS" ]; then</div><div id="bkmrk-%C2%A0-%C2%A0-echo-%22%5Binfo%5D-nen"> echo "[INFO] Nenhum container HAProxy em execução com imagem '$IMAGE_NAME'"</div><div id="bkmrk-%C2%A0-%C2%A0-exit-0"> exit 0</div><div id="bkmrk-fi">fi</div><div id="bkmrk-echo-%22%5Binfo%5D-recarre">echo "[INFO] Recarregando configuração HAProxy em $(echo "$CONTAINERS" | wc -l) container(s)..."</div><div id="bkmrk-for-cid-in-%24containe">for cid in $CONTAINERS; do</div><div id="bkmrk-%C2%A0-%C2%A0-echo-%22-%E2%86%92-validan"> echo " → Validando e recarregando HAProxy no container $cid..."</div><div id="bkmrk-%C2%A0-%C2%A0-docker-exec-%22%24ci"> docker exec "$cid" sh -c "$RELOAD_CMD" &amp;&amp; \</div><div id="bkmrk-%C2%A0-%C2%A0-%C2%A0-%C2%A0-echo-%22-%E2%9C%85-con"> echo " ✅ Container $cid recarregado com sucesso." || \</div><div id="bkmrk-%C2%A0-%C2%A0-%C2%A0-%C2%A0-echo-%22-%E2%9D%8C-err"> echo " ❌ Erro ao recarregar o container $cid."</div><div id="bkmrk-done">done</div><div id="bkmrk--2"></div>##### \## FIM SCRIPT ##

<div id="bkmrk--3"></div>##### 🔧 Como usar

##### 1. Salve o script

<div id="bkmrk-sudo-mkdir--p-%2Fusr%2Fl">sudo mkdir -p /usr/local/bin</div><div id="bkmrk-sudo-nano-%2Fusr%2Flocal">sudo nano /usr/local/bin/reload-haproxy-containers.sh</div><div id="bkmrk-cole-o-conte%C3%BAdo%2C-sal">Cole o conteúdo, salve, e depois:</div><div id="bkmrk-sudo-chmod-%2Bx-%2Fusr%2Fl">sudo chmod +x /usr/local/bin/reload-haproxy-containers.sh</div><div id="bkmrk--4"></div><div id="bkmrk--5"></div>##### 2. Agende via crontab

<div id="bkmrk-edite-o-cron-para-o-">Edite o cron para o usuário que gerencia o Swarm (geralmente root):</div><div id="bkmrk-sudo-crontab--e">sudo crontab -e</div><div id="bkmrk-adicione-a-linha-par">Adicione a linha para executar de hora em hora:</div><div id="bkmrk-0-%2A-%2A-%2A-%2A-%2Fusr%2Flocal">0 * * * * /usr/local/bin/reload-haproxy-containers.sh &gt;&gt; /var/log/reload-haproxy.log 2&gt;&amp;1</div><div id="bkmrk--6"></div><div id="bkmrk--7"></div>##### 🛡️ Segurança adicional (opcional)

<div id="bkmrk-se-quiser-ser-ainda-">Se quiser ser ainda mais seletivo, você pode filtrar por nome do serviço ou label, ex:</div><div id="bkmrk-docker-ps---filter-%22">docker ps --filter "name=mystack_haproxy" --format "{{.ID}}"</div><div id="bkmrk-ou-com-label%3A">Ou com label:</div><div id="bkmrk-docker-ps---filter-%22-1">docker ps --filter "label=com.docker.stack.namespace=mystack" --format "{{.ID}}"</div><div id="bkmrk--8"></div><div id="bkmrk-%E2%9C%85-resultado">✅ Resultado</div><div id="bkmrk-com-isso%2C-seu-swarm%3A">Com isso, seu Swarm:</div><div id="bkmrk--9">  
</div><div id="bkmrk-%E2%9C%85-executar%C3%A1-reload-l">✅ Executará reload leve e seguro do haproxy.cfg de hora em hora</div><div id="bkmrk--10">  
</div><div id="bkmrk-%E2%9C%85-sem-precisar-redep">✅ Sem precisar redeploy, sem downtime</div><div id="bkmrk--11">  
</div><div id="bkmrk-%E2%9C%85-sincronizado-via-g">✅ Sincronizado via GlusterFS automaticamente</div><div id="bkmrk--12">  
</div><div id="bkmrk-%E2%9C%85-sem-scripts-dentro">✅ Sem scripts dentro dos containers</div>