# EdgeLiteGateway
**Repository Path**: hejun5448/EdgeLiteGateway
## Basic Information
- **Project Name**: EdgeLiteGateway
- **Description**: EdgeLiteGateway 是一个全异步架构的轻量级边缘计算物联网网关,支持多种工业协议接入、规则引擎、告警系统、时序数据存储和北向平台对接,适用于工业物联网、智慧园区、设备监控等边缘计算场景。
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 3
- **Created**: 2026-05-07
- **Last Updated**: 2026-05-07
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# ⚡ EdgeLiteGateway
### 轻量级边缘计算物联网网关 —— 让设备接入像插U盘一样简单
[!\[License\](https://img.shields.io/badge/license-GPL--3.0-blue.svg null)](LICENSE)
[!\[Python\](https://img.shields.io/badge/python-3.11%2B-3776AB?logo=python\&logoColor=white null)](https://www.python.org/)
[!\[FastAPI\](https://img.shields.io/badge/FastAPI-0.110%2B-009688?logo=fastapi\&logoColor=white null)](https://fastapi.tiangolo.com/)
[!\[Vue\](https://img.shields.io/badge/Vue-3.4%2B-4FC08D?logo=vue.js\&logoColor=white null)](https://vuejs.org/)
[!\[Version\](https://img.shields.io/badge/version-1.0.0-community-brightgreen.svg null)](https://github.com/suoten/EdgeLiteGateway)
[!\[Docker\](https://img.shields.io/badge/Docker-Ready-2496ED?logo=docker\&logoColor=white null)](https://www.docker.com/)
**🇨🇳 国内首个开源 Python 边缘计算网关 | 🎯 22 种工业协议开箱即用 | 📹 视频物联网一体化 | 🚀 10 分钟 Docker 部署**
[快速开始](#-快速开始) · [功能特性](#-功能特性) · [安装部署](#-安装部署) · [技术架构](#-技术架构) · [版本对比](#-版本与路线图) · [技术支持](#-技术支持)
***
## 🌟 为什么选择 EdgeLiteGateway?
> **如果你正在寻找一个轻量、易用、功能完整的边缘计算网关,EdgeLiteGateway 就是为你而生的。**
| 特性 | EdgeLiteGateway | 传统 C/Java 网关 |
| :---------- | :-------------: | :----------: |
| **开发新驱动** | 🐍 Python 30 分钟 | C/Java 数天 |
| **内存占用** | < 512MB | 1-4GB |
| **部署方式** | 单容器 / 树莓派 | 专用服务器 |
| **视频接入** | ✅ GB28181 一体化 | ❌ 需额外平台 |
| **Web 管理** | ✅ 现代化 Vue 3 界面 | ❌ 命令行或简陋 UI |
| **规则引擎** | ✅ 内置,可视化配置 | ❌ 需外部引擎 |
| **AI/数据分析** | ✅ Python 生态天然支持 | ❌ 集成困难 |
| **学习曲线** | 🟢 低,Python 全栈 | 🔴 高,多语言混合 |
### 四大核心优势
#### 🐍 Python 生态 — 开发者群体最大
Python 是全球开发者最多的语言之一。30 分钟即可开发新驱动,丰富的 AI/数据分析库(NumPy、Pandas、ONNX Runtime)天然可用,无需跨语言桥接。
#### 📹 视频物联网一体化 — 国内首创
通过 PyGBSentry 适配器接入 GB28181 视频流,实现传感器数据与视频监控的**统一管理**。在一个界面中同时查看设备运行数据和现场视频画面,将传统割裂的安防监控与设备监控合二为一。
#### 🪶 极致轻量 — 树莓派即可运行
单容器运行,内存 < 512MB。无需专用服务器,树莓派、工控机、边缘盒子均可部署。Docker Compose 一键启动,10 分钟上线。
#### 🧩 开箱即用 — 22 种协议驱动
工业协议全覆盖:Modbus TCP/RTU、OPC UA、OPC DA、西门子 S7、三菱 MC、欧姆龙 FINS、Allen Bradley、FANUC CNC、MTConnect、托利多称重、DL/T 645、IEC 104、Sparkplug B、ABB/KUKA 机器人、ONVIF、串口设备、数据库接入、扫码枪、HTTP Webhook、MQTT Client、模拟器。
***
## 🚀 快速开始
```bash
# 1️⃣ 克隆仓库
git clone https://github.com/suoten/EdgeLiteGateway.git
cd EdgeLiteGateway
# 2️⃣ 构建前端
cd web && npm install && npm run build && cd ..
# 3️⃣ 一键启动
cd docker && docker compose up -d
# 4️⃣ 打开浏览器
# 👉 http://localhost:3000
# 🔑 首次登录请使用管理员账号(详见下方"默认账号"章节)
```
> 💡 **就这么简单!** Docker Compose 会自动启动后端、前端(Nginx)、InfluxDB、Mosquitto 所有服务。
***
## ✨ 功能特性
### 📡 协议驱动(22 种开箱即用)
| 协议 | 说明 | 适用场景 |
| ------------------ | ------------------------------------------ | ------------------------- |
| **Modbus TCP/RTU** | 工业标准协议,支持线圈/寄存器读写、设备发现、自动重连 | PLC、仪表、变频器 |
| **OPC UA** | 工业互联协议,支持节点浏览和订阅 | SCADA/MES 对接 |
| **OPC DA** | 经典 OPC 协议,支持 COM 接口数据访问 | 传统 Windows 工控 |
| **西门子 S7** | S7 系列 PLC 通信协议(snap7) | S7-200/300/400/1200/1500 |
| **三菱 MC** | 三菱 PLC MC 协议(pymcprotocol) | Q/L/FX 系列 |
| **欧姆龙 FINS** | 欧姆龙 PLC FINS 协议 | CJ/CP/NJ 系列 |
| **Allen Bradley** | AB PLC 通信协议(pylogix),支持 CIP/PCCC | ControlLogix/CompactLogix |
| **FANUC CNC** | 发那科数控系统(pyfanuc) | 数控机床 |
| **MTConnect** | 数控设备标准协议 | CNC 设备监控 |
| **托利多 (Toledo)** | 称重仪表协议,支持 TCP/Serial/MT-SICS | 称重系统 |
| **DL/T 645** | 电力部电表协议(2007版) | 智能电表 |
| **IEC 104** | 电力远动协议 | 电力系统 |
| **Sparkplug B** | 工业物联网 MQTT 规范 | IIoT 场景 |
| **KUKA 机器人** | EKRL 协议 | 工业机器人 |
| **ABB 机器人** | RWS REST API | 工业机器人 |
| **ONVIF** | 视频设备发现/RTSP/PTZ | 视频监控 |
| **MQTT Client** | 订阅设备数据主题,支持 JSON 解析 | IoT 设备 |
| **HTTP Webhook** | 设备主动 POST 数据,支持 Bearer/Basic 认证 | 第三方集成 |
| **串口设备** | RS232/RS485 串口通信,支持 Modbus RTU | 串口仪表 |
| **数据库接入** | MySQL/PostgreSQL/SQLite/MSSQL,SQL 查询作为测点 | 数据库数据源 |
| **扫码枪** | USB 串口扫码枪,自动帧解析 | 产线追溯 |
| **模拟器** | 内置模拟器,支持 fixed/sine/random\_walk/random 模式 | 开发测试 |
### 🧠 核心能力
| 能力 | 说明 |
| ---------------- | -------------------------------------------------------------------------- |
| **事件总线架构** | 基于 asyncio.Queue 的进程内事件总线,模块间完全解耦 |
| **异步采集调度** | 每设备独立 asyncio.Task,支持超时处理和批量写入,单核 1000+ 设备并发 |
| **规则引擎** | 多条件 AND/OR 逻辑、持续时间窗口、告警收敛、自动恢复 |
| **告警通知** | 钉钉(加签)、企业微信、邮件(SMTP)、自定义 Webhook 四种通知渠道 |
| **时序存储** | InfluxDB 异步写入 + SQLite 配置存储(SQLAlchemy 2.0 + Alembic 迁移) |
| **断网缓存** | InfluxDB 不可用时自动降级到 SQLite 队列(最大 10 万条),联网后续传 |
| **WebSocket 推送** | 实时数据、告警事件、设备状态三个频道,前端实时刷新 |
| **北向对接** | MQTT 转发、IoTSharp/ThingsBoard/华为云 IoTDA/ThingsCloud/ThingsPanel/自定义MQTT平台对接 |
| **内置服务** | MQTT Server(设备接入)、Modbus Slave(南向仿真) |
| **视频接入** | 通过 PyGBSentry 适配器接入 GB28181 视频流,支持云台控制 |
| **计算表达式** | 支持算术/逻辑/数学函数运算,变量引用 `${device.point}`,安全沙箱 |
| **数据预处理** | 死区滤波、滑动平均、时间聚合窗口,减少无效数据上报 |
| **MCP 协议** | Model Context Protocol 支持,提供工具/资源/提示模板三大能力 |
| **OTA 升级** | 远程检查更新、下载、SHA256 校验、应用、回滚全流程 |
| **Grafana 集成** | 自动创建数据源和仪表板,iframe 嵌入监控视图 |
| **审计日志** | 完整操作记录、完整性校验、CSV 导出、日志清理 |
| **多网关级联** | WebSocket 集成端点,支持子网关数据上报和反控 |
| **串口透传** | RS232/RS485 串口到 TCP 桥接,支持 IP 白名单和最大客户端数 |
| **插件热加载** | 自动发现插件目录,支持加载/重载/卸载,自定义驱动扩展 |
| **3D 数字孪生** | 基于 Three.js 的 3D 可视化展示,支持工厂车间/智慧园区/能源站场景 |
| **Web 组态** | 拖拽式组态编辑器,支持仪表盘/趋势图/开关/指示灯/文本组件 |
| **安全体系** | JWT 认证 + RBAC 权限(admin/operator/viewer 三角色)+ Token 刷新与吊销 |
| **Cython 加速** | 可选 Cython 编译 Modbus 映射和规则比较,3-10x 加速 |
| **结构化日志** | JSON 格式输出、日志轮转归档、上下文注入 |
### 🖥️ Web 管理界面
现代化 Vue 3 + Naive UI 界面,提供完整的可视化管理:
| 页面 | 功能 |
| ---------------- | ---------------------------------- |
| **仪表盘** | 设备/规则/告警统计、设备状态分布、协议分布、告警趋势、资源使用趋势 |
| **设备管理** | 设备 CRUD、测点读写、模拟器创建、设备发现、批量操作 |
| **设备详情** | 实时测点值、时序图表、视频监控+云台控制 |
| **规则管理** | 规则 CRUD、多条件组合、持续时间窗口、启用/禁用、规则测试 |
| **告警管理** | 告警列表、状态筛选、级别筛选、告警确认、实时推送 |
| **数据查询** | 时序数据查询、ECharts 图表、统计信息、CSV 导出 |
| **驱动配置** | 驱动列表、配置模板查看、设备发现 |
| **平台对接** | 平台列表、两步式添加、连接/断开、配置管理 |
| **表达式编辑器** | 表达式计算/验证/批量测试、函数列表、运算符参考 |
| **数据预处理** | 全局配置、测点级配置(死区/滤波/聚合) |
| **审计日志** | 日志查询、完整性校验、CSV 导出、日志清理 |
| **服务管理** | 服务总览、启用/停用、依赖安装、配置更新 |
| **MQTT Server** | 启停管理、连接数监控、配置更新 |
| **Modbus Slave** | 启停管理、寄存器映射、配置更新 |
| **串口透传** | 启停管理、流量统计 |
| **OTA 升级** | 检查更新、应用更新、版本回滚 |
| **Grafana 集成** | 服务管理、仪表板列表、iframe 嵌入 |
| **MCP Server** | 工具/资源/提示模板管理、API Key 管理 |
| **用户管理** | 用户 CRUD、角色分配、密码管理 |
| **3D 数字孪生** | Three.js 3D 场景、设备可视化、实时数据 |
| **Web 组态** | 拖拽编辑器、组件绑定、预览模式、项目保存 |
***
## 📦 安装部署
本项目为**前后端分离**架构:
- **后端**(`src/edgelite/`):FastAPI 提供 REST API + WebSocket
- **前端**(`web/`):Vue 3 单页应用,需构建为静态文件
***
### 方式一:Docker Compose(推荐,10 分钟上线)
一键启动后端、前端(Nginx)、InfluxDB、Mosquitto 所有服务。
#### 前置条件
- Docker 20.10+
- Docker Compose 2.0+
- Node.js 18+(仅构建前端时需要)
**最低硬件要求**:
| 资源 | 最低配置 | 推荐配置 |
| ------ | ------- | -------- |
| CPU | 1 核 | 2 核+ |
| 内存 | 1 GB | 2 GB+ |
| 磁盘 | 2 GB | 10 GB+ |
| 操作系统 | Linux/Windows/macOS | Linux (Ubuntu 20.04+) |
> 💡 树莓派 4B (4GB) 即可流畅运行!
#### 步骤 1:克隆仓库并构建前端
```bash
# 1.1 克隆仓库
git clone https://github.com/suoten/EdgeLiteGateway.git
cd EdgeLiteGateway
# 1.2 安装前端依赖并构建
cd web
npm install
npm run build
cd ..
# 构建完成后,web/dist/ 目录即为前端静态文件
```
> **Windows 用户注意**:如果 `npm install` 卡住,可以尝试 `npm install --registry https://registry.npmmirror.com`
#### 步骤 2:配置环境变量
```bash
# 2.1 复制环境变量示例文件
cp .env.example .env
# 2.2 编辑 .env 文件,修改以下关键配置(生产环境必须修改!)
# INFLUXDB_TOKEN=your-secure-influxdb-token # InfluxDB API Token,建议 48 位以上随机字符串
# INFLUXDB_PASSWORD=your-influxdb-admin-password # InfluxDB 管理员密码
# SECRET_KEY=your-jwt-secret-key-at-least-32-chars # JWT 签名密钥,至少 32 位随机字符串
# 快速生成安全密钥(可选)
python -c "import secrets; print(secrets.token_urlsafe(32))" # 用于 SECRET_KEY
python -c "import secrets; print(secrets.token_urlsafe(48))" # 用于 INFLUXDB_TOKEN
```
#### 步骤 3:启动所有服务
```bash
# 3.1 进入 docker 目录并启动
cd docker
docker compose up -d
# 3.2 查看服务状态
docker compose ps
# 3.3 查看后端日志(排查问题用)
docker compose logs -f edgelite
# 3.4 查看 InfluxDB 日志
docker compose logs -f influxdb
```
#### 步骤 4:验证部署
| 服务 | 访问地址 | 说明 |
| ----------- | ---------------------------- | ------------------ |
| Web 管理界面 | | 前端 Nginx 服务 |
| API 文档 | | FastAPI Swagger UI |
| InfluxDB UI | | 时序数据库管理界面 |
> 首次登录请使用管理员账号,详见下方"默认账号"章节
> ⚠️ **首次启动注意事项**:
> 1. InfluxDB 首次启动需要约 30 秒完成初始化(创建 org/bucket/token),期间后端日志可能出现 `InfluxDB connection refused`,这是正常的,后端会自动降级到 SQLite 缓存模式
> 2. 等待约 1 分钟后所有服务就绪,刷新页面即可正常使用
> 3. 如果 1 分钟后仍有问题,检查 InfluxDB 状态:`docker compose logs influxdb | tail -20`
> 4. Mosquitto MQTT Broker 默认允许匿名连接(开发用途),生产环境请配置认证
#### Docker Compose 服务说明
| 服务 | 容器名 | 内部端口 | 说明 |
| --------- | ------------------ | --------- | -------------------- |
| edgelite | edgelite-gateway | 8080 | 主服务(API + WebSocket) |
| frontend | edgelite-frontend | 80 → 3000 | Nginx 前端静态文件服务 |
| influxdb | edgelite-influxdb | 8086 | 时序数据库 |
| mosquitto | edgelite-mosquitto | 1883 | MQTT Broker |
#### 常用 Docker 命令
```bash
# 停止所有服务
docker compose down
# 停止并删除数据卷(谨慎!会清空时序数据)
docker compose down -v
# 重启单个服务
docker compose restart edgelite
# 进入后端容器调试
docker compose exec edgelite sh
# 查看资源占用
docker stats
```
***
### 方式二:本地开发(前后端分离运行)
适合二次开发,前后端独立运行,前端通过代理访问后端。
#### 前置条件
- Python 3.11+
- Node.js 18+
- InfluxDB 2.x(本地或 Docker 运行)
- Mosquitto(可选,用于 MQTT 功能测试)
#### 步骤 1:启动后端
```bash
# 1.1 进入项目根目录
cd EdgeLiteGateway
# 1.2 创建 Python 虚拟环境(强烈推荐)
python -m venv venv
# Linux/macOS:
source venv/bin/activate
# Windows:
# venv\Scripts\activate
# 1.3 安装后端依赖(含开发依赖)
pip install -e ".[dev]"
# 1.4 复制环境变量模板并编辑
cp .env.example .env
# 编辑 .env 文件,重点修改:
# - EDGELITE_SECURITY__SECRET_KEY(至少 32 位随机字符串,生产环境必须修改!)
# - EDGELITE_INFLUXDB__TOKEN(InfluxDB API Token)
# 快速生成密钥: python -c "import secrets; print(secrets.token_urlsafe(32))"
# 1.5 复制并编辑配置文件
cp configs/config.example.yaml configs/config.yaml
# 编辑 configs/config.yaml,重点修改:
# - security.secret_key(至少 32 位随机字符串,也可通过 .env 设置)
# - influxdb.token(InfluxDB API Token,也可通过 .env 设置)
# 1.6 初始化数据库(创建 SQLite 表结构和默认 admin 用户)
python scripts/init_db.py
# 1.7 启动后端服务(默认端口 8080,热重载模式)
python -m edgelite --host 0.0.0.0 --port 8080 --reload
```
#### 步骤 2:启动前端
```bash
# 2.1 另开一个终端,进入前端目录
cd EdgeLiteGateway/web
# 2.2 安装前端依赖
npm install
# 2.3 启动开发服务器(默认端口 3000,带 API 代理)
npm run dev
```
#### 访问地址
- Web 管理界面:`http://localhost:3000`
- API 文档:`http://localhost:8080/docs`
***
### 方式三:生产部署(宝塔面板 / Nginx)
生产环境推荐用 Nginx 反向代理,前后端同域部署,支持 HTTPS。
#### 前置条件
- Linux 服务器(Ubuntu 20.04+ / CentOS 7+ / Debian 11+)
- Python 3.11+
- Nginx 1.18+
- InfluxDB 2.x
- Mosquitto(可选)
#### 步骤 1:部署后端
```bash
# 1.1 创建应用目录
sudo mkdir -p /opt/edgelite
sudo chown $USER:$USER /opt/edgelite
cd /opt/edgelite
# 1.2 克隆代码
git clone https://github.com/suoten/EdgeLiteGateway.git .
# 1.3 创建 Python 虚拟环境并安装依赖
python3.11 -m venv venv
source venv/bin/activate
pip install -e .
# 1.4 复制并编辑配置
cp configs/config.example.yaml configs/config.yaml
cp .env.example .env
# 编辑 configs/config.yaml,重点修改:
# - security.secret_key: "your-32-char-random-string-here"
# - influxdb.url: "http://localhost:8086"
# - influxdb.token: "your-influxdb-token"
# - logging.level: "WARNING" # 生产环境建议 WARNING
# 编辑 .env 文件,设置环境变量(可选,优先级高于 config.yaml)
```
#### 步骤 2:初始化数据库
```bash
# 2.1 初始化 SQLite 数据库和默认用户
python scripts/init_db.py
# 输出示例:
# Database initialized at data/edgelite.db
# Default user created: admin / admin123
```
#### 步骤 3:构建并部署前端
```bash
# 3.1 进入前端目录
cd /opt/edgelite/web
# 3.2 确认前端环境变量使用相对路径(同域部署)
# 文件:web/.env
# VITE_API_BASE_URL=/api/v1
# VITE_WS_BASE_URL=/ws/v1
# 3.3 安装依赖并构建
npm install
npm run build
# 3.4 复制构建产物到 Nginx 网站目录
sudo mkdir -p /var/www/edgelite
sudo cp -r dist/* /var/www/edgelite/
sudo chown -R www-data:www-data /var/www/edgelite
```
#### 步骤 4:配置 Nginx
```bash
# 4.1 复制 Nginx 配置
sudo cp nginx/edgelite.conf /etc/nginx/sites-available/edgelite
# 4.2 编辑配置,修改 server_name 为你的域名
sudo nano /etc/nginx/sites-available/edgelite
# 4.3 启用站点
sudo ln -s /etc/nginx/sites-available/edgelite /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
```
**Nginx 核心配置说明**:
```nginx
server {
listen 80;
server_name your-domain.com;
# 前端静态文件
location / {
root /var/www/edgelite;
index index.html;
try_files $uri $uri/ /index.html; # SPA 路由回退
}
# 后端 API 代理
location /api/ {
proxy_pass http://127.0.0.1:8080;
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;
proxy_connect_timeout 10s;
proxy_read_timeout 60s;
proxy_send_timeout 60s;
}
# WebSocket 代理(必须!用于实时数据推送)
location /ws/ {
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_read_timeout 86400s;
proxy_send_timeout 86400s;
}
# FastAPI 自动文档
location /docs {
proxy_pass http://127.0.0.1:8080;
}
location /redoc {
proxy_pass http://127.0.0.1:8080;
}
location /openapi.json {
proxy_pass http://127.0.0.1:8080;
}
}
```
> 完整 Nginx 配置参考 [nginx/edgelite.conf](nginx/edgelite.conf),宝塔面板详细步骤参考 [nginx/bt-panel.md](nginx/bt-panel.md)
#### 步骤 5:配置 Systemd 守护进程(强烈推荐)
```bash
# 5.1 创建 Systemd 服务文件
sudo tee /etc/systemd/system/edgelite.service > /dev/null << 'EOF'
[Unit]
Description=EdgeLiteGateway - 轻量级边缘计算物联网网关
After=network.target influxdb.service mosquitto.service
Wants=influxdb.service mosquitto.service
[Service]
Type=simple
User=edgelite
Group=edgelite
WorkingDirectory=/opt/edgelite
EnvironmentFile=/opt/edgelite/.env
ExecStart=/opt/edgelite/venv/bin/python -m edgelite --host 127.0.0.1 --port 8080
Restart=always
RestartSec=5
LimitNOFILE=65536
StandardOutput=journal
StandardError=journal
SyslogIdentifier=edgelite
# 安全加固
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=true
ReadWritePaths=/opt/edgelite/data /opt/edgelite/logs /opt/edgelite/backups
[Install]
WantedBy=multi-user.target
EOF
# 5.2 创建专用用户
sudo useradd -r -s /bin/false edgelite
# 5.3 设置目录权限
sudo chown -R edgelite:edgelite /opt/edgelite
# 5.4 创建必要目录
sudo mkdir -p /opt/edgelite/data /opt/edgelite/logs /opt/edgelite/backups
sudo chown -R edgelite:edgelite /opt/edgelite/data /opt/edgelite/logs /opt/edgelite/backups
# 5.5 启动并启用开机自启
sudo systemctl daemon-reload
sudo systemctl enable edgelite
sudo systemctl start edgelite
# 5.6 查看状态
sudo systemctl status edgelite
# 5.7 查看日志
sudo journalctl -u edgelite -f
```
#### 步骤 6:配置 HTTPS(强烈推荐)
```bash
# 6.1 安装 Certbot
sudo apt install certbot python3-certbot-nginx # Ubuntu/Debian
# sudo yum install certbot python3-certbot-nginx # CentOS
# 6.2 申请并自动配置 SSL 证书
sudo certbot --nginx -d your-domain.com
# 6.3 证书自动续期已默认启用,可手动测试
sudo certbot renew --dry-run
```
#### 步骤 7:生产环境安全检查清单
| 序号 | 检查项 | 命令/操作 |
| :-: | ----------------- | -------------------------------------------------------------- |
| 1 | 修改 admin 默认密码 | Web 界面 → 用户管理 → 修改密码 |
| 2 | 配置强 secret\_key | `python -c "import secrets; print(secrets.token_urlsafe(32))"` |
| 3 | 配置 InfluxDB Token | 通过环境变量 `EDGELITE_INFLUXDB__TOKEN` 设置 |
| 4 | 限制 CORS 源 | 修改 `configs/config.yaml` 中 `server.cors_origins` |
| 5 | 启用 HTTPS | Certbot 自动配置 |
| 6 | 配置防火墙 | `ufw allow 80/tcp && ufw allow 443/tcp && ufw enable` |
| 7 | 设置日志级别为 WARNING | 修改 `configs/config.yaml` 中 `logging.level` |
| 8 | 禁用模拟器 | `simulator.auto_create: false` |
| 9 | 配置定时备份 | 参考下方备份脚本 |
| 10 | 禁用 root 运行 | Systemd 配置中指定 `User=edgelite` |
**访问地址**:
- Web 管理界面:`https://your-domain.com`
- API 文档:`https://your-domain.com/docs`
***
### 方式四:Windows 本地部署
```powershell
# 1. 克隆仓库
git clone https://github.com/suoten/EdgeLiteGateway.git
cd EdgeLiteGateway
# 2. 创建虚拟环境
python -m venv venv
venv\Scripts\activate
# 3. 安装依赖
pip install -e ".[dev]"
# 4. 复制配置
copy configs\config.example.yaml configs\config.yaml
# 5. 初始化数据库
python scripts\init_db.py
# 6. 启动后端
python -m edgelite --host 0.0.0.0 --port 8080
# 7. 另开终端启动前端
cd web
npm install
npm run dev
```
> Windows 生产部署建议使用 WSL2 + Docker Compose 方式,或部署到 Linux 服务器。
***
### 默认账号
| 用户名 | 密码 | 角色 | 权限 |
| ----- | -------- | --- | ---- |
| admin | admin123 | 管理员 | 全部权限 |
**⚠️ 生产环境请立即修改默认密码!**
***
## 🏗️ 技术架构
### 项目结构
```
EdgeLiteGateway/
├── src/edgelite/ # 后端源码
│ ├── api/ # REST API 路由(22 个模块,96 个端点)
│ ├── drivers/ # 协议驱动(22 种)
│ ├── engine/ # 核心引擎(事件总线/调度/规则/表达式/OTA/插件)
│ ├── models/ # Pydantic 数据模型 + SQLAlchemy ORM
│ ├── security/ # 安全模块(JWT/RBAC/密码/Token吊销)
│ ├── services/ # 业务服务层(9 个服务)
│ ├── storage/ # 存储层(SQLite/InfluxDB/缓存)
│ ├── platform/ # 北向平台对接(6 种平台)
│ └── _cython/ # Cython 加速模块(可选)
├── web/ # 前端源码(Vue 3 + Naive UI + TypeScript)
│ └── src/
│ ├── api/ # API 封装层(HTTP + WebSocket)
│ ├── views/ # 24 个页面组件
│ ├── components/ # 通用组件
│ ├── layouts/ # 布局组件
│ ├── stores/ # Pinia 状态管理
│ └── router/ # 路由配置
├── configs/ # 配置文件
├── docker/ # Docker 配置(Dockerfile + docker-compose.yml)
├── nginx/ # Nginx 反向代理配置 + 宝塔部署指南
├── tests/ # 测试用例(pytest + pytest-asyncio)
├── scripts/ # 工具脚本(init_db.py 等)
└── docs/ # 文档(架构/部署/开发/用户指南)
```
### 技术栈
#### 后端
| 技术 | 用途 | 版本 |
| -------------------------- | ----------------- | ------ |
| Python 3.11+ | 运行时 | ≥3.11 |
| FastAPI | Web 框架(异步原生,自动文档) | ≥0.110 |
| Pydantic | 数据校验与配置管理 | ≥2.6 |
| SQLAlchemy 2.0 + aiosqlite | SQLite 异步 ORM | ≥2.0 |
| Alembic | 数据库迁移 | - |
| InfluxDB Client | 时序数据库 | ≥1.44 |
| pymodbus | Modbus 协议 | ≥3.7 |
| aiomqtt | MQTT 客户端 | ≥2.1 |
| asyncua | OPC UA 客户端/服务端 | ≥1.1 |
| python-jose | JWT Token | ≥3.3 |
| passlib + bcrypt | 密码哈希 | ≥1.7 |
#### 前端
| 技术 | 用途 | 版本 |
| ---------- | -------- | ---- |
| Vue 3.4 | UI 框架 | ≥3.4 |
| TypeScript | 类型安全 | ≥5.0 |
| Naive UI | 组件库 | ≥2.0 |
| Pinia | 状态管理 | ≥2.0 |
| ECharts | 图表 | ≥5.0 |
| Three.js | 3D 可视化 | - |
| Axios | HTTP 客户端 | ≥1.6 |
| Vite | 构建工具 | ≥5.0 |
***
## ⚙️ 配置说明
### 1. 复制配置文件
```bash
cp configs/config.example.yaml configs/config.yaml
```
### 2. 环境变量(推荐用于生产环境)
复制环境变量示例文件:
```bash
# 后端环境变量
cp .env.example .env
# Docker 环境变量
cd docker && cp .env.example .env && cd ..
# 前端环境变量
cd web && cp .env.example .env && cd ..
```
支持 `EDGELITE_` 前缀的环境变量覆盖配置(两级嵌套用双下划线 `__` 分隔):
| 环境变量 | 对应配置项 | 说明 |
| -------------------------------- | --------------------- | --------------- |
| `EDGELITE_CONFIG` | - | 配置文件路径 |
| `EDGELITE_SERVER__HOST` | server.host | 监听地址 |
| `EDGELITE_SERVER__PORT` | server.port | 监听端口 |
| `EDGELITE_DATABASE__SQLITE_PATH` | database.sqlite\_path | SQLite 路径 |
| `EDGELITE_INFLUXDB__URL` | influxdb.url | InfluxDB 地址 |
| `EDGELITE_INFLUXDB__TOKEN` | influxdb.token | InfluxDB Token |
| `EDGELITE_INFLUXDB__ORG` | influxdb.org | InfluxDB 组织 |
| `EDGELITE_INFLUXDB__BUCKET` | influxdb.bucket | InfluxDB Bucket |
| `EDGELITE_MQTT__BROKER` | mqtt.broker | MQTT Broker 地址 |
| `EDGELITE_MQTT__PORT` | mqtt.port | MQTT Broker 端口 |
| `EDGELITE_SECURITY__SECRET_KEY` | security.secret\_key | JWT 签名密钥 |
| `EDGELITE_SECURITY__ALGORITHM` | security.algorithm | JWT 算法 |
| `EDGELITE_DRIVERS__CUSTOM_DIR` | drivers.custom_dir | 自定义驱动目录 |
| `EDGELITE_DRIVERS__AUTO_RELOAD` | drivers.auto_reload | 驱动自动重载 |
| `EDGELITE_LOGGING__LEVEL` | logging.level | 日志级别 |
示例:
```bash
export EDGELITE_CONFIG=/opt/edgelite/config.yaml
export EDGELITE_INFLUXDB__URL=http://influxdb:8086
export EDGELITE_INFLUXDB__TOKEN=your-secure-token
export EDGELITE_SECURITY__SECRET_KEY=$(python -c "import secrets; print(secrets.token_urlsafe(32))")
```
详细配置项参见 [configs/config.example.yaml](configs/config.example.yaml) 和 [.env.example](.env.example)。
***
## 📡 API 文档
启动服务后访问 FastAPI 自动文档:
- Swagger UI: `http://localhost:8080/docs`
- ReDoc: `http://localhost:8080/redoc`
### 主要端点
| 路由前缀 | 功能 |
| ----------------------- | ---------------------------- |
| `/api/v1/auth` | 认证(登录/刷新Token/登出/修改密码) |
| `/api/v1/devices` | 设备管理(CRUD/测点读写/发现/推送) |
| `/api/v1/rules` | 规则管理(CRUD/启用禁用/测试) |
| `/api/v1/alarms` | 告警管理(列表/确认) |
| `/api/v1/data` | 数据查询(时序查询/导出) |
| `/api/v1/video` | 视频接入(流获取/云台控制) |
| `/api/v1/system` | 系统管理(状态/备份/恢复) |
| `/api/v1/users` | 用户管理(CRUD) |
| `/api/v1/drivers` | 驱动配置(列表/配置模板/设备发现) |
| `/api/v1/platforms` | 平台对接(列表/连接/断开/状态) |
| `/api/v1/expressions` | 表达式管理(计算/验证/批量/函数列表) |
| `/api/v1/mcp` | MCP协议(工具调用/资源/提示模板/认证密钥CRUD) |
| `/api/v1/scada` | 组态管理(项目保存/加载/删除,服务端持久化) |
| `/api/v1/mqtt-server` | 内置MQTT Server(启停/状态/配置) |
| `/api/v1/modbus-slave` | 内置Modbus Slave(启停/状态/配置) |
| `/api/v1/preprocess` | 数据预处理(配置/死区滤波/滑动平均/聚合) |
| `/api/v1/serial-bridge` | 串口透传(启停/状态) |
| `/api/v1/ota` | OTA升级(检查/应用/回滚/备份) |
| `/api/v1/grafana` | Grafana集成(配置/仪表板/嵌入URL) |
| `/api/v1/audit` | 审计日志(查询/完整性校验/CSV导出/清理) |
| `/api/v1/integration` | 多网关级联(握手/状态) |
### WebSocket
```
ws://host:8080/ws/v1/realtime?token=xxx # 实时数据推送
ws://host:8080/ws/v1/alarm?token=xxx # 告警事件推送
ws://host:8080/ws/v1/device?token=xxx # 设备状态推送
ws://host:8080/ws/v1/integration?token=xxx # 级联数据推送
```
***
## 🔧 开发
```bash
# 安装开发依赖
pip install -e ".[dev]"
# 运行测试
pytest tests/ -v
# 代码检查
ruff check src/
# 格式化
ruff format src/
# 热重载开发
python -m edgelite --reload
```
详见 [CONTRIBUTING.md](CONTRIBUTING.md) 和 [docs/DEVELOPMENT.md](docs/DEVELOPMENT.md)。
***
## 🗺️ 版本与路线图
EdgeLiteGateway 采用三级版本体系,满足不同场景需求:
### 🆓 社区版 (v1.0) — 你正在这里
面向个人开发者、教育机构和中小型企业,提供完整的边缘计算网关基础能力。
| 模块 | 功能说明 |
| ---------- | ---------------------------------------------------------------- |
| **协议驱动** | 22 种工业协议开箱即用 |
| **内置服务** | MQTT Server(设备接入)、Modbus Slave(南向仿真) |
| **规则引擎** | 阈值告警、多条件 AND/OR 逻辑、持续时间窗口、告警收敛、自动恢复 |
| **告警通知** | 钉钉(加签)、企业微信、邮件 SMTP、自定义 Webhook |
| **时序存储** | InfluxDB 异步写入 + SQLite 断网缓存队列(最大 10 万条) |
| **视频接入** | 通过 PyGBSentry 适配器接入 GB28181 视频流,支持云台控制 |
| **北向对接** | IoTSharp、ThingsBoard、华为云 IoTDA、ThingsCloud、ThingsPanel、自定义MQTT平台 |
| **安全体系** | JWT 认证 + RBAC 三角色权限、bcrypt 密码哈希、Token 刷新与吊销 |
| **Web 管理** | Vue 3 + Naive UI 现代化界面,24 个功能页面 |
| **扩展能力** | 计算表达式引擎、Cython 可选加速、MCP 协议支持 |
### 🏢 企业版 (v1.2)
在社区版基础上,增加企业级特性和高阶协议支持,满足生产环境严苛要求。
| 新增模块 | 功能说明 |
| --------- | ------------------------------------------------- |
| **协议扩展** | BACnet 楼宇自控协议、OPC UA Server(暴露网关数据供 SCADA/MES 订阅) |
| **高可用** | 主备集群、健康检查、故障自动切换 |
| **审计日志** | 防篡改哈希链、异常登录检测、CSV 导出、完整性校验 |
| **身份集成** | LDAP / Active Directory 统一认证 |
| **国密安全** | SM2/SM4 国密算法加密,符合等保 2.0 要求 |
| **存储升级** | TDengine 国产时序数据库(更高压缩率、更低查询延迟) |
| **消息队列** | Kafka 北向对接,支持大规模数据流处理 |
| **数据库扩展** | 达梦数据库支持 |
### ☁️ 云边协同版 (v2.0)
面向集团型企业和智慧城市场景,实现多节点统一管理、边云协同和 AI 增强。
| 新增模块 | 功能说明 |
| ---------------- | ------------------------------------ |
| **K8s Operator** | Kubernetes 原生部署,自动扩缩容、滚动升级、配置管理 |
| **边云同步** | 边缘节点与云端平台双向数据同步,断网自治、联网续传 |
| **边缘 AI 推理** | 集成 ONNX Runtime,支持工业异常检测、预测性维护模型本地推理 |
| **集中管控** | 云端统一监控所有边缘节点状态、版本、配置 |
***
## 📄 许可证
[GPL-3.0](LICENSE) License
***
## ❓ 常见问题
### 安装相关
**Q:** **`npm install`** **卡住或报错怎么办?**
使用国内镜像源:
```bash
npm install --registry https://registry.npmmirror.com
```
**Q:** **`pip install`** **安装依赖失败?**
确保 Python 版本 >= 3.11,并尝试:
```bash
pip install -e ".[dev]" -i https://pypi.tuna.tsinghua.edu.cn/simple
```
**Q: Windows 上 Cython 编译失败?**
Cython 是可选加速模块,编译失败不影响运行。系统会自动回退到纯 Python 实现。如需编译,请安装 [Visual Studio Build Tools](https://visualstudio.microsoft.com/visual-cpp-build-tools/)。
**Q: `ModuleNotFoundError: No module named 'sqlalchemy'`?**
确保使用 `pip install -e ".[dev]"` 安装(而非仅 `pip install -r requirements.txt`),`pyproject.toml` 中已包含所有核心依赖。
**Q: Docker Compose 启动后前端页面空白?**
确保先构建前端再启动:
```bash
cd web && npm install && npm run build && cd ..
cd docker && docker compose up -d --build
```
### 运行相关
**Q: 后端启动报** **`InfluxDB connection failed`?**
InfluxDB 服务未就绪,后端会自动降级到 SQLite 缓存模式。检查 InfluxDB 是否运行:
```bash
docker compose ps influxdb
curl http://localhost:8086/health
```
**Q: 后端启动报** **`安全警告: JWT密钥使用默认值`?**
这是安全警告,开发环境可忽略。生产环境请设置环境变量:
```bash
export EDGELITE_SECURITY__SECRET_KEY=$(python -c "import secrets; print(secrets.token_urlsafe(32))")
```
或在 `.env` 文件中设置 `EDGELITE_SECURITY__SECRET_KEY=你的随机密钥`。
**Q: 前端 `npm run build` 报 `require is not defined`?**
确保 Node.js 版本 >= 18,且已安装最新依赖(`npm install`)。vite.config.ts 已使用 `createRequire` 兼容 ESM 模式。
**Q: WebSocket 连接失败?**
1. 确保 Nginx 配置了 `/ws/` 的 WebSocket 代理(参考上方 Nginx 配置)
2. 检查 Token 是否有效(WebSocket 连接需要 `?token=xxx` 参数)
3. 检查防火墙是否放行了对应端口
**Q: 设备创建后状态一直是"离线"?**
1. 检查设备连接配置(IP/端口/从站ID)是否正确
2. 确保网络可达:`ping <设备IP>` 或 `telnet <设备IP> <端口>`
3. 查看后端日志:`docker compose logs -f edgelite | grep error`
**Q: 告警通知不发送?**
1. 确认规则已启用
2. 确认通知渠道配置正确(钉钉 Webhook URL / 邮件 SMTP 服务器等)
3. 在 `configs/config.yaml` 中配置通知参数
**Q: MCP API Key 重启后丢失?**
v1.0 已支持密钥文件持久化(`data/mcp_keys.json`),确保 `data/` 目录有写入权限。
### 数据相关
**Q: 时序数据查询为空?**
1. 确认 InfluxDB 服务正常运行
2. 确认设备有数据写入:在设备详情页查看实时测点值
3. 检查查询时间范围是否正确
**Q: 如何备份数据?**
```bash
# 通过 API 创建备份
curl -X POST http://localhost:8080/api/v1/system/backup -H "Authorization: Bearer "
# 手动备份关键文件
cp -r data/ data_backup_$(date +%Y%m%d)/
```
**Q: 如何升级到新版本?**
```bash
# 1. 备份数据
cp -r data/ data_backup_$(date +%Y%m%d)/
# 2. 拉取最新代码
git pull origin master
# 3. 重新构建前端
cd web && npm install && npm run build && cd ..
# 4. 重启服务
cd docker && docker compose up -d --build
```
**Q: 如何添加自定义协议驱动?**
**方式一:使用自定义驱动目录(推荐,无需修改核心代码)**
1. 创建驱动文件,继承 `DriverPlugin` 类并实现必要方法
2. 在配置文件中指定自定义驱动目录:
```yaml
# configs/config.yaml
drivers:
custom_dir: /path/to/your/custom/drivers
```
或通过环境变量:
```bash
export EDGELITE_DRIVERS__CUSTOM_DIR=/path/to/your/custom/drivers
```
3. 重启服务,驱动将被自动发现和加载
**方式二:在内置驱动目录中添加**
1. 在 `src/edgelite/drivers/` 目录下创建新的驱动文件
2. 继承 `DriverPlugin` 类并实现 `start()`、`stop()`、`read_points()`、`write_point()` 方法
3. 在 `registry.py` 的 `_driver_modules` 列表中注册驱动
4. 重启服务即可自动加载
详见 [docs/DEVELOPMENT.md](docs/DEVELOPMENT.md) 中的驱动开发指南。
**Q: 如何配置 HTTPS?**
生产环境推荐使用 Nginx + Certbot 自动配置 SSL 证书,详见上方"方式三:生产部署"中的 HTTPS 配置步骤。
**Q: 支持哪些数据库?**
- 配置存储:SQLite(内置,零配置)
- 时序数据:InfluxDB 2.x(社区版)/ TDengine(企业版)
- 未来计划:DuckDB 嵌入式分析(企业版可选)
**Q: 如何查看系统日志?**
```bash
# Docker 部署
docker compose logs -f edgelite
# Systemd 部署
sudo journalctl -u edgelite -f
# 本地开发
# 日志输出到控制台,级别可在 configs/config.yaml 中调整
```
### 安全相关
**Q: 默认密码安全吗?**
默认账号 `admin/admin123` 仅用于初次登录,系统会提示修改密码。生产环境请务必修改:
1. Web 界面登录后,点击右上角头像 → 修改密码
2. 修改 `configs/config.yaml` 中的 `security.secret_key`
3. 通过环境变量 `EDGELITE_SECURITY__SECRET_KEY` 设置强密钥
**Q: 如何限制 CORS 访问?**
在 `configs/config.yaml` 中修改 `server.cors_origins`,仅允许指定域名访问:
```yaml
server:
cors_origins:
- "https://your-domain.com"
```
***
## 🔗 相关项目
| 项目 | 说明 | 仓库地址 |
| -------------------------------------------------- | -------------------------- | --------------------------------------------------------------------------------------------- |
| [ProtoForge](https://github.com/suoten/ProtoForge) | 物联网协议仿真与测试平台,17 种工业协议全链路仿真 | [Gitee](https://gitee.com/suoten/ProtoForge) · [GitHub](https://github.com/suoten/ProtoForge) |
***
## 💬 技术支持
- GitHub Issues:
- Gitee Issues:
- 作者邮箱:
**如果这个项目对你有帮助,请给个 ⭐ Star 支持一下!**
**你的 Star 是我们持续开发的动力!**