NgixProxy_Pathfinder/_automation_scripts/usr/local/sbin/commit_configs.sh

41 lines
2.3 KiB
Bash
Executable File

#!/bin/bash
set -e
REPO_PATH="/opt/config_repo"
NGINX_SOURCE="/etc/nginx"
FAIL2BAN_SOURCE="/etc/fail2ban"
AUTOMATION_FILES_SOURCE=("/usr/local/sbin/commit_configs.sh" "/etc/systemd/system/proxy-sinc.service" "/etc/systemd/system/proxy-sinc.timer" "/usr/share/man/man8/proxy-sinc.8.gz")
AUTOMATION_FILES_DEST="$REPO_PATH/_automation_scripts/"
echo "--- Iniciando a verificação de sincronização de configurações [$(date)] ---"
if [ "$EUID" -ne 0 ]; then echo "ERRO CRÍTICO: O script deve ser executado como root." >&2; exit 1; fi
if [ ! -d "$REPO_PATH" ]; then echo "ERRO CRÍTICO: O diretório do repositório $REPO_PATH não foi encontrado." >&2; exit 1; fi
echo "[INFO] Sincronizando ficheiros de configuração..."
rsync -avz --delete --exclude='*.swp' --exclude='*.bak' --exclude='sites-enabled/' --exclude='modules-enabled/' --exclude='/var/log/' --exclude='/var/run/' --exclude='/var/cache/' "$NGINX_SOURCE/" "$REPO_PATH/nginx/"
rsync -avz --delete --exclude='*.swp' --exclude='*.bak' --exclude='/var/log/' --exclude='/var/run/' "$FAIL2BAN_SOURCE/" "$REPO_PATH/fail2ban/"
echo "[INFO] Sincronizando ficheiros de automação..."
mkdir -p "$AUTOMATION_FILES_DEST"
for file in "${AUTOMATION_FILES_SOURCE[@]}"; do
if [ -f "$file" ]; then
rsync -aR "$file" "$AUTOMATION_FILES_DEST"
fi
done
echo "[INFO] Sincronização de ficheiros concluída."
cd "$REPO_PATH"
echo "[INFO] A verificar o status do repositório Git..."
if [ -n "$(git status --porcelain)" ]; then
echo "[INFO] Alterações detetadas. A preparar o commit."
echo "[INFO] A puxar alterações do repositório remoto para evitar conflitos..."
git pull --ff-only
echo "[INFO] A adicionar alterações ao stage..."
git add .
COMMIT_MESSAGE="[Auto-Sync] Atualização das configurações em $(hostname -f) - $(date +'%Y-%m-%d %H:%M:%S')"
echo "[INFO] A fazer o commit com a mensagem: $COMMIT_MESSAGE"
git commit -m "$COMMIT_MESSAGE"
echo "[INFO] A enviar as alterações para o Gitea (git push)..."
git push origin main
echo "[SUCESSO] As alterações foram enviadas para o repositório remoto!"
else
echo "[INFO] Nenhuma alteração de configuração detetada. O repositório está atualizado."
fi
echo "--- Verificação de sincronização concluída com sucesso [$(date)] ---"
exit 0