docs
ci-agent / build (push) Failing after 14m57s

This commit is contained in:
d3m0k1d
2026-04-05 09:32:12 +03:00
parent eb8aef11a4
commit 6d6dd91241
2 changed files with 458 additions and 1 deletions
+32
View File
@@ -0,0 +1,32 @@
name: release-agent
on:
push:
tags:
- 'v*'
permissions:
contents: write
packages: write
jobs:
release:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Go setup
uses: actions/setup-go@v6
with:
go-version: "1.26.1"
- name: Run GoReleaser
uses: goreleaser/goreleaser-action@v6
with:
distribution: goreleaser
version: latest
args: release --clean
workdir: agent
env:
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
+426 -1
View File
@@ -1 +1,426 @@
# HellreigN
# HellreigN
Платформа централизованного мониторинга логов, управления скриптами и деплоя агентов.
## Архитектура
```
┌─────────────┐ gRPC (mTLS) ┌────────┐
│ Agent 1 │ ───────────────────────► │ │
└─────────────┘ │ │
┌─────────────┐ gRPC (mTLS) │Backend │ HTTP ┌──────────┐
│ Agent 2 │ ───────────────────────► │ :8080 │ ◄──────────────── │ Frontend │
└─────────────┘ │ :9001 │ │ :3000 │
┌─────────────┐ gRPC (mTLS) │ │ └──────────┘
│ Agent N │ ───────────────────────► │ │
└─────────────┘ └───┬────┘
┌─────────────┐
│ ClickHouse │
│ :8123/:9000│
└─────────────┘
```
### Компоненты
| Компонент | Описание |
|-----------|----------|
| **Backend** | Go (Gin + gRPC). REST API, gRPC сервер с mTLS, хранение токенов в SQLite |
| **Agent** | Go. Сбор логов (journald, docker, kubernetes, file), отправка метрик, выполнение команд |
| **Frontend** | React 19 + TypeScript + TailwindCSS + PrimeReact |
| **ClickHouse** | Хранилище логов |
## Быстрый старт
### Требования
- Docker + Docker Compose
- Go 1.26.1+ (для локальной разработки)
- protoc + protoc-gen-go (для генерации proto)
### Деплой через Docker Compose
```bash
cd infra
docker compose up -d --build
```
Это поднимет:
- **ClickHouse** — хранилище логов
- **Backend** — API на порту `8080`, gRPC на `9001`
- **Frontend** — веб-интерфейс на порту `3000`
- **Agent** — агент мониторинга (пример)
Откройте `http://localhost:3000`. Логин: `admin`, пароль: `admin123`.
### Локальная разработка
#### Backend
```bash
cd backend
go mod tidy
go run ./cmd/main.go
```
#### Frontend
```bash
cd frontend
npm install
npm run dev
```
#### Agent
```bash
cd agent
go mod tidy
CONFIG_FILE=./config.yml go run main.go
```
## Конфигурация
### Backend (`infra/backend/config.yml`)
```yaml
database:
token_db: /var/lib/hellreign/tokens.db # SQLite база токенов и пользователей
clickhouse_host: clickhouse:9000 # ClickHouse native порт
clickhouse_user: default # Пользователь ClickHouse
clickhouse_password: testpassword # Пароль ClickHouse
clickhouse_database: hellreign # База данных ClickHouse
admin:
admin_name: Admin # Имя администратора
admin_last_name: User # Фамилия администратора
admin_login: admin # Логин администратора
admin_password: admin123 # Пароль администратора (смените!)
```
### Agent (`infra/agent/config.yml`)
```yaml
backend_url: http://backend:8080 # HTTP URL бэкенда
grpc_url: backend:9001 # gRPC URL бэкенда
label: test-agent-1 # Уникальная метка агента
registration_token: "your-token-here" # Токен регистрации (сгенерировать в UI)
cert_dir: /etc/hellreign-agent/certs # Директория для mTLS сертификатов
services:
# Сбор логов из journald
- name: system
type: journald
# Сбор логов Docker контейнера
- name: nginx
type: docker
# Сбор логов из journald + проверка systemd сервиса
- name: sshd
type: journald
systemd_unit: sshd # Опционально: проверка alive/dead
# Сбор логов из файла
- name: myapp
type: file
path: /var/log/myapp/app.log
# Сбор логов из Kubernetes
- name: mypod
type: kubernetes
namespace: default
pod: my-pod
container: my-container
```
### Graph зависимостей (`infra/services.yaml`)
Описывает зависимости сервисов для построения графа и определения причин сбоев:
```yaml
nodes:
test-agent-1:
services:
nginx:
depends_on:
- sshd
sshd:
depends_on: []
system:
depends_on:
- sshd
```
## Переменные окружения
### Backend
| Переменная | По умолчанию | Описание |
|------------|-------------|----------|
| `CONFIG_FILE` | `/etc/hellreign/config.yml` | Путь к YAML конфигу |
| `GRAPH_YAML_PATH` | `/etc/hellreign/services.yaml` | Путь к графу сервисов |
| `SSL_CERT_DIR` | `/var/lib/hellreign/ssl` | Директория SSL сертификатов для mTLS |
| `SERVER_SAN_DNS` | `localhost,backend` | SAN DNS для серверного сертификата |
| `SERVER_SAN_IP` | `127.0.0.1` | SAN IP для серверного сертификата |
| `GRPC_PORT` | `9001` | Порт gRPC сервера |
| `GIN_MODE` | `release` | Режим Gin (`debug` / `release`) |
### Agent
| Переменная | По умолчанию | Описание |
|------------|-------------|----------|
| `CONFIG_FILE` | `/etc/hellreign-agent/config.yml` | Путь к YAML конфигу агента |
| `JOURNALD_LOGDIR` | `/var/log/journal` | Директория логов journald (read-only) |
| `BUFFER_DB` | `/var/lib/hellreign-agent/agent_buffer.db` | SQLite буфер для офлайн-доставки |
| `IS_DEBUG` | `0` | Включить debug логи агента (`1` / `0`) |
## Порты
| Сервис | Порт | Назначение |
|--------|------|------------|
| Frontend | `3000` | Веб-интерфейс (Nginx → React) |
| Backend HTTP | `8080` | REST API + Swagger UI |
| Backend gRPC | `9001` | gRPC с mTLS (Commander + Collector) |
| ClickHouse HTTP | `8123` | HTTP интерфейс ClickHouse |
| ClickHouse Native | `9000` | Native протокол ClickHouse |
## API
### Авторизация
```bash
# Логин
curl -X POST http://localhost:8080/api/v1/auth/login \
-H "Content-Type: application/json" \
-d '{"login":"admin","password":"admin123"}'
# Создать токен
curl -X POST http://localhost:8080/api/v1/auth/token \
-H "Authorization: Bearer <jwt>" \
-H "Content-Type: application/json" \
-d '{"name":"my-token","permissions":["admin"]}'
```
### Регистрация агента
```bash
# Сгенерировать токен регистрации (admin)
curl -X POST http://localhost:8080/api/v1/agents/register-token \
-H "Authorization: Bearer <jwt>"
# Зарегистрировать агент
curl -X POST http://localhost:8080/api/v1/agents/register \
-H "Content-Type: application/json" \
-d '{"registration_token":"<token>","csr":"<pem>"}'
```
### Логи
```bash
# Поиск логов
curl "http://localhost:8080/api/v1/logs?service=nginx&level=error&from=2024-01-01T00:00:00Z" \
-H "Authorization: Bearer <jwt>"
# Список сервисов
curl http://localhost:8080/api/v1/logs/services \
-H "Authorization: Bearer <jwt>"
```
### Агенты и метрики
```bash
# Список подключённых агентов
curl http://localhost:8080/api/v1/agents \
-H "Authorization: Bearer <jwt>"
# Метрики нагрузки (CPU, RAM, disk, network)
curl http://localhost:8080/api/v1/agents/system-metrics \
-H "Authorization: Bearer <jwt>"
```
### Скрипты
```bash
# Дерево скриптов
curl http://localhost:8080/api/v1/scripts/tree \
-H "Authorization: Bearer <jwt>"
# Создать скрипт
curl -X POST http://localhost:8080/api/v1/scripts \
-H "Authorization: Bearer <jwt>" \
-H "Content-Type: application/json" \
-d '{"path":"deploy/restart.sh","content":"#!/bin/bash\nsystemctl restart nginx","interpreter_id":1}'
# Запустить скрипт
curl -X POST http://localhost:8080/api/v1/scripts/1/run \
-H "Authorization: Bearer <jwt>" \
-H "Content-Type: application/json" \
-d '{"token":"agent-token","stdin":""}'
# Переименовать скрипт или папку
curl -X POST http://localhost:8080/api/v1/scripts/rename \
-H "Authorization: Bearer <jwt>" \
-H "Content-Type: application/json" \
-d '{"old_path":"deploy/old.sh","new_path":"deploy/new.sh"}'
```
### Swagger
Swagger UI доступен по адресу: `http://localhost:8080/swagger/index.html`
Перегенерация:
```bash
cd backend
swag init -g ./cmd/main.go --parseDependency --parseInternal
```
## Proto
gRPC протокол определён в `proto/hellreign.proto`. После изменений:
```bash
cd proto
protoc --go_out=. --go_opt=paths=source_relative \
--go-grpc_out=. --go-grpc_opt=paths=source_relative \
hellreign.proto
mv hellreign*.go proto/
```
## Миграции
SQL миграции для SQLite хранятся в `migrations/`. Применяются автоматически при старте бэкенда.
## Деплой агента на хост
### 1. Создать директорию
```bash
sudo mkdir -p /etc/hellreign-agent/certs
sudo mkdir -p /var/lib/hellreign-agent
```
### 2. Конфиг
```bash
sudo nano /etc/hellreign-agent/config.yml
```
```yaml
backend_url: https://your-backend.example.com
grpc_url: your-backend.example.com:9001
label: production-server-1
registration_token: "token-from-ui"
cert_dir: /etc/hellreign-agent/certs
services:
- name: nginx
type: journald
systemd_unit: nginx.service
- name: postgres
type: journald
systemd_unit: postgresql.service
```
### 3. Установить бинарь
Скачать релиз из Gitea или собрать:
```bash
cd agent
go build -o hellreign-agent ./main.go
sudo mv hellreign-agent /usr/bin/
```
### 4. Systemd сервис
```ini
[Unit]
Description=HellreigN Agent
After=network-online.target
[Service]
Type=simple
ExecStart=/usr/bin/hellreign-agent
Environment=CONFIG_FILE=/etc/hellreign-agent/config.yml
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
```
```bash
sudo systemctl daemon-reload
sudo systemctl enable --now hellreign-agent
```
## CI/CD
### GoReleaser (агент)
При пуше тега `v*` автоматически собирается релиз:
```bash
git tag v1.0.0
git push origin v1.0.0
```
Собираются `.deb` и `.rpm` пакеты для `linux/amd64` и `linux/arm64`.
Требует секрет `GITEA_TOKEN` в настройках репозитория.
## Структура проекта
```
HellreigN/
├── agent/ # Агент мониторинга
│ ├── main.go # Точка входа
│ ├── dockerfile
│ ├── .goreleaser.yml # Конфиг GoReleaser
│ └── internal/
│ ├── buffer/ # SQLite буфер логов
│ ├── client/ # gRPC клиент команд
│ ├── commander/ # Исполнитель команд
│ ├── config/ # Загрузка YAML конфига
│ ├── logger/ # Логгер
│ ├── logsource/ # Источники логов
│ │ ├── docker/ # Docker логи
│ │ ├── file/ # File логи
│ │ ├── journald/ # Journald логи
│ │ └── kubernetes/ # Kubernetes логи
│ ├── metrics/ # Сбор метрик (CPU, RAM, disk, network)
│ ├── mtls/ # mTLS credentials
│ └── registration/ # Регистрация агента
├── backend/ # Бэкенд API
│ ├── cmd/main.go # Точка входа
│ ├── dockerfile
│ ├── internal/
│ │ ├── handlers/ # HTTP хендлеры
│ │ ├── repository/ # Репозитории (SQLite)
│ │ ├── service/ # Бизнес-логика
│ │ ├── storage/ # ClickHouse storage
│ │ ├── grpcsrv/ # gRPC серверы
│ │ │ ├── commander/ # Выполнение команд на агентах
│ │ │ └── collector/ # Сбор логов и метрик
│ │ ├── auth/ # JWT авторизация
│ │ └── config/ # Загрузка конфига
│ └── docs/ # Swagger документация
├── frontend/ # Веб-интерфейс
│ ├── dockerfile
│ ├── nginx.conf
│ └── src/
├── infra/ # Docker Compose деплой
│ ├── docker-compose.yml
│ ├── services.yaml # Граф зависимостей
│ ├── backend/config.yml # Конфиг бэкенда
│ ├── agent/config.yml # Конфиг агента
│ └── clickhouse/init/ # Инициализация ClickHouse
├── migrations/ # SQL миграции SQLite
├── proto/ # Protobuf определения
│ ├── hellreign.proto
│ └── proto/ # Сгенерированный Go код
└── .gitea/workflows/ # Gitea Actions CI/CD
├── ci-agent.yml
├── ci-front.yml
└── release-agent.yml
```