Добавить deploy_haproxy.sh

This commit is contained in:
admin committed 2026-10-13 11:16:47 +00:00
1 parent 76e0725b1d
commit a6899fe71e
1 file changed
+92
+92
View File
@@ -0,0 +1,92 @@
#!/usr/bin/env bash
set -Eeuo pipefail
# ================= КОНФИГУРАЦИЯ =================
BASE_DIR="/var/lib/depfile"
STATUS_DIR="${BASE_DIR}/status"
CHANGE_FILE="${STATUS_DIR}/change.me"
HASH_FILE="${STATUS_DIR}/sha256.hash"
DEPLOY_DIR="${BASE_DIR}/deployment"
SUCCESS_FILE="${DEPLOY_DIR}/success.me"
BACKUP_CFG="/etc/haproxy/backup/haproxy.cfg"
TARGET_CFG="/etc/haproxy/haproxy.cfg"
# ===============================================
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*"
}
err() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] [ОШИБКА] $*" >&2
}
# 1. Проверяем наличие триггер-файла change.me
if [ ! -f "${CHANGE_FILE}" ]; then
exit 0
fi
log "Обнаружен файл ${CHANGE_FILE}. Запуск процедуры развертывания..."
# 2. Проверяем наличие файла контрольной суммы
if [ ! -f "${HASH_FILE}" ]; then
err "Файл хеша ${HASH_FILE} не найден. Отмена операции."
exit 1
fi
# 3. Валидация целостности change.me по sha256.hash
log "Проверка контрольной суммы SHA-256..."
if ! (cd "${STATUS_DIR}" && sha256sum -c --status "sha256.hash"); then
err "Несовпадение контрольной суммы файла ${CHANGE_FILE}!"
exit 2
fi
log "Контрольная сумма подтверждена."
# 4. Проверяем наличие резервной конфигурации
if [ ! -f "${BACKUP_CFG}" ]; then
err "Резервная копия не найдена: ${BACKUP_CFG}"
exit 3
fi
# 5. Тестирование синтаксиса бэкапа перед применением
log "Валидация синтаксиса конфигурации из бэкапа..."
if ! haproxy -c -f "${BACKUP_CFG}" > /dev/null 2>&1; then
err "Резервная конфигурация содержит ошибки синтаксиса. Отмена применения."
haproxy -c -f "${BACKUP_CFG}" || true
exit 4
fi
log "Синтаксис резервного конфига корректен."
# 6. Замена рабочей конфигурации
log "Копирование конфигурации в ${TARGET_CFG}..."
cp -f "${BACKUP_CFG}" "${TARGET_CFG}"
if ! haproxy -c -f "${TARGET_CFG}" > /dev/null 2>&1; then
err "Критическая ошибка: боевой файл не прошел повторную валидацию!"
exit 5
fi
# 7. Перезапуск службы haproxy
log "Перезапуск службы haproxy..."
if ! systemctl restart haproxy; then
err "Не удалось перезапустить сервис haproxy!"
exit 6
fi
log "Сервис haproxy успешно перезапущен."
# 8. Очистка каталога status
log "Удаление директории ${STATUS_DIR}..."
rm -rf "${STATUS_DIR}"
# 9. Формирование отчета об успешном выполнении
mkdir -p "${DEPLOY_DIR}"
chown depfile:depfile "${DEPLOY_DIR}"
CURRENT_DATETIME=$(date '+%Y-%m-%d %H:%M:%S')
echo "deploment success {${CURRENT_DATETIME}}" > "${SUCCESS_FILE}"
chown depfile:depfile "${SUCCESS_FILE}"
log "Зафиксирован статус в ${SUCCESS_FILE}."
log "Процесс успешно завершен."
exit 0