Добавлена полная документация проекта LogBoard+
- Создан основной README.md с описанием проекта - Добавлена подробная документация в папке docs/ - Создан файл LICENSE (MIT) - Обновлен .gitignore - Добавлена документация по безопасности с генерацией ключей - Включены примеры конфигураций и устранение неполадок Автор: Сергей Антропов Сайт: https://devops.org.ru
This commit is contained in:
503
docs/configuration.md
Normal file
503
docs/configuration.md
Normal 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
|
||||
```
|
||||
Reference in New Issue
Block a user