8.9 KiB
Документация проекта: Развертывание резервной конфигурации 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
Принцип работы
- 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.
- Серверный обработчик (
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
Вставьте следующий код:
Назначьте права на запуск:
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. Исходный код
4.2. Сборка и создание ярлыка на рабочем столе
- В Visual Studio в свойствах проекта (Свойства -> Сборка / Build) рекомендуется выставить целевую платформу x64 (или снять флаг Prefer 32-bit).
- Скомпилируйте проект в конфигурации Release (результирующий бинарник:
D:\sys\C-Sharp\deployfile\bin\Release\deployfile.exe). - Создайте ярлык на рабочем столе:
- Расположение объекта:
"D:\sys\C-Sharp\deployfile\bin\Release\deployfile.exe"
- Имя ярлыка:
Откатить конфигурацию HAProxy.
5. Проверка работы комплекса
- Запуск с клиента:
- Дважды кликните по созданному ярлыку на рабочем столе.
- Консоль отобразит процесс подключения и результат:
Используется ключ: D:\sys\C-Sharp\deployfile\key\test_key.key
Подключение к depfile@10.228.48.110:22...
Файл status/change.me и хеш status/sha256.hash успешно созданы на сервере.
- Проверка на сервере (в пределах 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.