# Установка и настройка LogBoard+

**Автор:** Сергей Антропов  
**Сайт:** https://devops.org.ru

## Содержание

1. [Обзор и применение](#обзор-и-применение)
2. [Предварительные требования](#предварительные-требования)
3. [Установка](#установка)
4. [Настройка](#настройка)
5. [Первый запуск](#первый-запуск)
6. [Проверка установки](#проверка-установки)
7. [Настройка для продакшена](#настройка-для-продакшена)

## Обзор и применение

### 🎯 **Идеально для локальной разработки**

LogBoard+ создан специально для разработчиков, работающих с микросервисной архитектурой. Если вы используете Docker и Docker Compose для локальной разработки, этот инструмент станет незаменимым помощником:

- **Второй монитор** - Держите логи всех микросервисов постоянно видимыми
- **Быстрая отладка** - Мгновенный доступ к логам без переключения между терминалами
- **Мониторинг в реальном времени** - Видите проблемы сразу, как они возникают
- **Централизованный просмотр** - Все логи в одном месте, а не в десятках терминалов

### 🐳 **Оптимизирован для Docker и Docker Compose**

Если ваша инфраструктура основана на Docker и Docker Compose, LogBoard+ предоставляет:

- **Автоматическое обнаружение** всех проектов Docker Compose
- **Быстрый просмотр логов** всех контейнеров в проекте
- **Фильтрация по проектам** - легко переключаться между разными проектами
- **Multi-view режим** - одновременный просмотр логов нескольких контейнеров
- **Интеграция с Docker API** - прямая работа с контейнерами

### 💡 **Сценарии использования**

- **Локальная разработка** - мониторинг логов микросервисов на втором мониторе
- **Отладка проблем** - быстрый поиск ошибок в логах
- **Тестирование** - наблюдение за поведением системы в реальном времени
- **Демонстрации** - показ работы системы клиентам или команде

## Предварительные требования

### Системные требования

- **Операционная система:** Linux (Ubuntu 20.04+, CentOS 8+, RHEL 8+)
- **Docker Engine:** 20.10.0 или выше
- **Docker Compose:** 2.0.0 или выше
- **RAM:** Минимум 1 GB, рекомендуется 2 GB
- **CPU:** Минимум 1 ядро, рекомендуется 2 ядра
- **Дисковое пространство:** Минимум 2 GB свободного места

### Проверка системы

```bash
# Проверка версии Docker
docker --version
# Docker version 20.10.21, build baeda1f

# Проверка версии Docker Compose
docker compose version
# Docker Compose version v2.12.2

# Проверка доступной памяти
free -h
#               total        used        free      shared  buff/cache   available
# Mem:           7.7Gi       2.1Gi       4.2Gi       0.0Ki       1.4Gi       5.3Gi

# Проверка свободного места
df -h /
# Filesystem      Size  Used Avail Use% Mounted on
# /dev/sda1       100G   20G   80G  20% /
```

## Установка

### Метод 1: Клонирование из Git

```bash
# Клонирование репозитория
git clone https://github.com/your-username/logboard.git
cd logboard

# Проверка структуры проекта
ls -la

# Настройка переменных окружения
cp env.example .env
```

### Метод 2: Скачивание архива

```bash
# Скачивание и распаковка
wget https://github.com/your-username/logboard/archive/refs/tags/v1.0.0.tar.gz
tar -xzf v1.0.0.tar.gz
cd logboard-1.0.0
```

## Настройка

### 1. Создание файла переменных окружения

```bash
# Копирование примера конфигурации
make setup

# Или вручную
cp env.example .env
```

### 2. Редактирование конфигурации

Откройте файл `.env` и настройте основные параметры:

```bash
# Основные настройки
LOGBOARD_PORT=9001
LOGBOARD_USER=admin
LOGBOARD_PASS=your-secure-password

# Безопасность (обязательно измените!)
SECRET_KEY=your-very-secure-secret-key-here
ENCRYPTION_KEY=your-encryption-key-here

# Настройки Docker
DOCKER_HOST=unix:///var/run/docker.sock
```

### 3. Настройка прав доступа к Docker

```bash
# Создание группы docker (если не существует)
sudo groupadd docker

# Добавление пользователя в группу docker
sudo usermod -aG docker $USER

# Проверка прав доступа
ls -la /var/run/docker.sock
# srw-rw-rw- 1 root docker 0 Jan 15 10:00 /var/run/docker.sock

# Перезагрузка группы (или перелогин)
newgrp docker
```

### 4. Создание директорий

```bash
# Создание директории для снимков логов
mkdir -p snapshots

# Установка прав доступа
chmod 755 snapshots
```

## Первый запуск

### 1. Сборка и запуск приложения

```bash
# Сборка и запуск в одном команде
docker compose up --build -d

# Или пошагово:
# Сборка образа
docker compose build --no-cache

# Запуск в фоновом режиме
docker compose up -d
```

### 3. Проверка статуса

```bash
# Проверка статуса контейнеров
make status

# Просмотр логов
make logs
```

## Проверка установки

### 1. Проверка доступности веб-интерфейса

```bash
# Проверка HTTP ответа
curl -I http://localhost:9001
# HTTP/1.1 200 OK
# Content-Type: text/html; charset=utf-8

# Проверка health check
curl http://localhost:9001/healthz
# ok
```

### 2. Проверка API

```bash
# Получение токена аутентификации
curl -X POST "http://localhost:9001/api/auth/login" \
  -H "Content-Type: application/json" \
  -d '{"username":"admin","password":"your-secure-password"}'

# Ответ должен содержать access_token
```

### 3. Проверка Docker интеграции

```bash
# Проверка списка контейнеров
curl -X GET "http://localhost:9001/api/services" \
  -H "Authorization: Bearer YOUR_TOKEN_HERE"

# Проверка списка проектов
curl -X GET "http://localhost:9001/api/projects" \
  -H "Authorization: Bearer YOUR_TOKEN_HERE"
```

### 4. Проверка WebSocket соединений

```bash
# Тестирование WebSocket (требует специального клиента)
# Используйте браузер или wscat для тестирования
```

## Настройка для продакшена

### 1. Безопасность

#### Изменение паролей и ключей

```bash
# Генерация секретного ключа
openssl rand -hex 32
# 8a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1v2w3x4y5z6

# Генерация ключа шифрования
openssl rand -hex 32
# 1a2b3c4d5e6f7g8h9i0j1k2l3m4n5o6p7q8r9s0t1u2v3w4x5y6z7

# Обновление .env файла
LOGBOARD_PASS=your-very-secure-password
SECRET_KEY=8a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1v2w3x4y5z6
ENCRYPTION_KEY=1a2b3c4d5e6f7g8h9i0j1k2l3m4n5o6p7q8r9s0t1u2v3w4x5y6z7
```

#### Настройка HTTPS

Создайте файл `nginx.conf`:

```nginx
server {
    listen 80;
    server_name your-domain.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    server_name your-domain.com;

    ssl_certificate /path/to/your/certificate.crt;
    ssl_certificate_key /path/to/your/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";
    }
}
```

### 2. Мониторинг

#### Настройка логирования

```bash
# Создание директории для логов
sudo mkdir -p /var/log/logboard
sudo chown $USER:$USER /var/log/logboard

# Обновление docker-compose.yml
volumes:
  - /var/log/logboard:/app/logs
```

#### Настройка systemd сервиса

Создайте файл `/etc/systemd/system/logboard.service`:

```ini
[Unit]
Description=LogBoard+ Docker Compose
Requires=docker.service
After=docker.service

[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/path/to/logboard
ExecStart=/usr/bin/docker compose up -d
ExecStop=/usr/bin/docker compose down
TimeoutStartSec=0

[Install]
WantedBy=multi-user.target
```

```bash
# Включение автозапуска
sudo systemctl enable logboard.service
sudo systemctl start logboard.service
```

### 3. Резервное копирование

#### Скрипт резервного копирования

Создайте файл `backup.sh`:

```bash
#!/bin/bash
# Скрипт резервного копирования LogBoard+

BACKUP_DIR="/backup/logboard"
DATE=$(date +%Y%m%d_%H%M%S)

# Создание директории для резервных копий
mkdir -p $BACKUP_DIR

# Резервное копирование конфигурации
tar -czf $BACKUP_DIR/logboard_config_$DATE.tar.gz \
  .env \
  excluded_containers.json \
  docker-compose.yml

# Резервное копирование снимков логов
tar -czf $BACKUP_DIR/logboard_snapshots_$DATE.tar.gz \
  snapshots/

# Удаление старых резервных копий (старше 30 дней)
find $BACKUP_DIR -name "*.tar.gz" -mtime +30 -delete

echo "Резервное копирование завершено: $DATE"
```

```bash
# Установка прав на выполнение
chmod +x backup.sh

# Добавление в cron (ежедневно в 2:00)
crontab -e
# 0 2 * * * /path/to/logboard/backup.sh
```

### 4. Обновление

#### Скрипт обновления

Создайте файл `update.sh`:

```bash
#!/bin/bash
# Скрипт обновления LogBoard+

echo "Начинаем обновление LogBoard+..."

# Остановка сервисов
make down

# Получение обновлений
git pull origin main

# Пересборка образов
make build

# Запуск сервисов
make up

# Проверка статуса
make status

echo "Обновление завершено!"
```

```bash
# Установка прав на выполнение
chmod +x update.sh
```

## Устранение проблем установки

### Частые ошибки

1. **Ошибка доступа к Docker socket**
   ```bash
   # Решение: добавление пользователя в группу docker
   sudo usermod -aG docker $USER
   newgrp docker
   ```

2. **Ошибка порта уже используется**
   ```bash
   # Решение: изменение порта в .env
   LOGBOARD_PORT=9002
   ```

3. **Ошибка недостаточно памяти**
   ```bash
   # Решение: увеличение лимитов Docker
   sudo systemctl edit docker
   # Добавьте:
   # [Service]
   # MemoryLimit=2G
   ```

4. **Ошибка SSL сертификатов**
   ```bash
   # Решение: использование самоподписанных сертификатов для тестирования
   openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
     -keyout private.key -out certificate.crt
   ```

### Логи для диагностики

```bash
# Просмотр логов приложения
make logs

# Просмотр логов Docker
docker logs logboard

# Проверка статуса контейнера
docker inspect logboard
```

## Следующие шаги

После успешной установки:

1. [Настройте безопасность](./security.md)
2. [Изучите API документацию](./api.md)
3. [Настройте конфигурацию](./configuration.md)
4. [Изучите WebSocket API](./websocket.md)

