2026-10-13 11:07:12 +00:00
2026-10-13 11:16:16 +00:00

Документация проекта: Развертывание резервной конфигурации HAProxy по требованию

1. Архитектурное описание

Комплекс предназначен для контролируемого применения резервной конфигурации балансировщика HAProxy по клику оператора с рабочей станции Windows.

[ Рабочая станция Windows ]
          |
     (Ярлык на рабочем столе)
          |
    deployfile.exe (.NET 4.8)
          |
          |  (1. SSH connection: ed25519)
          |  (2. Генерация status/change.me + status/sha256.hash)
          v
[ Linux-сервер (HAProxy) ]
    /var/lib/depfile/ (Домашний каталог depfile)
          ├── .ssh/authorized_keys
          ├── status/
          │     ├── change.me
          │     └── sha256.hash
          └── deployment/
                └── success.me
          |
     (cron: раз в минуту)
          v
    deploy_haproxy.sh (Bash)
          |-- 1. Валидация SHA-256 суммы файла change.me
          |-- 2. Валидация синтаксиса backup/haproxy.cfg (haproxy -c)
          |-- 3. Подмена /etc/haproxy/haproxy.cfg
          |-- 4. Перезапуск службы haproxy (systemctl restart)
          |-- 5. Удаление каталога status/
          `-- 6. Запись метки в deployment/success.me

Принцип работы

  1. Windows-клиент (deployfile.exe):
  • Разработан на .NET Framework 4.8 без внешних библиотек.
  • Вызывает встроенный клиент Windows OpenSSH (ssh.exe) с автоопределением путей (включая обход WOW64-редиректа Sysnative для 32-битных процессов) и автоматической установкой OpenSSH через PowerShell при его отсутствии.
  • Генерирует случайный текстовый блок, подключается к серверу по SSH под пользователем depfile с использованием ED25519-ключа и записывает данные в /var/lib/depfile/status/change.me.
  • На стороне сервера генерирует файл контрольной суммы /var/lib/depfile/status/sha256.hash.
  1. Серверный обработчик (deploy_haproxy.sh):
  • Выполняется по cron от имени root.
  • Проверяет наличие файла /var/lib/depfile/status/change.me. Если файл отсутствует — завершает работу без нагрузки на систему.
  • Валидирует целостность change.me через sha256sum -c.
  • Выполняет проверку синтаксиса резервного файла (haproxy -c -f /etc/haproxy/backup/haproxy.cfg). При обнаружении ошибок применение отменяется.
  • Копирует резервную конфигурацию в боевой файл /etc/haproxy/haproxy.cfg.
  • Перезапускает службу haproxy.
  • Удаляет временную директорию /var/lib/depfile/status.
  • Фиксирует статус и метку времени в файле /var/lib/depfile/deployment/success.me.

2. Настройка Linux-сервера

2.1. Создание сервисного пользователя и директорий

Подключитесь к серверу с правами root или через sudo:

# 1. Создаем системного пользователя с домашним каталогом /var/lib/depfile
sudo useradd -m -d /var/lib/depfile -s /bin/bash -c "File deploment service" depfile

# 2. Выставляем права доступа на домашнюю директорию
sudo chown -R depfile:depfile /var/lib/depfile
sudo chmod 750 /var/lib/depfile

# 3. Создаем каталог резервных конфигураций HAProxy и копируем текущий рабочий конфиг
sudo mkdir -p /etc/haproxy/backup
sudo cp /etc/haproxy/haproxy.cfg /etc/haproxy/backup/haproxy.cfg
sudo chown -R root:root /etc/haproxy/backup
sudo chmod 750 /etc/haproxy/backup

2.2. Подготовка каталога SSH-ключей

Так как домашний каталог пользователя расположен в /var/lib/depfile, файл доверенных ключей находится по пути /var/lib/depfile/.ssh/authorized_keys:

sudo -u depfile mkdir -p /var/lib/depfile/.ssh
sudo -u depfile touch /var/lib/depfile/.ssh/authorized_keys
sudo chmod 700 /var/lib/depfile/.ssh
sudo chmod 600 /var/lib/depfile/.ssh/authorized_keys

2.3. Создание скрипта развертывания

Создайте файл /usr/local/bin/deploy_haproxy.sh:

sudo nano /usr/local/bin/deploy_haproxy.sh

Вставьте следующий код:

deploy_haproxy.sh

Назначьте права на запуск:

sudo chmod +x /usr/local/bin/deploy_haproxy.sh

2.4. Настройка периодического запуска в cron

Откройте планировщик суперпользователя:

sudo crontab -e

Добавьте задачу запуска раз в минуту:

* * * * * /usr/local/bin/deploy_haproxy.sh >> /var/log/deploy_haproxy.log 2>&1


3. Настройка рабочей станции Windows

3.1. Генерация SSH-ключа

В командной строке (cmd) или PowerShell выполните:

ssh-keygen -t ed25519 -f "D:\sys\C-Sharp\deployfile\key\test_key.key" -N ""

Создаются:

  • test_key.key — закрытый ключ (хранится строго локально).
  • test_key.key.pub — открытый ключ для передачи на сервер.

3.2. Добавление открытого ключа на сервер

Передайте содержимое открытого ключа в authorized_keys пользователя depfile:

type "D:\sys\C-Sharp\deployfile\key\test_key.key.pub" | ssh depfile@10.228.48.110 "cat >> /var/lib/depfile/.ssh/authorized_keys"

(При первом подключении введите пароль пользователя depfile на сервере).

Проверьте беспарольный вход:

ssh -i "D:\sys\C-Sharp\deployfile\key\test_key.key" depfile@10.228.48.110 "whoami && pwd"

Вывод должен вернуть:

depfile
/var/lib/depfile


4. Клиентское приложение C# (.NET Framework 4.8)

4.1. Исходный код

Program.cs

4.2. Сборка и создание ярлыка на рабочем столе

  1. В Visual Studio в свойствах проекта (Свойства -> Сборка / Build) рекомендуется выставить целевую платформу x64 (или снять флаг Prefer 32-bit).
  2. Скомпилируйте проект в конфигурации Release (результирующий бинарник: D:\sys\C-Sharp\deployfile\bin\Release\deployfile.exe).
  3. Создайте ярлык на рабочем столе:
  • Расположение объекта:
"D:\sys\C-Sharp\deployfile\bin\Release\deployfile.exe"

  • Имя ярлыка: Откатить конфигурацию HAProxy.

5. Проверка работы комплекса

  1. Запуск с клиента:
  • Дважды кликните по созданному ярлыку на рабочем столе.
  • Консоль отобразит процесс подключения и результат:
Используется ключ: D:\sys\C-Sharp\deployfile\key\test_key.key
Подключение к depfile@10.228.48.110:22...
Файл status/change.me и хеш status/sha256.hash успешно созданы на сервере.

  1. Проверка на сервере (в пределах 1 минуты):
  • Каталог /var/lib/depfile/status удален.
  • Файл конфигурации /etc/haproxy/haproxy.cfg перезаписан из /etc/haproxy/backup/haproxy.cfg.
  • Статус HAProxy: systemctl status haproxy в состоянии active (running).
  • Проверка фиксации развертывания:
cat /var/lib/depfile/deployment/success.me

Вывод:

deploment success {2026-10-13 12:45:00}

  • Журнал работы скрипта доступен в /var/log/deploy_haproxy.log.
S
Description
No description provided
Readme
57 KiB
0 Stars 1 Watchers 0 Forks
Languages
C# 74.9%
Shell 25.1%