Compare commits
2 Commits
d8312cd436
...
8dcaee3d61
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8dcaee3d61 | ||
|
|
5a9ce4f5c4 |
27
Makefile
27
Makefile
@@ -24,6 +24,24 @@ GREEN := \033[0;32m
|
|||||||
YELLOW := \033[0;33m
|
YELLOW := \033[0;33m
|
||||||
NC := \033[0m # No Color
|
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 - Установка зависимостей
|
||||||
deps:
|
deps:
|
||||||
@echo "$(YELLOW)Установка зависимостей...$(NC)"
|
@echo "$(YELLOW)Установка зависимостей Go...$(NC)"
|
||||||
@go mod download
|
go mod download
|
||||||
@go mod tidy
|
go mod tidy
|
||||||
@cd $(WEB_DIR) && npm install
|
@echo "$(YELLOW)Установка npm-пакетов фронтенда (это может занять время)...$(NC)"
|
||||||
|
cd $(WEB_DIR) && npm install --progress=true --loglevel=info
|
||||||
|
|
||||||
## install - Установка бинарника в систему
|
## install - Установка бинарника в систему
|
||||||
install: build
|
install: build
|
||||||
|
|||||||
159
Makefile.backup
159
Makefile.backup
@@ -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
|
|
||||||
76
README.md
76
README.md
@@ -9,7 +9,7 @@
|
|||||||
## Возможности
|
## Возможности
|
||||||
|
|
||||||
✅ Захват данных по GPIO interrupt (C + WiringPi)
|
✅ Захват данных по GPIO interrupt (C + WiringPi)
|
||||||
✅ FIFO pipe, а также stdin/stdout между C + WiringPi и Go Service
|
✅ FIFO pipe, а также stdin/stdout между C + WiringPi и Go Service
|
||||||
✅ Реализация кольцевого буфера чтения
|
✅ Реализация кольцевого буфера чтения
|
||||||
✅ HTTP API + Web Dashboard
|
✅ HTTP API + Web Dashboard
|
||||||
✅ **Автоматическая ротация** лог-файлов
|
✅ **Автоматическая ротация** лог-файлов
|
||||||
@@ -151,11 +151,19 @@ sudo apt install -y golang git build-essential wiringpi nodejs npm
|
|||||||
git clone <your-repo>
|
git clone <your-repo>
|
||||||
cd ~/work/golang
|
cd ~/work/golang
|
||||||
|
|
||||||
# Сборка TypeScript + Go
|
# Полная подготовка окружения (проверка Node.js, скачивание Go-модулей и npm-пакетов)
|
||||||
./build.sh
|
make init
|
||||||
```
|
```
|
||||||
|
|
||||||
### 3. Настройка systemd сервиса
|
### 3. Сборка проекта
|
||||||
|
``` Bash
|
||||||
|
# Скомпилируйте TypeScript-фронтенд и Go-сервер одной командой:
|
||||||
|
make build
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. Настройка systemd сервиса
|
||||||
|
|
||||||
|
Для постоянной работы сервера в фоновом режиме настройте систему инициализации. Поскольку сервер пишет логи в защищенную директорию /var/log/, его запуск и управление осуществляются через systemctl с правами администратора
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Копировать сервисные файлы
|
# Копировать сервисные файлы
|
||||||
@@ -237,17 +245,17 @@ sudo nft add rule inet filter input iifname "wlan0" tcp dport 8080 accept
|
|||||||
|
|
||||||
### Параметры командной строки
|
### Параметры командной строки
|
||||||
|
|
||||||
| Параметр | По умолчанию | Описание |
|
| Параметр | По умолчанию | Описание |
|
||||||
|----------|-------------|----------|
|
|----------|------------------|--------------------|
|
||||||
| `-pipe` | `/tmp/gpio_pipe` | Путь к FIFO pipe |
|
| `-pipe` | `/tmp/gpio_pipe` | Путь к FIFO pipe |
|
||||||
| `-port` | `:8080` | Порт веб-сервера |
|
| `-port` | `:8080` | Порт веб-сервера |
|
||||||
| `-retention-hours` | `48` | Часы хранения логов (0 = отключено) |
|
| `-retention-hours` | `48` | Часы хранения логов (0 = отключено) |
|
||||||
| `-retention-mb` | `5000` | Максимальный размер логов в MB |
|
| `-retention-mb` | `5000` | Максимальный размер логов в MB |
|
||||||
| `-retention-interval` | `15` | Интервал проверки retention (мин) |
|
| `-retention-interval` | `15` | Интервал проверки retention (мин) |
|
||||||
| `-rotation-check-interval` | `1` | Интервал проверки ротации (мин) |
|
| `-rotation-check-interval` | `1` | Интервал проверки ротации (мин)|
|
||||||
| `-buffer-size` | `10240` | Размер кольцевого буфера |
|
| `-buffer-size` | `10240`| Размер кольцевого буфера |
|
||||||
| `-human-log-interval` | `5` | Интервал записи human-логов (сек) |
|
| `-human-log-interval` | `5` | Интервал записи human-логов (сек) |
|
||||||
| `-alert-cooldown` | `10` | Задержка между алертами (сек) |
|
| `-alert-cooldown` | `10` | Задержка между алертами (сек) |
|
||||||
| `-camera-url` | `http://127.0.0.1:1984/api/stream.mjpeg?src=cam_mjpeg` | URL MJPEG камеры |
|
| `-camera-url` | `http://127.0.0.1:1984/api/stream.mjpeg?src=cam_mjpeg` | URL MJPEG камеры |
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -392,6 +400,42 @@ python3 scripts/emulator.py
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Сборка пакета
|
## Сборка и управление DEB-пакетом
|
||||||
|
|
||||||
|
В проект добавлена возможность сборки нативного `.deb` пакета для Raspberry Pi OS. Пакет автоматически упаковывает скомпилированный Go-сервер, собранный TypeScript-фронтенд, скрипты логов, конфигурационные файлы и systemd-сервисы.
|
||||||
|
|
||||||
|
|
||||||
|
Сборка пакета выполняется одной командой. **Запуск от обычного пользователя (без sudo):**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
make deb
|
make deb
|
||||||
|
```
|
||||||
|
|
||||||
|
После завершения файл пакета будет доступен по пути: ./build/gpio-monitor-server.deb
|
||||||
|
|
||||||
|
Установка собранного пакета
|
||||||
|
После того как пакет собран, его можно установить в систему с помощью менеджера пакетов apt (он автоматически подтянет системные зависимости, если они требуются):
|
||||||
|
|
||||||
|
```Bash
|
||||||
|
cd ./build
|
||||||
|
sudo dpkg -i gpio-monitor-server_1.0.0-1_arm64.deb
|
||||||
|
```
|
||||||
|
|
||||||
|
Полезные команды для работы с пакетом
|
||||||
|
В Makefile предусмотрены дополнительные команды для проверки и очистки пакета перед деплоем:
|
||||||
|
|
||||||
|
Просмотр информации о пакете (версия, архитектура, зависимости, описание):
|
||||||
|
```Bash
|
||||||
|
# Просмотр содержимого пакета, список файлов и папок:
|
||||||
|
make deb-info
|
||||||
|
```
|
||||||
|
```Bash
|
||||||
|
# Очистка временных файлов сборки пакета:
|
||||||
|
make deb-contents
|
||||||
|
```
|
||||||
|
```Bash
|
||||||
|
make deb-clean
|
||||||
|
sudo apt purge gpio-monitor-server
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
0
scripts/emulatohackrf.sh
Executable file → Normal file
0
scripts/emulatohackrf.sh
Executable file → Normal file
0
scripts/view_logs.sh
Executable file → Normal file
0
scripts/view_logs.sh
Executable file → Normal file
0
start-server.sh
Executable file → Normal file
0
start-server.sh
Executable file → Normal file
Reference in New Issue
Block a user