diff --git a/Makefile b/Makefile index 7add5e2..4dfa006 100644 --- a/Makefile +++ b/Makefile @@ -24,6 +24,24 @@ GREEN := \033[0;32m YELLOW := \033[0;33m NC := \033[0m # No Color +# ============================================ +# ИНИЦИАЛИЗАЦИЯ И ПОДГОТОВКА СИСТЕМЫ +# ============================================ + +.PHONY: init check-node + +## init - Полная подготовка окружения после git clone +init: check-node deps + @echo "$(GREEN)Проект успешно инициализирован и готов к сборке!$(NC)" + @echo "Запустите '$(IMAGE_TARGET) make build' для сборки или 'make run' для запуска." + +# Проверка установленного Node.js и npm +check-node: + @echo "$(YELLOW)Проверка окружения...$(NC)" + @which node > /dev/null 2>&1 || (echo "$(RED)❌ Ошибка: Node.js не установлен!$(NC)" && echo "Установите его командой: sudo apt install nodejs npm" && exit 1) + @which npm > /dev/null 2>&1 || (echo "$(RED)❌ Ошибка: npm не установлен!$(NC)" && exit 1) + @echo "$(GREEN) Node.js и npm найдены.$(NC)" + # ============================================ # ОСНОВНЫЕ ЦЕЛИ # ============================================ @@ -93,10 +111,11 @@ lint: ## deps - Установка зависимостей deps: - @echo "$(YELLOW)Установка зависимостей...$(NC)" - @go mod download - @go mod tidy - @cd $(WEB_DIR) && npm install + @echo "$(YELLOW)Установка зависимостей Go...$(NC)" + go mod download + go mod tidy + @echo "$(YELLOW)Установка npm-пакетов фронтенда (это может занять время)...$(NC)" + cd $(WEB_DIR) && npm install --progress=true --loglevel=info ## install - Установка бинарника в систему install: build diff --git a/Makefile.backup b/Makefile.backup deleted file mode 100644 index 3204ea8..0000000 --- a/Makefile.backup +++ /dev/null @@ -1,159 +0,0 @@ -# Makefile для GPIO Monitor Server - -.PHONY: all build clean run test fmt lint help install dev - -# Переменные -APP_NAME := gpio-monitor-server -CMD_PATH := ./cmd/server -BUILD_DIR := ./build -BINARY := $(BUILD_DIR)/$(APP_NAME) -WEB_DIR := ./cmd/server/web - -# Целевая платформа (по умолчанию) -GOOS ?= linux -GOARCH ?= arm64 - -# Флаги сборки -LDFLAGS := -ldflags="-s -w" - -# Цвета для вывода -RED := \033[0;31m -GREEN := \033[0;32m -YELLOW := \033[0;33m -NC := \033[0m # No Color - -# ============================================ -# ОСНОВНЫЕ ЦЕЛИ -# ============================================ - -all: help - -## build - Полная сборка проекта (фронтенд + бекенд) -build: build-frontend build-backend - @echo "$(GREEN)Сборка завершена!$(NC)" - @ls -lh $(BINARY) - -## build-frontend - Сборка TypeScript фронтенда -build-frontend: - @echo "$(YELLOW)Сборка TypeScript фронтенда...$(NC)" - @cd $(WEB_DIR) && \ - if [ ! -d "node_modules" ]; then \ - echo " Установка npm зависимостей..."; \ - npm install; \ - fi && \ - echo " Компиляция TypeScript..." && \ - npm run build && \ - echo "$(GREEN) TypeScript скомпилирован успешно!$(NC)" - -## build-backend - Сборка Go сервера -build-backend: - @echo "$(YELLOW)🔧 Сборка Go сервера...$(NC)" - @mkdir -p $(BUILD_DIR) - @echo " Целевая платформа: $(GOOS)/$(GOARCH)" - @GOOS=$(GOOS) GOARCH=$(GOARCH) go build $(LDFLAGS) -o $(BINARY) $(CMD_PATH) - @echo "$(GREEN) Go сервер скомпилирован успешно!$(NC)" - -## run - Запуск сервера (сборка + запуск) -run: build - @echo "$(YELLOW)Запуск сервера...$(NC)" - @$(BINARY) - -## dev - Режим разработки (без оптимизации, с hot-reload) -dev: - @echo "$(YELLOW) Режим разработки...$(NC)" - @go run $(CMD_PATH) -port :8080 - -## clean - Очистка артефактов сборки -clean: - @echo "$(YELLOW)Очистка...$(NC)" - @rm -rf $(BUILD_DIR) - @rm -rf $(WEB_DIR)/dist - @rm -rf $(WEB_DIR)/node_modules - @echo "$(GREEN) Очищено$(NC)" - -## test - Запуск тестов -test: - @echo "$(YELLOW)Запуск тестов...$(NC)" - @go test -v ./... - -## fmt - Форматирование кода -fmt: - @echo "$(YELLOW) Форматирование кода...$(NC)" - @go fmt ./... - @cd $(WEB_DIR) && npm run format 2>/dev/null || true - -## lint - Проверка кода -lint: - @echo "$(YELLOW) Проверка кода...$(NC)" - @golangci-lint run ./... 2>/dev/null || echo " Установите golangci-lint: go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest" - -## deps - Установка зависимостей -deps: - @echo "$(YELLOW) Установка зависимостей...$(NC)" - @go mod download - @go mod tidy - @cd $(WEB_DIR) && npm install - -## install - Установка бинарника в систему -install: build - @echo "$(YELLOW)Установка $(APP_NAME)...$(NC)" - @sudo cp $(BINARY) /usr/local/bin/$(APP_NAME) - @echo "$(GREEN) Установлено в /usr/local/bin/$(APP_NAME)$(NC)" - -## uninstall - Удаление из системы -uninstall: - @echo "$(YELLOW)Удаление $(APP_NAME)...$(NC)" - @sudo rm -f /usr/local/bin/$(APP_NAME) - @echo "$(GREEN)Удалено$(NC)" - -## help - Показать справку -help: - @echo "$(GREEN)GPIO Monitor Server - команды Makefile$(NC)" - @echo "" - @echo "Доступные команды:" - @awk '/^##/ { \ - cmd = $$0; \ - gsub(/^## /, "", cmd); \ - printf " $(GREEN)%-20s$(NC) %s\n", $$2, cmd \ - }' $(MAKEFILE_LIST) | sort - @echo "" - @echo "Примеры:" - @echo " make build - Полная сборка" - @echo " make run - Сборка и запуск" - @echo " make dev - Запуск в режиме разработки" - @echo " make clean - Очистка" - @echo " make install - Установка в систему" - -# ============================================ -# ДОПОЛНИТЕЛЬНЫЕ ЦЕЛИ -# ============================================ - -## build-arm64 - Сборка для ARM64 (Raspberry Pi) -build-arm64: - @$(MAKE) build GOOS=linux GOARCH=arm64 - -## build-amd64 - Сборка для AMD64 -build-amd64: - @$(MAKE) build GOOS=linux GOARCH=amd64 - -## build-mac - Сборка для macOS -build-mac: - @$(MAKE) build GOOS=darwin GOARCH=amd64 - -## build-windows - Сборка для Windows -build-windows: - @$(MAKE) build GOOS=windows GOARCH=amd64 - -## build-all - Сборка для всех платформ -build-all: build-arm64 build-amd64 build-mac build-windows - @echo "$(GREEN)Все платформы собраны$(NC)" - -## docker-build - Сборка Docker образа -docker-build: - @echo "$(YELLOW)Сборка Docker образа...$(NC)" - @docker build -t gpio-monitor:latest . - -## docker-run - Запуск в Docker -docker-run: - @echo "$(YELLOW)Запуск в Docker...$(NC)" - @docker run -p 8080:8080 gpio-monitor:latest diff --git a/README.md b/README.md index 3a42e5e..1fa01f8 100644 --- a/README.md +++ b/README.md @@ -151,11 +151,19 @@ sudo apt install -y golang git build-essential wiringpi nodejs npm git clone cd ~/work/golang -# Сборка TypeScript + Go -./build.sh +# Полная подготовка окружения (проверка Node.js, скачивание Go-модулей и npm-пакетов) +make init ``` -### 3. Настройка systemd сервиса +### 3. Сборка проекта +``` Bash +# Скомпилируйте TypeScript-фронтенд и Go-сервер одной командой: +make build +``` + +### 4. Настройка systemd сервиса + +Для постоянной работы сервера в фоновом режиме настройте систему инициализации. Поскольку сервер пишет логи в защищенную директорию /var/log/, его запуск и управление осуществляются через systemctl с правами администратора ```bash # Копировать сервисные файлы @@ -237,17 +245,17 @@ sudo nft add rule inet filter input iifname "wlan0" tcp dport 8080 accept ### Параметры командной строки -| Параметр | По умолчанию | Описание | -|----------|-------------|----------| -| `-pipe` | `/tmp/gpio_pipe` | Путь к FIFO pipe | -| `-port` | `:8080` | Порт веб-сервера | -| `-retention-hours` | `48` | Часы хранения логов (0 = отключено) | -| `-retention-mb` | `5000` | Максимальный размер логов в MB | -| `-retention-interval` | `15` | Интервал проверки retention (мин) | -| `-rotation-check-interval` | `1` | Интервал проверки ротации (мин) | -| `-buffer-size` | `10240` | Размер кольцевого буфера | -| `-human-log-interval` | `5` | Интервал записи human-логов (сек) | -| `-alert-cooldown` | `10` | Задержка между алертами (сек) | +| Параметр | По умолчанию | Описание | +|----------|------------------|--------------------| +| `-pipe` | `/tmp/gpio_pipe` | Путь к FIFO pipe | +| `-port` | `:8080` | Порт веб-сервера | +| `-retention-hours` | `48` | Часы хранения логов (0 = отключено) | +| `-retention-mb` | `5000` | Максимальный размер логов в MB | +| `-retention-interval` | `15` | Интервал проверки retention (мин) | +| `-rotation-check-interval` | `1` | Интервал проверки ротации (мин)| +| `-buffer-size` | `10240`| Размер кольцевого буфера | +| `-human-log-interval` | `5` | Интервал записи human-логов (сек) | +| `-alert-cooldown` | `10` | Задержка между алертами (сек) | | `-camera-url` | `http://127.0.0.1:1984/api/stream.mjpeg?src=cam_mjpeg` | URL MJPEG камеры | --- @@ -392,6 +400,41 @@ python3 scripts/emulator.py --- -### Сборка пакета +## Сборка и управление DEB-пакетом + +В проект добавлена возможность сборки нативного `.deb` пакета для Raspberry Pi OS. Пакет автоматически упаковывает скомпилированный Go-сервер, собранный TypeScript-фронтенд, скрипты логов, конфигурационные файлы и systemd-сервисы. + + +Сборка пакета выполняется одной командой. **Запуск от обычного пользователя (без sudo):** + ```bash make deb +``` + +После завершения файл пакета будет доступен по пути: ./build/gpio-monitor-server.deb + +Установка собранного пакета +После того как пакет собран, его можно установить в систему с помощью менеджера пакетов apt (он автоматически подтянет системные зависимости, если они требуются): + +```Bash +sudo apt install ./build/gpio-monitor-server.deb +``` + +Полезные команды для работы с пакетом +В Makefile предусмотрены дополнительные команды для проверки и очистки пакета перед деплоем: + +Просмотр информации о пакете (версия, архитектура, зависимости, описание): +```Bash +# Просмотр содержимого пакета, список файлов и папок: +make deb-info +``` +```Bash +# Очистка временных файлов сборки пакета: +make deb-contents +``` +```Bash +make deb-clean +sudo apt purge gpio-monitor-server +``` + +--- \ No newline at end of file diff --git a/build.sh b/build.sh old mode 100755 new mode 100644 diff --git a/scripts/emulatohackrf.sh b/scripts/emulatohackrf.sh old mode 100755 new mode 100644 diff --git a/scripts/view_logs.sh b/scripts/view_logs.sh old mode 100755 new mode 100644 diff --git a/start-server.sh b/start-server.sh old mode 100755 new mode 100644