From a6899fe71e41141be0bbba355c74b4c4867e95e7 Mon Sep 17 00:00:00 2001 From: admin Date: Tue, 13 Oct 2026 11:16:47 +0000 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20deploy=5Fhaproxy.sh?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- deploy_haproxy.sh | 92 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 deploy_haproxy.sh diff --git a/deploy_haproxy.sh b/deploy_haproxy.sh new file mode 100644 index 0000000..9a584e2 --- /dev/null +++ b/deploy_haproxy.sh @@ -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 \ No newline at end of file