Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ body:
attributes:
label: Версии
description: Panel, Node Agent, HAProxy и ОС ноды.
placeholder: "Panel 2.0.0, Agent 2.0.0, HAProxy 3.4, Ubuntu 24.04"
placeholder: "Panel 2.0.1, Agent 2.0.1, HAProxy 3.4, Ubuntu 24.04"
validations:
required: true
- type: textarea
Expand Down
10 changes: 10 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,15 @@
# Changelog

## 2.0.1 — Логи HAProxy на ноде и исправления редактора

Panel и Node Agent — 2.0.1, HAProxy renderer v21, миграций нет. Заметки к релизу: [docs/releases/2.0.1.md](docs/releases/2.0.1.md).

- **«Логи соединений HAProxy»** — переключатель в настройках ноды (`haproxy_logs`, в `nodes.metadata`, по умолчанию включено, конфиг байт в байт прежний). Выключено: без `log` в `global`, `log global`/`option tcplog`/`option dontlognull` в `defaults` и `option tcplog` у frontend'ов; переключение публикует новую ревизию ноды.
- **Исправлено:** маршрут из одного сервера (или одного домена в DNS-пуле) не сохранялся с `sticky_mode must be source, source_table, leastconn or roundrobin` — одиночный путь теперь принимает `none`.
- **Исправлено:** редактор маршрутов пропускал значения, которые API отклонял (IPv4 с ведущими нулями, некорректные IPv6, хосты с числовой последней частью, подсети доверенных адресов `/0`, дубли IPv6 в весах IP, резервный DNS-пул вместе с другими резервными, имена серверов как у слотов DNS-пула, запрещённые при DNS-пуле ручные директивы, табуляция в имени).
- **Исправлено:** ручная директива 509–512 байт сохранялась и ломала рендер конфига ноды; имя ноды длиннее 200 символов давало 500 вместо 400; версия релиза Agent проверяется до загрузки файла.
- Контрактный тест редактор ↔ API на 4685 вариантах маршрутов.

## 2.0.0 — Готовые образы и расширенная балансировка

Panel и Node Agent — 2.0.0, HAProxy renderer v21. Первый стабильный релиз после 1.0.8; в него вошли все изменения предварительных сборок 1.1.x. Заметки к релизу с инструкцией по обновлению: [docs/releases/2.0.0.md](docs/releases/2.0.0.md).
Expand Down
14 changes: 7 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<a href="#быстрая-установка">Установка</a> ·
<a href="#обновление-с-10x">Обновление</a> ·
<a href="#скриншоты">Скриншоты</a> ·
<a href="docs/releases/2.0.0.md">Что нового в 2.0</a> ·
<a href="docs/releases/2.0.1.md">Что нового в 2.0.1</a> ·
<a href="../../issues">Issues</a> ·
<a href="#поддержать-проект">Поддержка</a>
</p>
Expand Down Expand Up @@ -58,10 +58,10 @@ curl -fsSL https://raw.githubusercontent.com/NodeFlow-dev/nodeflow/main/install.
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.0.0` — на сервере ничего не собирается, миграции БД применяет сам образ;
5. выполнит `docker compose pull && docker compose up -d` с образом `ghcr.io/nodeflow-dev/nodeflow-panel:2.0.1` — на сервере ничего не собирается, миграции БД применяет сам образ;
6. опубликует подписанные релизы Node Agent (amd64 и arm64) и сохранит реквизиты входа в `~/nodeflow-credentials.txt` (права `0600`).

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

```bash
curl -fsSL https://raw.githubusercontent.com/NodeFlow-dev/nodeflow/main/install.sh \
Expand Down Expand Up @@ -90,7 +90,7 @@ sudo NODE_AGENT_TOKEN=<токен> bash install-node.sh
Команды выполняются от root (`sudo -i`): каталог `/opt/nodeflow` закрыт для остальных пользователей.

```bash
v=2.0.0
v=2.0.1
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:
Expand All @@ -117,9 +117,9 @@ curl -fsS http://127.0.0.1:8080/healthz
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 отвечает версией 2.0.0. При ошибке возвращаются прежние `compose.yaml` и `.env`; дамп БД остаётся (миграции автоматически не откатываются).
Найдя `/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.0.0 — updater заменит Agent атомарно и откатит его при неудачном запуске. Самообновление не меняет systemd-юнит, поэтому на нодах, установленных версиями 1.0.x, один раз добавьте права на настройку pipe-буферов ядра (без этого splice остаётся на 256 КиБ) — или переустановите Agent из меню ноды:
Затем в **Настройки → Node Agent** обновите ноды до 2.0.1 — updater заменит Agent атомарно и откатит его при неудачном запуске. Самообновление не меняет systemd-юнит, поэтому на нодах, установленных версиями 1.0.x, один раз добавьте права на настройку pipe-буферов ядра (без этого splice остаётся на 256 КиБ) — или переустановите Agent из меню ноды:

```bash
sudo install -d /etc/systemd/system/nodeflow-node-agent.service.d
Expand Down Expand Up @@ -165,7 +165,7 @@ go test ./...

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

- [Заметки к релизу 2.0.0](docs/releases/2.0.0.md) и [CHANGELOG](CHANGELOG.md)
- Заметки к релизам [2.0.1](docs/releases/2.0.1.md) и [2.0.0](docs/releases/2.0.0.md), [CHANGELOG](CHANGELOG.md)
- [API Panel](docs/api-contract.md)
- [Архитектура](docs/architecture.md)
- [Первичная установка ноды](docs/bootstrap-flow.md)
Expand Down
2 changes: 1 addition & 1 deletion cmd/node-agent/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import (
"github.com/nodeflow/nodeflow/internal/agent"
)

var version = "2.0.0"
var version = "2.0.1"

func main() {
showVersion := flag.Bool("version", false, "print Node Agent version and exit")
Expand Down
2 changes: 1 addition & 1 deletion cmd/panel-api/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ import (

// panelVersion is the published Panel release version. Release builds may
// replace it with -ldflags "-X main.panelVersion=...".
var panelVersion = "2.0.0"
var panelVersion = "2.0.1"

func main() {
if len(os.Args) > 1 {
Expand Down
4 changes: 2 additions & 2 deletions compose.release.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ services:
<<: *hardening

migrate:
image: ghcr.io/nodeflow-dev/nodeflow-panel:${NODEFLOW_VERSION:-2.0.0}
image: ghcr.io/nodeflow-dev/nodeflow-panel:${NODEFLOW_VERSION:-2.0.1}
restart: "no"
command: ["migrate"]
depends_on:
Expand Down Expand Up @@ -79,7 +79,7 @@ services:
<<: *hardening

panel-api:
image: ghcr.io/nodeflow-dev/nodeflow-panel:${NODEFLOW_VERSION:-2.0.0}
image: ghcr.io/nodeflow-dev/nodeflow-panel:${NODEFLOW_VERSION:-2.0.1}
restart: unless-stopped
depends_on:
migrate:
Expand Down
8 changes: 4 additions & 4 deletions docs/install/README-NODE-AGENT.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@ NODEFLOW NODE AGENT — SIGNED RELEASE UPLOAD
===========================================

Бинарники Agent — отдельные assets GitHub Release:
nodeflow-node-agent-2.0.0-linux-amd64
nodeflow-node-agent-2.0.0-linux-arm64
nodeflow-node-agent-2.0.1-linux-amd64
nodeflow-node-agent-2.0.1-linux-arm64

install.sh публикует их в Panel сам. Для ручной загрузки скачайте файл и
сверьте SHA-256 с digest, который GitHub показывает для asset'а:

v=2.0.0 f=nodeflow-node-agent-2.0.0-linux-amd64
v=2.0.1 f=nodeflow-node-agent-2.0.1-linux-amd64
curl -fsSLO https://github.com/NodeFlow-dev/nodeflow/releases/download/v$v/$f
curl -fsSL https://api.github.com/repos/NodeFlow-dev/nodeflow/releases/tags/v$v \
| jq -r --arg n "$f" '.assets[] | select(.name == $n) | .digest'
Expand All @@ -17,7 +17,7 @@ install.sh публикует их в Panel сам. Для ручной загр
В Panel откройте:
Настройки → Node Agent (подписанные релизы)

Версия 2.0.0, ОС linux, архитектура amd64 или arm64 — по файлу. Выберите
Версия 2.0.1, ОС linux, архитектура amd64 или arm64 — по файлу. Выберите
бинарник и нажмите «Загрузить и подписать». Затем назначьте релиз на
странице нужной ноды.

Expand Down
6 changes: 3 additions & 3 deletions docs/install/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ <h1>Как установить Panel и подключить первую HAPro
<div class="file"><b>Корень комплекта</b><code>install.sh</code><p>Установщик и апгрейдер Panel, <code>compose.release.yaml</code> для готового образа <code>ghcr.io/nodeflow-dev/nodeflow-panel</code>, шаблон <code>nodeflow.env.example</code>, <code>SHA256SUMS</code> файлов комплекта.</p></div>
<div class="file"><b>scripts/ · configs/ · docs/</b><code>scripts/install-node.sh</code><p>Скрипты PKI (<code>init-mtls-pki.sh</code>, <code>init-update-signing-key.sh</code>), ручная установка Agent и подготовка UFW ноды, systemd-юнит Agent, эта инструкция и примеры reverse proxy в <code>docs/install/reverse-proxy/</code>.</p></div>
</div>
<div class="important" style="margin-top:12px"><b>Бинарники Agent в комплект не входят.</b> <code>nodeflow-node-agent-2.0.0-linux-amd64</code> и <code>nodeflow-node-agent-2.0.0-linux-arm64</code> лежат отдельными assets GitHub Release. <code>install.sh</code> скачивает оба, сверяет SHA-256 с digest, который GitHub публикует для asset'а, и публикует их в Panel.</div>
<div class="important" style="margin-top:12px"><b>Бинарники Agent в комплект не входят.</b> <code>nodeflow-node-agent-2.0.1-linux-amd64</code> и <code>nodeflow-node-agent-2.0.1-linux-arm64</code> лежат отдельными assets GitHub Release. <code>install.sh</code> скачивает оба, сверяет SHA-256 с digest, который GitHub публикует для asset'а, и публикует их в Panel.</div>
</div></section>

<section id="prepare"><div class="head"><div class="step">1</div><div><h2>Подготовьте сервер Panel</h2><p>Нужен домен, публичный IP и чистый Ubuntu или Debian.</p></div></div><div class="body">
Expand Down Expand Up @@ -158,7 +158,7 @@ <h1>Как установить Panel и подключить первую HAPro

<section id="release"><div class="head"><div class="step">5</div><div><h2>Опубликуйте Node Agent</h2><p>Без совместимого подписанного релиза Panel не начнёт установку ноды.</p></div></div><div class="body">
<p>Автоматический установщик публикует Agent сам. Вручную:</p>
<ol><li>Скачайте <code>nodeflow-node-agent-2.0.0-linux-amd64</code> (или <code>-arm64</code>) из assets GitHub Release.</li><li>Сверьте <code>sha256sum</code> файла с digest asset'а на странице релиза (или в <code>https://api.github.com/repos/NodeFlow-dev/nodeflow/releases/tags/v2.0.0</code>, поле <code>digest</code>).</li><li>Откройте <b>Настройки → Node Agent (подписанные релизы)</b>.</li><li>Версия: <code>2.0.0</code>.</li><li>ОС: <code>linux</code>.</li><li>Архитектура: <code>amd64</code> или <code>arm64</code> — по файлу.</li><li>Выберите файл и нажмите «Загрузить и подписать».</li></ol>
<ol><li>Скачайте <code>nodeflow-node-agent-2.0.1-linux-amd64</code> (или <code>-arm64</code>) из assets GitHub Release.</li><li>Сверьте <code>sha256sum</code> файла с digest asset'а на странице релиза (или в <code>https://api.github.com/repos/NodeFlow-dev/nodeflow/releases/tags/v2.0.1</code>, поле <code>digest</code>).</li><li>Откройте <b>Настройки → Node Agent (подписанные релизы)</b>.</li><li>Версия: <code>2.0.1</code>.</li><li>ОС: <code>linux</code>.</li><li>Архитектура: <code>amd64</code> или <code>arm64</code> — по файлу.</li><li>Выберите файл и нажмите «Загрузить и подписать».</li></ol>
<div class="important">Panel подписывает бинарник собственным Ed25519-ключом. Нода проверяет подпись, SHA-256 и порядок релиза; при неудачном запуске updater возвращает прежний Agent.</div>
</div></section>

Expand All @@ -177,7 +177,7 @@ <h1>Как установить Panel и подключить первую HAPro
<div class="code"><div class="code-label">3. Проверить обновление<button class="copy">Копировать</button></div><pre>cd /opt/nodeflow
sudo docker compose ps
curl -fsS http://127.0.0.1:8080/healthz</pre></div>
<p>После обновления Panel обновите Agent на нодах: «Настройки → Node Agent» → «Обновить до 2.0.0». Для нод, установленных версиями 1.0.x, см. раздел «Обновление с 1.0.x» в заметках к релизу 2.0.0 (однократный systemd drop-in для pipe-буферов ядра).</p>
<p>После обновления Panel обновите Agent на нодах: «Настройки → Node Agent» → «Обновить до 2.0.1». Для нод, установленных версиями 1.0.x, см. раздел «Обновление с 1.0.x» в заметках к релизу 2.0.0 (однократный systemd drop-in для pipe-буферов ядра).</p>
</div></section>

<section id="check"><div class="head"><div class="step">8</div><div><h2>Проверьте результат</h2><p>Четыре короткие проверки после установки или обновления.</p></div></div><div class="body">
Expand Down
Loading
Loading