◉ Pulse
NodeFlow-dev avatar
#36 today

NodeFlow-dev/nodeflow

AI

HAProxy infrastructure control plane — nodes, routes, traffic, and safe revisions.

Created Jul 29, 2026
Stars
7
Today
+7
Forks
0
Quality
80/100
Momentum
17

README

Fetched from GitHub on Oct 30, 2026, 10:15 PM UTC · README.md

View original on GitHub

Third-party content — Open Source Pulse is not the owner of this repository.

This README belongs to NodeFlow-dev/nodeflow and its contributors. We fetch it directly from the project’s public GitHub repository and display it for reference only. All text, code, images and trademarks remain the property of their respective authors. See the repository for its license terms. Copyright / takedown policy.

English | Русский

NodeFlow — HAProxy Infrastructure Control

Установка · Обновление · Скриншоты · Что нового в 2.3.0 · Issues · Поддержка

NodeFlow — панель управления парком HAProxy-нод для TCP- и SNI-маршрутизации. Panel (Go API + React UI + PostgreSQL) хранит маршруты и неизменяемые ревизии конфигурации, а Node Agent на каждой ноде сам подключается к Panel по mTLS, проверяет и применяет конфиг HAProxy, сообщает метрики и обновляется по подписанным релизам. Ручного редактирования haproxy.cfg и входящего доступа к нодам для управления не требуется.

Обзор нод

Возможности

  • SNI-маршрутизация и фолбэк. Общие listener'ы на порт, несколько SNI на маршрут, «Фолбэк» для всего, что не совпало; IP-, доменные и Unix-socket backend'ы.
  • Несколько серверов и DNS-пулы. До 16 серверов на маршрут в режимах «Пул» и «Основной + резервные»; домен как DNS-пул (все A/AAAA-адреса, с исключением недоступных), отдельные веса для IP пула.
  • Балансировка. roundrobin, static-rr, random, leastconn и leastping («Меньше задержка»). Вес сервера и отдельного IP DNS-пула, для leastping — ещё стоимость (множитель задержки); толерантность: близкие по нагрузке или задержке серверы делят клиентов по весу, веса на лету выставляет Agent через runtime API, без reload.
  • Закрепление клиента. Хеш IP (consistent или map-based, группировка IPv6 по префиксу) или таблица с TTL, переживающая reload; размер «Авто» подбирается от RAM ноды.
  • PROXY protocol. Приём от доверенных IP, подсетей и доменов (Agent резолвит их и обновляет ACL без reload), вариант «от всех»; health-check с PROXY-заголовком.
  • Ограничение скорости. Лимиты upload/download на IP клиента — фильтрами HAProxy или в ядре через nftables (shaper_mode=kernel), без потери splice.
  • Производительность. Zero-copy splice в обе стороны; Agent поднимает fs.pipe-max-size, и Panel рендерит буферы 1 МиБ вместо 256 КиБ.
  • Квоты и учёт трафика. Помесячный трафик нод, backend'ов и маршрутов, квоты на маршрут.
  • Безопасное применение. Desired/actual-ревизии, полная проверка haproxy -c до замены конфига, graceful reload с откатом.
  • Редактор haproxy.cfg. Страница ноды → «Конфигурация HAProxy»: Monaco с подсветкой и автодополнением, подсказки по директивам при наведении, проверка на лету (неизвестные директивы и опции, лишние символы, порты, ссылки на backend), diff перед применением и история ревизий. Ошибка haproxy -c с ноды показывается текстом со ссылками на строки; одна кнопка возвращает к сборке из маршрутов.
  • Настройки HAProxy ноды. maxconn, nbthread и таймауты connect/client/server — в настройках ноды, применяются ко всем маршрутам reload без разрыва соединений; там же выключаются логи соединений.
  • Prometheus /metrics в Panel: состояние нод и маршрутов, соединения, трафик, синхронизация ревизий (bearer-токен, allowlist CIDR).
  • Подписанные обновления Agent. Ed25519 + SHA-256, монотонная последовательность, атомарная активация и автооткат.
  • mTLS. Отдельный клиентский сертификат на ноду, ротация и staged renewal; локальный API Agent доступен только с loopback.
  • UFW. Правила listener-портов строятся из применённой ревизии, чужие правила не трогаются.

Архитектура

Архитектура NodeFlow

Agent сам открывает соединение с Panel: получает ревизии и команды, отправляет heartbeat с метриками. SSH нужен один раз — для первичной установки Agent.

Требования

  • Panel: Ubuntu 22.04+/Debian 12+ (amd64 или arm64), 2 vCPU, 2 ГБ RAM, 15 ГБ диска, домен с A/AAAA-записью на сервер, открытые 80, 443 и 4200/tcp. Docker Engine с Compose и Caddy установщик поставит сам.
  • Ноды: Linux amd64 или arm64 с systemd и HAProxy 3.x. Автоматическая установка из Panel поддерживает Ubuntu 24.04 (noble) и 26.04 (resolute) — Panel ставит HAProxy 3.4 из официального репозитория HAProxy Performance и не понижает более новый установленный HAProxy — и Debian: если HAProxy ещё нет, ставится пакет haproxy из репозитория дистрибутива (в Debian 12 это 2.6, поэтому HAProxy 3.x поставьте заранее). nftables — для ограничения скорости в ядре. SSH-доступ root или пользователем с sudo, по паролю или ключу.

Быстрая установка

Panel

На чистом сервере:

curl -fsSL https://raw.githubusercontent.com/NodeFlow-dev/nodeflow/main/install.sh | sudo sh

Установщик:

  1. спросит домен и проверит, что его DNS указывает на этот сервер;
  2. предложит режим доступа: Caddy cookie-gate (ссылка активации ставит защищённую cookie) или без него — токен администратора Panel нужен в любом случае;
  3. установит Docker и Caddy — Caddy сам получит сертификат Let's Encrypt и будет проксировать HTTPS на Panel, которая слушает только 127.0.0.1:8080;
  4. скачает install kit последнего релиза, проверит его по SHA-256, который GitHub публикует для каждого asset релиза, возьмёт из него compose.release.yaml, сгенерирует .env, CA, сертификат mTLS и ключ подписи обновлений в /opt/nodeflow;
  5. выполнит docker compose pull && docker compose up -d с образом ghcr.io/nodeflow-dev/nodeflow-panel:2.3.0 — на сервере ничего не собирается, миграции БД применяет сам образ;
  6. опубликует подписанные релизы Node Agent (amd64 и arm64) и сохранит реквизиты входа в ~/nodeflow-credentials.txt (права 0600).

Файрвол установщик не меняет. Для автоматизации без вопросов передайте переменные NODEFLOW_DOMAIN, NODEFLOW_AUTH_MODE=cookie|none и при необходимости NODEFLOW_VERSION=2.3.0 (по умолчанию — последний релиз):

curl -fsSL https://raw.githubusercontent.com/NodeFlow-dev/nodeflow/main/install.sh \
  | sudo NODEFLOW_DOMAIN=panel.example.com NODEFLOW_AUTH_MODE=cookie sh

Установщик есть и в install kit (NodeFlow-Panel-<версия>-Agent-<версия>-install-kit.tar.gz в assets релиза): распакуйте его и запустите sudo ./install.sh — тогда compose.release.yaml берётся из комплекта, а из GitHub скачиваются только бинарники Agent для публикации в Panel.

Assets релиза — ровно три файла: install kit (установщики, compose.release.yaml, шаблон .env, скрипты PKI и ноды, systemd-юнит Agent, инструкции) и бинарники nodeflow-node-agent-<версия>-linux-amd64 / -linux-arm64. Panel поставляется только образом ghcr.io/nodeflow-dev/nodeflow-panel. Отдельного SHA256SUMS нет: установщики сверяют каждый скачанный файл с SHA-256, который GitHub публикует для asset'а (поле digest в API релиза), и прерываются при расхождении или отсутствии digest.

Ноды

В Panel: Ноды → Добавить ноду → IP, SSH-порт, пользователь и пароль или ключ → сверьте fingerprint хоста → «Установить Node Agent». Panel один раз подключится по SSH, установит подписанный Agent, updater и mTLS-сертификат ноды; дальше нода управляется только через исходящий mTLS-канал на 4200/tcp.

Для восстановления без Panel есть install-node.sh: он скачивает Agent для архитектуры ноды из последнего релиза (или из NODEFLOW_VERSION) и проверяет его по SHA-256 asset'а из GitHub API; systemd-юнит встроен в скрипт. Нужны curl, jq или python3 и установленный HAProxy:

curl -fsSL https://raw.githubusercontent.com/NodeFlow-dev/nodeflow/main/scripts/install-node.sh -o install-node.sh
sudo NODE_AGENT_TOKEN=<токен> bash install-node.sh

Тот же скрипт лежит в install kit: scripts/install-node.sh.

Ручная установка через Docker Compose

Команды выполняются от root (sudo -i): каталог /opt/nodeflow закрыт для остальных пользователей.

v=2.3.0
kit=NodeFlow-Panel-$v-Agent-$v-install-kit
curl -fsSLO "https://github.com/NodeFlow-dev/nodeflow/releases/download/v$v/$kit.tar.gz"
# сверьте с digest asset'а на странице релиза или в API:
curl -fsSL "https://api.github.com/repos/NodeFlow-dev/nodeflow/releases/tags/v$v" \
  | jq -r --arg n "$kit.tar.gz" '.assets[] | select(.name == $n) | .digest'
sha256sum "$kit.tar.gz"
tar -xzf "$kit.tar.gz" && cd "$kit" && sha256sum -c SHA256SUMS
install -d -m 0750 /opt/nodeflow
install -m 0644 compose.release.yaml /opt/nodeflow/compose.yaml
install -m 0600 nodeflow.env.example /opt/nodeflow/.env   # заполните секреты и домен
install -d /opt/nodeflow/scripts && install -m 0755 scripts/init-*.sh /opt/nodeflow/scripts/
/opt/nodeflow/scripts/init-mtls-pki.sh panel.example.com /opt/nodeflow   # CA, mTLS, ключ подписи
cd /opt/nodeflow && docker compose pull && docker compose up -d
curl -fsS http://127.0.0.1:8080/healthz

Перед Panel нужен HTTPS reverse proxy: готовые примеры для Caddy и Nginx — в docs/install/reverse-proxy. Порт 4200 не проксируется: ноды подключаются к нему напрямую.

Обновление с 1.0.x

Повторно запустите тот же установщик на сервере Panel:

curl -fsSL https://raw.githubusercontent.com/NodeFlow-dev/nodeflow/main/install.sh | sudo sh

Найдя /opt/nodeflow/.env, он работает как апгрейдер: делает pg_dump и архив конфигурации в /var/backups/nodeflow/, сохраняет .env, tls/, pki/ и Caddy-сниппет /etc/caddy/conf.d/nodeflow-panel.caddy, переводит установку со сборки из исходников на образ ghcr.io, запускает миграции и проверяет, что Panel отвечает новой версией. При ошибке возвращаются прежние compose.yaml и .env; дамп БД остаётся (миграции автоматически не откатываются).

Затем в Настройки → Node Agent обновите ноды до 2.3.0 — updater заменит Agent атомарно и откатит его при неудачном запуске. Самообновление не меняет systemd-юнит, поэтому на нодах, установленных версиями 1.0.x, один раз добавьте права на настройку pipe-буферов ядра (без этого splice остаётся на 256 КиБ) — или переустановите Agent из меню ноды:

sudo install -d /etc/systemd/system/nodeflow-node-agent.service.d
printf '[Service]\nReadWritePaths=-/etc/sysctl.d -/proc/sys/fs/pipe-max-size -/proc/sys/fs/pipe-user-pages-soft\n' \
  | sudo tee /etc/systemd/system/nodeflow-node-agent.service.d/20-kernel-pipes.conf
sudo systemctl daemon-reload && sudo systemctl restart nodeflow-node-agent

Подробности, изменения поведения и список миграций — в заметках к релизу 2.0.0.

Скриншоты

Карточка ноды

Карточка ноды

Редактор маршрута с предпросмотром HAProxy

Редактор маршрута

Редактор haproxy.cfg с подсказками и проверкой

Редактор haproxy.cfg

Настройки HAProxy ноды

Настройки HAProxy ноды

Трафик и топ маршрутов

Трафик

Настройки: релизы Node Agent, Panel и Prometheus

Настройки

Сборка из исходников

Нужны Go 1.25+ и Node.js 22+.

git clone https://github.com/NodeFlow-dev/nodeflow.git && cd nodeflow
(cd frontend && npm ci && npm run build)
./scripts/build-panel.sh                  # panel-api со встроенным UI
go build -trimpath -o node-agent ./cmd/node-agent
go build -trimpath -o node-updater ./cmd/node-updater
go test ./...

Локальный стенд: cp .env.example .env, заполните секреты и выполните docker compose up -d --build — compose.yaml в корне собирает образ из Dockerfile.panel. Интеграционные тесты PostgreSQL включаются переменной NODEFLOW_TEST_DATABASE_URL.

Документация

Безопасность

  • Node Agent не публикуется в интернет: локальный API принимает только loopback-трафик, управление идёт по исходящему mTLS-каналу.
  • Для каждой ноды выпускается отдельный клиентский сертификат.
  • Релизы Agent проверяются по подписи Ed25519, SHA-256, платформе и последовательности версий.
  • Panel по умолчанию слушает только 127.0.0.1; публикация HTTP наружу требует явного ALLOW_INSECURE_HTTP=true.
  • Действия с повышенными правами пишутся в журнал аудита.

Об уязвимостях сообщайте по SECURITY.md, не через публичные Issues.

Обратная связь

Баг-репорты, идеи и вопросы по установке — в Issues. Укажите версии Panel/Agent, ОС и HAProxy ноды, шаги воспроизведения и обезличенные логи — без токенов, ключей, сертификатов и IP-адресов клиентов. Правила для PR — в CONTRIBUTING.md.

Поддержать проект

Поддержка проекта очень важна для продолжения обновлений NodeFlow.

Tribute

Tron: TNUe93tFxeHj4avBY8s3NWzjaiyZfPWD9T

Лицензия

© 2026 NodeFlow. Все права защищены. Исходный код открыт для ознакомления, самостоятельной установки пользователями NodeFlow и внесения вклада в этот репозиторий. Распространение, в том числе изменённых версий, и коммерческое использование кода требуют письменного разрешения правообладателя. Полный текст — в LICENSE.

Rendered by GitHub from the repository’s README. Scroll to read the full file.
First trending

Jul 30, 2026

first spotted on the list

Best rank

#36

highest position reached

Appearances

1

times on the trending list

Quality score

80

out of 100

Momentum

17

trend strength indicator

Star velocity

0.08

stars per day since creation

Activity — last 60 days

daily counts, collected every 6 hours
  • Stars
  • Forks
  • Merged PRs
  • Issues
  • Closed issues

Collecting activity data since launch — check back in a few days.

Star history

total stars per snapshot

Not enough snapshots yet — check back soon.

Rank history

position on trending · lower is better

Not enough snapshots yet — check back soon.

3D card for your website

Live HTML card with a glass surface and pointer tilt. Paste the iframe on any website.

<iframe src="https://www.notionpulse.cc/embed/NodeFlow-dev/nodeflow" width="420" height="240" style="border:0;max-width:100%;background:transparent" loading="lazy" title="NodeFlow-dev/nodeflow — trending on Open Source Pulse"></iframe>

Stars badge

Show current stars in your README or profile. Auto-updates every 6 hours.

NodeFlow-dev/nodeflow stars badge
Markdown
[![NodeFlow-dev/nodeflow](https://www.notionpulse.cc/api/badge/NodeFlow-dev/nodeflow.svg)](https://www.notionpulse.cc/repo/NodeFlow-dev/nodeflow)
HTML
<a href="https://www.notionpulse.cc/repo/NodeFlow-dev/nodeflow"><img src="https://www.notionpulse.cc/api/badge/NodeFlow-dev/nodeflow.svg" alt="NodeFlow-dev/nodeflow stars badge" /></a>

Repository of the Day

#36 Repository of the Day

Repository of the Week

#36 Repository of the Week

Repository of the Month

#36 Repository of the Month