lite-alert
轻量webhook应用,支持接收消息并转发到邮箱、企业微信和异构webhook等
235
Lite-Alert 是一个前后端一体的轻量级消息通知服务。它默认使用内置 H2 文件数据库,单 JAR 即可启动;生产环境可切换 MySQL、PostgreSQL,以及兼容协议的 GaussDB、OceanBase。
核心目标是让业务系统用一个简单的 Webhook 调用,把结构化事件转成邮件、钉钉、飞书、企业微信或通用出站 Webhook 通知,并在后台完成鉴权、校验、转换、投递和审计追踪。
Namespace + Topic 暴露接入地址,支持 JSON Schema 校验、限流、IP 白名单和 traceId 追踪。frontend-maven-plugin 固定 Node/npm 版本并构建前端资源。项目已提供 Docker Compose 样例文件:
docker/docker-compose.ymldocker/.env.example从项目根目录启动:
cp docker/.env.example docker/.env
# 编辑 docker/.env,至少修改 JASYPT_ENCRYPTOR_PASSWORD / LITE_ALERT_JWT_SECRET / LITE_ALERT_APIKEY_PEPPER
docker compose -f docker/docker-compose.yml --env-file docker/.env up -d
也可以进入 docker 目录启动:
cd docker
cp .env.example .env
# 编辑 .env,至少修改 JASYPT_ENCRYPTOR_PASSWORD / LITE_ALERT_JWT_SECRET / LITE_ALERT_APIKEY_PEPPER
docker compose up -d
默认使用 H2 文件数据库,数据目录位于 docker/data。启动后访问:
http://localhost:8080
健康检查:
GET http://localhost:8080/api/health
在 docker/.env 中启用 MySQL 配置:
COMPOSE_PROFILES=mysql
LITE_ALERT_DATASOURCE_URL=jdbc:mysql://mysql:3306/lite_alert?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai&createDatabaseIfNotExist=true
LITE_ALERT_DATASOURCE_USERNAME=root
LITE_ALERT_DATASOURCE_PASSWORD=litealert
LITE_ALERT_DATASOURCE_DRIVER=com.mysql.cj.jdbc.Driver
LITE_ALERT_DATABASE_TYPE=mysql
MYSQL_ROOT_PASSWORD=litealert
然后执行:
docker compose up -d
在 docker/.env 中启用 PostgreSQL 配置:
COMPOSE_PROFILES=postgres
LITE_ALERT_DATASOURCE_URL=jdbc:postgresql://postgres:5432/lite_alert
LITE_ALERT_DATASOURCE_USERNAME=postgres
LITE_ALERT_DATASOURCE_PASSWORD=litealert
LITE_ALERT_DATASOURCE_DRIVER=org.postgresql.Driver
LITE_ALERT_DATABASE_TYPE=postgresql
POSTGRES_PASSWORD=litealert
GaussDB / OceanBase 可参考 docker/.env.example,分别使用 PostgreSQL / MySQL 兼容 JDBC 驱动与迁移脚本。
mvn -pl backend -am test -Dskip.frontend=true
cd frontend
npm run type-check
npm run build
mvn -pl backend -am package
不跳过前端时,Maven 会下载固定版本的 Node/npm,执行前端安装与构建,并把产物复制到后端静态资源目录。
默认通过请求头传递 ApiKey:
curl -X POST "http://localhost:8080/api/webhook/demo/order_paid" \
-H "Authorization: Bearer la_xxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"orderId":"ORD-1001","amount":99.5}'
如果 Topic 配置为 keyLocation=QUERY,也可通过 URL 参数传递:
curl -X POST "http://localhost:8080/api/webhook/demo/order_paid?key=la_xxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"orderId":"ORD-1001","amount":99.5}'
成功响应为 200 OK,表示请求已受理、投递任务已创建;实际投递结果可在后台审计或投递记录中查看。
lite-alert/
├── backend/ # Spring Boot 后端
│ └── src/main/java/io/litealert/
│ ├── auth/ # 登录、用户、JWT、角色与权限
│ ├── namespace/ # 命名空间
│ ├── topic/ # Topic、报文格式、通道模板
│ ├── apikey/ # ApiKey 生命周期与鉴权元数据
│ ├── notify/ # 通知目标、通知渠道、订阅、投递
│ ├── webhook/ # Webhook 接入、鉴权、限流、白名单
│ ├── admin/ # 系统设置、统计、审计
│ └── common/ # 通用配置、错误、加密、数据库、工具
├── frontend/ # Vue 3 前端
├── docker/ # Dockerfile、docker-compose、环境变量示例
└── docs/design/ # 系统设计文档
.env 中的三个密钥:JASYPT_ENCRYPTOR_PASSWORD、LITE_ALERT_JWT_SECRET、LITE_ALERT_APIKEY_PEPPER。LITE_ALERT_APIKEY_PEPPER 变更会导致所有现存 ApiKey 失效,除非执行专门迁移或统一轮换。Authorization 请求头。Content type
Image
Digest
sha256:05cdfcd0d…
Size
106.1 MB
Last updated
23 days ago
docker pull jevonsnotes/lite-alert