Добавлена полная документация проекта LogBoard+

- Создан основной README.md с описанием проекта
- Добавлена подробная документация в папке docs/
- Создан файл LICENSE (MIT)
- Обновлен .gitignore
- Добавлена документация по безопасности с генерацией ключей
- Включены примеры конфигураций и устранение неполадок

Автор: Сергей Антропов
Сайт: https://devops.org.ru
This commit is contained in:
Сергей Антропов
2025-08-19 01:06:23 +03:00
parent 86a2c44333
commit 5c8efe2644
11 changed files with 4932 additions and 90 deletions

503
docs/configuration.md Normal file
View File

@@ -0,0 +1,503 @@
# Конфигурация LogBoard+
**Автор:** Сергей Антропов
**Сайт:** https://devops.org.ru
## Содержание
1. [Обзор конфигурации](#обзор-конфигурации)
2. [Переменные окружения](#переменные-окружения)
3. [Настройка Docker](#настройка-docker)
4. [Настройка безопасности](#настройка-безопасности)
5. [Настройка производительности](#настройка-производительности)
6. [Настройка логирования](#настройка-логирования)
7. [Примеры конфигураций](#примеры-конфигураций)
## Обзор конфигурации
LogBoard+ использует переменные окружения для настройки всех аспектов работы приложения. Конфигурация разделена на несколько категорий для удобства управления.
### Файлы конфигурации
- `.env` - Основной файл конфигурации (создается из `env.example`)
- `docker-compose.yml` - Конфигурация Docker Compose
- `excluded_containers.json` - Список исключенных контейнеров
### Приоритет настроек
1. Переменные окружения системы
2. Файл `.env`
3. Значения по умолчанию в коде
## Переменные окружения
### Основные настройки приложения
| Переменная | Описание | По умолчанию | Обязательная |
|------------|----------|--------------|--------------|
| `LOGBOARD_PORT` | Порт веб-интерфейса | `9001` | Нет |
| `LOGBOARD_TAIL` | Количество строк логов по умолчанию | `500` | Нет |
| `LOGBOARD_USER` | Имя пользователя для входа | `admin` | Нет |
| `LOGBOARD_PASS` | Пароль пользователя | `admin` | Да |
| `LOGBOARD_SNAPSHOT_DIR` | Директория для снимков логов | `/app/snapshots` | Нет |
| `LOGBOARD_INDEX_HTML` | Путь к HTML шаблону | `./templates/index.html` | Нет |
| `TZ_TS` | Временная зона | `Europe/Moscow` | Нет |
### Настройки Docker
| Переменная | Описание | По умолчанию | Обязательная |
|------------|----------|--------------|--------------|
| `COMPOSE_PROJECT_NAME` | Фильтр по проекту Docker Compose | - | Нет |
| `LOGBOARD_PROJECTS` | Множественные проекты (через запятую) | - | Нет |
| `DOCKER_HOST` | Путь к Docker socket | `unix:///var/run/docker.sock` | Нет |
| `DOCKER_TLS_VERIFY` | Проверка TLS для Docker | - | Нет |
| `DOCKER_CERT_PATH` | Путь к сертификатам Docker | - | Нет |
| `DOCKER_NETWORKS` | Внешние сети Docker | `iaas,infrastructure_iaas` | Нет |
### Настройки безопасности
| Переменная | Описание | По умолчанию | Обязательная |
|------------|----------|--------------|--------------|
| `SECRET_KEY` | Секретный ключ для JWT | `your-secret-key-here` | Да |
| `ENCRYPTION_KEY` | Ключ шифрования | `your-encryption-key-here` | Да |
| `AUTH_ENABLED` | Включить аутентификацию | `true` | Нет |
| `AUTH_METHOD` | Метод аутентификации | `jwt` | Нет |
| `SESSION_TIMEOUT` | Время жизни сессии (секунды) | `3600` | Нет |
### Настройки производительности
| Переменная | Описание | По умолчанию | Обязательная |
|------------|----------|--------------|--------------|
| `MAX_CONNECTIONS` | Максимальное количество соединений | `100` | Нет |
| `CONNECTION_TIMEOUT` | Таймаут подключения (секунды) | `30` | Нет |
| `READ_TIMEOUT` | Таймаут чтения (секунды) | `60` | Нет |
| `LOGBOARD_AJAX_UPDATE_INTERVAL` | Интервал AJAX обновления (мс) | `2000` | Нет |
### Настройки фильтрации контейнеров
| Переменная | Описание | По умолчанию | Обязательная |
|------------|----------|--------------|--------------|
| `LOGBOARD_SKIP_UNHEALTHY` | Пропускать нездоровые контейнеры | `true` | Нет |
| `LOGBOARD_CONTAINER_LIST_TIMEOUT` | Таймаут получения списка контейнеров | `10` | Нет |
| `LOGBOARD_CONTAINER_INFO_TIMEOUT` | Таймаут получения информации о контейнере | `3` | Нет |
| `LOGBOARD_HEALTH_CHECK_TIMEOUT` | Таймаут health check | `2` | Нет |
### Настройки логирования
| Переменная | Описание | По умолчанию | Обязательная |
|------------|----------|--------------|--------------|
| `LOG_LEVEL` | Уровень логирования | `INFO` | Нет |
| `LOG_FORMAT` | Формат логов | `json` | Нет |
### Настройки веб-интерфейса
| Переменная | Описание | По умолчанию | Обязательная |
|------------|----------|--------------|--------------|
| `WEB_TITLE` | Заголовок веб-интерфейса | `LogBoard+` | Нет |
| `WEB_DESCRIPTION` | Описание веб-интерфейса | `Веб-панель для просмотра логов микросервисов` | Нет |
| `WEB_VERSION` | Версия веб-интерфейса | `1.0.0` | Нет |
### Настройки уведомлений
| Переменная | Описание | По умолчанию | Обязательная |
|------------|----------|--------------|--------------|
| `NOTIFICATIONS_ENABLED` | Включить уведомления | `false` | Нет |
| `SMTP_HOST` | SMTP сервер | - | Нет |
| `SMTP_PORT` | Порт SMTP | `587` | Нет |
| `SMTP_USER` | Пользователь SMTP | - | Нет |
| `SMTP_PASS` | Пароль SMTP | - | Нет |
| `SMTP_FROM` | Email отправителя | - | Нет |
## Настройка Docker
### Подключение к Docker daemon
#### Локальный Docker
```bash
# Стандартная конфигурация для локального Docker
DOCKER_HOST=unix:///var/run/docker.sock
```
#### Удаленный Docker
```bash
# Подключение к удаленному Docker daemon
DOCKER_HOST=tcp://192.168.1.100:2375
# С TLS сертификатами
DOCKER_HOST=tcp://192.168.1.100:2376
DOCKER_TLS_VERIFY=1
DOCKER_CERT_PATH=/path/to/certs
```
### Фильтрация проектов
#### Один проект
```bash
# Показать только контейнеры из одного проекта
COMPOSE_PROJECT_NAME=myproject
```
#### Несколько проектов
```bash
# Показать контейнеры из нескольких проектов
LOGBOARD_PROJECTS=project1,project2,project3
```
#### Все проекты
```bash
# Показать все контейнеры (по умолчанию)
# Оставьте переменные пустыми или не указывайте их
```
### Настройка сетей
```bash
# Подключение к внешним Docker сетям
DOCKER_NETWORKS=iaas,infrastructure_iaas,frontend,backend
```
## Настройка безопасности
### Генерация секретных ключей
```bash
# Генерация секретного ключа для JWT
openssl rand -hex 32
# 8a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1v2w3x4y5z6
# Генерация ключа шифрования
openssl rand -hex 32
# 1a2b3c4d5e6f7g8h9i0j1k2l3m4n5o6p7q8r9s0t1u2v3w4x5y6z7
```
### Настройка аутентификации
```bash
# Включение аутентификации
AUTH_ENABLED=true
AUTH_METHOD=jwt
# Настройка времени жизни сессии (1 час)
SESSION_TIMEOUT=3600
# Настройка пользователей
LOGBOARD_USER=admin
LOGBOARD_PASS=your-secure-password
```
### Настройка HTTPS
Для продакшена рекомендуется использовать HTTPS через reverse proxy:
```nginx
# Nginx конфигурация
server {
listen 443 ssl http2;
server_name your-domain.com;
ssl_certificate /path/to/certificate.crt;
ssl_certificate_key /path/to/private.key;
location / {
proxy_pass http://localhost:9001;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# WebSocket поддержка
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
```
## Настройка производительности
### Ограничения соединений
```bash
# Максимальное количество одновременных подключений
MAX_CONNECTIONS=100
# Таймауты
CONNECTION_TIMEOUT=30
READ_TIMEOUT=60
```
### Настройка AJAX обновления
```bash
# Интервал обновления логов (в миллисекундах)
LOGBOARD_AJAX_UPDATE_INTERVAL=2000
# Количество строк логов по умолчанию
LOGBOARD_TAIL=500
```
### Оптимизация Docker
```bash
# Таймауты для операций с Docker
LOGBOARD_CONTAINER_LIST_TIMEOUT=10
LOGBOARD_CONTAINER_INFO_TIMEOUT=3
LOGBOARD_HEALTH_CHECK_TIMEOUT=2
# Пропуск нездоровых контейнеров
LOGBOARD_SKIP_UNHEALTHY=true
```
## Настройка логирования
### Уровни логирования
```bash
# Доступные уровни: DEBUG, INFO, WARNING, ERROR
LOG_LEVEL=INFO
# Форматы: json, text
LOG_FORMAT=json
```
### Настройка логов приложения
```bash
# Создание директории для логов
sudo mkdir -p /var/log/logboard
sudo chown $USER:$USER /var/log/logboard
# Обновление docker-compose.yml
volumes:
- /var/log/logboard:/app/logs
```
## Исключение контейнеров
### Файл excluded_containers.json
```json
{
"excluded_containers": [
"noisy-container-1",
"noisy-container-2",
"debug-container",
"test-container"
],
"description": "Контейнеры с избыточным логированием, исключенные из отображения"
}
```
### Управление через API
```bash
# Получение списка исключенных контейнеров
curl -X GET "http://localhost:9001/api/excluded-containers" \
-H "Authorization: Bearer YOUR_TOKEN"
# Обновление списка
curl -X POST "http://localhost:9001/api/excluded-containers" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '["container1", "container2"]'
```
## Примеры конфигураций
### Разработка
```bash
# .env для разработки
LOGBOARD_PORT=9001
LOGBOARD_USER=admin
LOGBOARD_PASS=dev-password
SECRET_KEY=dev-secret-key-change-in-production
ENCRYPTION_KEY=dev-encryption-key-change-in-production
# Docker настройки
DOCKER_HOST=unix:///var/run/docker.sock
LOGBOARD_PROJECTS=dev-project
# Производительность
LOGBOARD_TAIL=100
LOGBOARD_AJAX_UPDATE_INTERVAL=1000
LOG_LEVEL=DEBUG
# Безопасность
AUTH_ENABLED=true
SESSION_TIMEOUT=7200
```
### Тестирование
```bash
# .env для тестирования
LOGBOARD_PORT=9002
LOGBOARD_USER=test
LOGBOARD_PASS=test-password
SECRET_KEY=test-secret-key
ENCRYPTION_KEY=test-encryption-key
# Docker настройки
DOCKER_HOST=unix:///var/run/docker.sock
LOGBOARD_PROJECTS=test-project
# Производительность
LOGBOARD_TAIL=50
LOGBOARD_AJAX_UPDATE_INTERVAL=500
LOG_LEVEL=INFO
# Безопасность
AUTH_ENABLED=true
SESSION_TIMEOUT=1800
```
### Продакшен
```bash
# .env для продакшена
LOGBOARD_PORT=9001
LOGBOARD_USER=admin
LOGBOARD_PASS=very-secure-password-here
SECRET_KEY=8a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1v2w3x4y5z6
ENCRYPTION_KEY=1a2b3c4d5e6f7g8h9i0j1k2l3m4n5o6p7q8r9s0t1u2v3w4x5y6z7
# Docker настройки
DOCKER_HOST=unix:///var/run/docker.sock
LOGBOARD_PROJECTS=prod-project,monitoring
# Производительность
LOGBOARD_TAIL=1000
LOGBOARD_AJAX_UPDATE_INTERVAL=5000
MAX_CONNECTIONS=200
CONNECTION_TIMEOUT=60
READ_TIMEOUT=120
# Безопасность
AUTH_ENABLED=true
SESSION_TIMEOUT=3600
# Логирование
LOG_LEVEL=WARNING
LOG_FORMAT=json
# Уведомления
NOTIFICATIONS_ENABLED=true
SMTP_HOST=smtp.company.com
SMTP_PORT=587
SMTP_USER=logboard@company.com
SMTP_PASS=email-password
SMTP_FROM=logboard@company.com
```
### Масштабированная установка
```bash
# .env для масштабированной установки
LOGBOARD_PORT=9001
LOGBOARD_USER=admin
LOGBOARD_PASS=very-secure-password
SECRET_KEY=8a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1v2w3x4y5z6
ENCRYPTION_KEY=1a2b3c4d5e6f7g8h9i0j1k2l3m4n5o6p7q8r9s0t1u2v3w4x5y6z7
# Docker настройки
DOCKER_HOST=tcp://docker-swarm-manager:2376
DOCKER_TLS_VERIFY=1
DOCKER_CERT_PATH=/etc/docker/certs
LOGBOARD_PROJECTS=app1,app2,app3,monitoring
# Производительность
LOGBOARD_TAIL=2000
LOGBOARD_AJAX_UPDATE_INTERVAL=3000
MAX_CONNECTIONS=500
CONNECTION_TIMEOUT=120
READ_TIMEOUT=300
# Безопасность
AUTH_ENABLED=true
SESSION_TIMEOUT=7200
# Логирование
LOG_LEVEL=INFO
LOG_FORMAT=json
# Уведомления
NOTIFICATIONS_ENABLED=true
SMTP_HOST=smtp.company.com
SMTP_PORT=587
SMTP_USER=logboard@company.com
SMTP_PASS=email-password
SMTP_FROM=logboard@company.com
```
## Проверка конфигурации
### Валидация переменных окружения
```bash
# Проверка конфигурации
make env-check
# Проверка Docker Compose
make validate
```
### Тестирование подключения
```bash
# Проверка подключения к Docker
docker ps
# Проверка доступности API
curl http://localhost:9001/healthz
# Проверка аутентификации
curl -X POST "http://localhost:9001/api/auth/login" \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"your-password"}'
```
### Мониторинг конфигурации
```bash
# Просмотр текущих настроек
curl -X GET "http://localhost:9001/api/settings" \
-H "Authorization: Bearer YOUR_TOKEN"
# Проверка списка контейнеров
curl -X GET "http://localhost:9001/api/services" \
-H "Authorization: Bearer YOUR_TOKEN"
```
## Рекомендации по безопасности
### Обязательные настройки для продакшена
1. **Измените пароли по умолчанию**
2. **Используйте сильные секретные ключи**
3. **Настройте HTTPS через reverse proxy**
4. **Ограничьте доступ к Docker socket**
5. **Настройте файрвол**
6. **Регулярно обновляйте зависимости**
7. **Мониторьте логи доступа**
### Мониторинг безопасности
```bash
# Проверка прав доступа к Docker socket
ls -la /var/run/docker.sock
# Проверка пользователей в группе docker
getent group docker
# Проверка открытых портов
netstat -tlnp | grep 9001
# Проверка логов аутентификации
grep "authentication" /var/log/logboard/app.log
```