доработка Makefile

This commit is contained in:
Maxim
2026-07-03 11:12:35 +03:00
parent 51400a5762
commit 5a9ce4f5c4
7 changed files with 81 additions and 178 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -151,11 +151,19 @@ sudo apt install -y golang git build-essential wiringpi nodejs npm
git clone <your-repo>
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
```
---

0
build.sh Executable file → Normal file
View File

0
scripts/emulatohackrf.sh Executable file → Normal file
View File

0
scripts/view_logs.sh Executable file → Normal file
View File

0
start-server.sh Executable file → Normal file
View File