- Создан LogBoard клиент для отправки логов с удаленных серверов - Добавлен API эндпоинт /api/logs/remote с аутентификацией - Реализована структурированная система сохранения логов - Исправлена совместимость Docker client библиотеки - Добавлена полная документация и тестирование
213 lines
9.8 KiB
Makefile
213 lines
9.8 KiB
Makefile
# Makefile для LogBoard+
|
||
# Автор: Сергей Антропов
|
||
# Сайт: https://devops.org.ru
|
||
|
||
.PHONY: help setup build up down restart logs clean status ps shell
|
||
|
||
# Переменные
|
||
COMPOSE_FILE = docker-compose.yml
|
||
SERVICE_NAME = logboard
|
||
|
||
# Цвета для вывода
|
||
GREEN = \033[0;32m
|
||
YELLOW = \033[1;33m
|
||
RED = \033[0;31m
|
||
NC = \033[0m # No Color
|
||
|
||
help: ## Показать справку по командам
|
||
@echo "$(GREEN)LogBoard+ - Команды управления$(NC)"
|
||
@echo ""
|
||
@echo "$(YELLOW)Основные команды:$(NC)"
|
||
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf " $(GREEN)%-15s$(NC) %s\n", $$1, $$2}'
|
||
@echo ""
|
||
@echo "$(YELLOW)Примеры использования:$(NC)"
|
||
@echo " make setup # Настроить переменные окружения"
|
||
@echo " make build # Собрать образ"
|
||
@echo " make up # Запустить сервисы"
|
||
@echo " make down # Остановить сервисы"
|
||
@echo " make restart # Перезапустить сервисы"
|
||
@echo " make logs # Показать логи"
|
||
|
||
setup: ## Настроить переменные окружения (копировать env.example в .env)
|
||
@echo "$(GREEN)Настройка переменных окружения...$(NC)"
|
||
@if [ ! -f .env ]; then \
|
||
cp env.example .env; \
|
||
echo "$(GREEN)Файл .env создан из env.example$(NC)"; \
|
||
echo "$(YELLOW)Не забудьте отредактировать .env под свои нужды!$(NC)"; \
|
||
echo "$(YELLOW)Особенно важны переменные безопасности:$(NC)"; \
|
||
echo "$(YELLOW) - LOGBOARD_PASS$(NC)"; \
|
||
echo "$(YELLOW) - SECRET_KEY$(NC)"; \
|
||
echo "$(YELLOW) - ENCRYPTION_KEY$(NC)"; \
|
||
else \
|
||
echo "$(YELLOW)Файл .env уже существует.$(NC)"; \
|
||
echo "$(YELLOW)Для пересоздания удалите .env и запустите make setup$(NC)"; \
|
||
fi
|
||
|
||
build: ## Собрать Docker образ
|
||
@echo "$(GREEN)Сборка Docker образа...$(NC)"
|
||
docker compose -f $(COMPOSE_FILE) build --no-cache
|
||
@echo "$(GREEN)Образ собран успешно!$(NC)"
|
||
|
||
up: ## Запустить сервисы в фоновом режиме (с правами root)
|
||
@echo "$(GREEN)Запуск сервисов с правами root...$(NC)"
|
||
@mkdir -p snapshots
|
||
docker compose -f $(COMPOSE_FILE) up -d
|
||
@echo "$(GREEN)Сервисы запущены с правами root!$(NC)"
|
||
@if [ -f .env ]; then \
|
||
PORT=$$(grep "^LOGBOARD_PORT=" .env | cut -d'=' -f2 || echo "9001"); \
|
||
echo "$(YELLOW)Приложение доступно по адресу: http://localhost:$$PORT$(NC)"; \
|
||
else \
|
||
echo "$(YELLOW)Приложение доступно по адресу: http://localhost:9001$(NC)"; \
|
||
fi
|
||
|
||
down: ## Остановить и удалить сервисы (с правами root)
|
||
@echo "$(YELLOW)Остановка сервисов с правами root...$(NC)"
|
||
docker compose -f $(COMPOSE_FILE) down
|
||
@echo "$(GREEN)Сервисы с правами root остановлены!$(NC)"
|
||
|
||
restart: ## Перезапустить сервисы (с правами root)
|
||
@echo "$(YELLOW)Перезапуск сервисов с правами root...$(NC)"
|
||
docker compose -f $(COMPOSE_FILE) restart
|
||
@echo "$(GREEN)Сервисы с правами root перезапущены!$(NC)"
|
||
|
||
logs: ## Показать логи сервисов
|
||
@echo "$(GREEN)Логи сервисов:$(NC)"
|
||
docker compose -f $(COMPOSE_FILE) logs -f
|
||
|
||
clean: ## Остановить сервисы и удалить образы
|
||
@echo "$(RED)Очистка проекта...$(NC)"
|
||
docker compose -f $(COMPOSE_FILE) down --rmi all --volumes --remove-orphans
|
||
@echo "$(GREEN)Очистка завершена!$(NC)"
|
||
|
||
status: ## Показать статус сервисов
|
||
@echo "$(GREEN)Статус сервисов:$(NC)"
|
||
docker compose -f $(COMPOSE_FILE) ps
|
||
|
||
ps: status ## Алиас для команды status
|
||
|
||
shell: ## Подключиться к контейнеру сервиса
|
||
@echo "$(GREEN)Подключение к контейнеру $(SERVICE_NAME)...$(NC)"
|
||
docker compose -f $(COMPOSE_FILE) exec $(SERVICE_NAME) /bin/bash
|
||
|
||
start: up ## Алиас для команды up
|
||
|
||
stop: down ## Алиас для команды down
|
||
|
||
rebuild: ## Пересобрать и запустить сервисы
|
||
@echo "$(YELLOW)Пересборка и запуск сервисов...$(NC)"
|
||
docker compose -f $(COMPOSE_FILE) down
|
||
docker compose -f $(COMPOSE_FILE) build --no-cache
|
||
@mkdir -p snapshots
|
||
@mkdir -p logs/remote
|
||
docker compose -f $(COMPOSE_FILE) up -d
|
||
@echo "$(GREEN)Сервисы пересобраны и запущены!$(NC)"
|
||
|
||
# Команды для работы с удаленными клиентами
|
||
client-setup: ## Настроить клиент
|
||
@echo "$(GREEN)Настройка LogBoard клиента...$(NC)"
|
||
@if [ ! -f client/.env ]; then \
|
||
cp client/env.example client/.env; \
|
||
echo "$(GREEN)Файл client/.env создан из примера$(NC)"; \
|
||
echo "$(YELLOW)Отредактируйте client/.env перед запуском!$(NC)"; \
|
||
else \
|
||
echo "$(YELLOW)Файл client/.env уже существует.$(NC)"; \
|
||
fi
|
||
@mkdir -p client/logs
|
||
|
||
client-build: ## Собрать образ клиента
|
||
@echo "$(GREEN)Сборка образа LogBoard клиента...$(NC)"
|
||
docker compose -f $(COMPOSE_FILE) build logboard-client
|
||
@echo "$(GREEN)Образ клиента собран!$(NC)"
|
||
|
||
client-logs: ## Показать логи клиента
|
||
@echo "$(GREEN)Логи LogBoard клиента:$(NC)"
|
||
docker compose -f $(COMPOSE_FILE) logs -f logboard-client
|
||
|
||
client-shell: ## Подключиться к контейнеру клиента
|
||
@echo "$(GREEN)Подключение к контейнеру logboard-client...$(NC)"
|
||
docker compose -f $(COMPOSE_FILE) exec logboard-client /bin/bash
|
||
|
||
test-remote: ## Тестирование системы удаленных клиентов
|
||
@echo "$(GREEN)Тестирование системы удаленных клиентов...$(NC)"
|
||
python test_remote_system.py
|
||
|
||
test-client: ## Тестирование клиента
|
||
@echo "$(GREEN)Тестирование LogBoard клиента...$(NC)"
|
||
cd client && python test_client.py
|
||
|
||
remote-logs: ## Показать удаленные логи
|
||
@echo "$(GREEN)Удаленные логи:$(NC)"
|
||
@if [ -d "logs/remote" ]; then \
|
||
find logs/remote -name "*.log" -type f | head -10; \
|
||
echo "$(YELLOW)Используйте 'ls -la logs/remote/' для полного списка$(NC)"; \
|
||
else \
|
||
echo "$(YELLOW)Директория logs/remote не существует$(NC)"; \
|
||
fi
|
||
docker compose -f $(COMPOSE_FILE) up -d
|
||
@echo "$(GREEN)Сервисы пересобраны и запущены!$(NC)"
|
||
@if [ -f .env ]; then \
|
||
PORT=$$(grep "^LOGBOARD_PORT=" .env | cut -d'=' -f2 || echo "9001"); \
|
||
echo "$(YELLOW)Приложение доступно по адресу: http://localhost:$$PORT$(NC)"; \
|
||
else \
|
||
echo "$(YELLOW)Приложение доступно по адресу: http://localhost:9001$(NC)"; \
|
||
fi
|
||
|
||
config: ## Показать конфигурацию с подставленными переменными окружения
|
||
@echo "$(GREEN)Конфигурация Docker Compose с переменными окружения:$(NC)"
|
||
docker compose -f $(COMPOSE_FILE) config
|
||
|
||
validate: ## Проверить синтаксис docker-compose.yml
|
||
@echo "$(GREEN)Проверка синтаксиса docker-compose.yml...$(NC)"
|
||
docker compose -f $(COMPOSE_FILE) config --quiet
|
||
@echo "$(GREEN)Синтаксис корректен!$(NC)"
|
||
|
||
env-check: ## Проверить переменные окружения
|
||
@echo "$(GREEN)Проверка переменных окружения...$(NC)"
|
||
@if [ -f .env ]; then \
|
||
echo "$(GREEN)Файл .env найден$(NC)"; \
|
||
echo "$(YELLOW)Основные переменные:$(NC)"; \
|
||
grep -E "^(LOGBOARD_PORT|LOGBOARD_USER|LOGBOARD_PASS|SECRET_KEY|ENCRYPTION_KEY|DEBUG_MODE)=" .env || echo "$(RED)Переменные не найдены$(NC)"; \
|
||
else \
|
||
echo "$(RED)Файл .env не найден. Запустите make setup$(NC)"; \
|
||
fi
|
||
|
||
debug-on: ## Включить режим отладки
|
||
@echo "$(GREEN)Включение режима отладки...$(NC)"
|
||
@if [ -f .env ]; then \
|
||
sed -i 's/^DEBUG_MODE=.*/DEBUG_MODE=true/' .env; \
|
||
echo "$(GREEN)Режим отладки включен!$(NC)"; \
|
||
echo "$(YELLOW)Перезапустите сервисы: make restart$(NC)"; \
|
||
else \
|
||
echo "$(RED)Файл .env не найден. Запустите make setup$(NC)"; \
|
||
fi
|
||
|
||
debug-off: ## Выключить режим отладки
|
||
@echo "$(GREEN)Выключение режима отладки...$(NC)"
|
||
@if [ -f .env ]; then \
|
||
sed -i 's/^DEBUG_MODE=.*/DEBUG_MODE=false/' .env; \
|
||
echo "$(GREEN)Режим отладки выключен!$(NC)"; \
|
||
echo "$(YELLOW)Перезапустите сервисы: make restart$(NC)"; \
|
||
else \
|
||
echo "$(RED)Файл .env не найден. Запустите make setup$(NC)"; \
|
||
fi
|
||
|
||
debug-status: ## Показать статус режима отладки
|
||
@echo "$(GREEN)Статус режима отладки:$(NC)"
|
||
@if [ -f .env ]; then \
|
||
DEBUG_MODE=$$(grep "^DEBUG_MODE=" .env | cut -d'=' -f2 || echo "false"); \
|
||
if [ "$$DEBUG_MODE" = "true" ]; then \
|
||
echo "$(GREEN)DEBUG_MODE: ВКЛЮЧЕН$(NC)"; \
|
||
echo "$(YELLOW)Доступны:$(NC)"; \
|
||
echo "$(YELLOW) - Auto-reload при изменении кода$(NC)"; \
|
||
echo "$(YELLOW) - Swagger UI: /docs$(NC)"; \
|
||
echo "$(YELLOW) - ReDoc: /redoc$(NC)"; \
|
||
else \
|
||
echo "$(RED)DEBUG_MODE: ВЫКЛЮЧЕН$(NC)"; \
|
||
echo "$(YELLOW)Продакшен режим$(NC)"; \
|
||
fi; \
|
||
else \
|
||
echo "$(RED)Файл .env не найден$(NC)"; \
|
||
fi
|
||
|
||
|