Skip to content

监控面板

PasswordReset 提供独立的 Web 监控服务,用于集中查看所有客户端的密码修改状态。

架构说明

+------------------+     POST /api/report     +------------------+
|  Client 1        | -----------------------> |                  |
| (systemd timer)  |                          |  Monitor Server  |
+------------------+                          |  (Port 12396)    |
                                                |                  |
+------------------+     POST /api/report     |  +------------+  |
|  Client 2        | -----------------------> |  | PostgreSQL |  |
| (systemd timer)  |                          |  | / MySQL    |  |
+------------------+                          |  +------------+  |
                                                |                  |
+------------------+                           |  JWT Auth        |
|  Admin Browser   | <--- Web Panel (SPA) --- |  IP Whitelist    |
|  (Setup / Login) |                           +------------------+
+------------------+

存储模式

监控面板支持两种数据存储模式:

模式配置方式适用场景
JSON 文件(默认)不设置 DB_TYPE单机部署、测试环境
数据库设置 DB_TYPE=postgresDB_TYPE=mysql生产环境、多实例部署

支持的数据库:PostgreSQL(推荐)、MySQL / MariaDB

Docker 部署

监控面板推荐使用 Docker 部署,项目提供公共镜像开箱即用。

使用公共镜像

bash
docker run -d \
  --name passwordreset-monitor \
  --restart unless-stopped \
  --network host \
  -e TZ=Asia/Shanghai \
  -e DB_TYPE=postgres \          # 不设置则使用 JSON 文件模式
  -e DB_HOST=192.168.1.100 \
  -e DB_PORT=5432 \
  -e DB_USER=passwordreset \
  -e DB_PASS=your_password \
  -e DB_NAME=monitor \
  -v /etc/machine-id:/etc/machine-id:ro \
  -v /sys/class/dmi/id/product_uuid:/sys/class/dmi/id/product_uuid:ro \
  ccr.ccs.tencentyun.com/passwordreset/monitor:latest
参数说明
--network host使用宿主机网络,客户端上报时看到的是真实源 IP
-e DB_TYPEpostgresmysql,不设置则使用 JSON 文件
-e DB_*数据库连接参数,见下方环境变量表
-v /etc/machine-id:ro挂载宿主机机器 ID,保证设备码稳定
-v /sys/class/dmi/id/product_uuid:ro挂载宿主机产品 UUID,保证设备码稳定

JSON 文件模式需额外挂载数据目录:-v ./monitor_data:/var/lib/PasswordReset

数据库服务

项目提供开箱即用的 Docker Compose 文件:

bash
# PostgreSQL
docker compose -f docker-compose/DB/postgres.yml up -d

# MySQL
docker compose -f docker-compose/DB/mysql.yml up -d

环境变量

数据库配置

变量JSON 模式PostgreSQL 模式MySQL 模式
DB_TYPE不设置postgresmysql
DB_HOSTlocalhostlocalhost
DB_PORT54323306
DB_USERpostgrespostgres
DB_PASS(必填)(必填)
DB_NAMEmonitormonitor
DB_SSLMODEdisable

其他

变量默认值说明
TZAsia/Shanghai时区
LOG_DIR空(仅控制台)日志输出目录

手动创建数据库

使用 docker-compose/DB/ 目录下的 Compose 文件可自动创建,也可手动执行 SQL:

PostgreSQL

sql
-- 创建数据库(DB_NAME 按需替换为 monitor / license / builder)
CREATE DATABASE monitor;

-- 创建用户(PG_USER / PG_PASS 默认值均为 passwordreset)
CREATE USER passwordreset WITH PASSWORD 'passwordreset';
GRANT ALL PRIVILEGES ON DATABASE monitor TO passwordreset;

MySQL / MariaDB

sql
-- 创建数据库(DB_NAME 按需替换为 monitor / license / builder)
CREATE DATABASE monitor CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- 创建用户(MYSQL_USER / MYSQL_PASS 默认值均为 passwordreset)
CREATE USER 'passwordreset'@'%' IDENTIFIED BY 'passwordreset';
GRANT ALL PRIVILEGES ON monitor.* TO 'passwordreset'@'%';
FLUSH PRIVILEGES;

SQLite

无需手动创建,服务启动时自动在 /var/lib/PasswordReset/ 目录下生成 .db 文件。可在 env.sh 中通过 DB_TYPE=sqlite 启用。

Docker Compose 部署

完整的 Docker Compose 配置见 docker-compose/monitor/docker-compose.yml,同目录下 env.sh 文件可直接导入环境变量:

bash
# docker-compose/monitor/env.sh
# ===========================================
# PasswordReset Monitor 监控后台 - 环境变量配置
# ===========================================

# 时区(默认: Asia/Shanghai)
TZ="Asia/Shanghai"

# 日志目录(默认: /var/log/PasswordReset/monitor)
LOG_DIR="/var/log/PasswordReset/monitor"

# 数据库类型: postgres | mysql | sqlite(默认: postgres)
DB_TYPE="postgres"

# 数据库主机地址(默认: 127.0.0.1)
DB_HOST="127.0.0.1"

# 数据库端口(默认: 5432)
DB_PORT="5432"

# 数据库用户(默认: passwordreset)
DB_USER="passwordreset"

# 数据库密码
DB_PASS="passwordreset"

# 数据库名称(默认: monitor)
DB_NAME="monitor"

# PostgreSQL SSL 模式(默认: disable)
DB_SSLMODE="disable"
yaml
# =============================================================================
# PasswordReset Monitor 监控后台
# 访问端口: 12396  (Web 管理界面 + API)
# 功能: 监控客户端状态、导入授权码、管理 API Key、设备管理
# 数据库: 依赖外部数据库,通过 DB_TYPE 环境变量选择类型
# 网络: 使用 host 模式,确保客户端上报时源 IP 真实
# 使用方式:
#   1. 先启动数据库: docker compose -f ../DB/postgres.yml up -d
#   2. 再启动本服务: docker compose up -d
# 环境变量:
#   DB_TYPE        数据库类型: postgres | mysql | sqlite(默认: postgres)
#   MONITOR_DB_HOST  数据库地址(默认: 127.0.0.1)
#   MONITOR_DB_PORT  数据库端口(默认: 5432)
# 注意: 需挂载宿主机 machine-id 和 product_uuid 保证设备码稳定
# =============================================================================
services:
  monitor:                                     # Monitor 监控服务
    image: ccr.ccs.tencentyun.com/passwordreset/monitor:latest  # 公共镜像
    container_name: passwordreset-monitor      # 容器名称
    network_mode: host                         # 宿主机网络模式,源 IP 真实
    environment:
      - TZ=${TZ:-Asia/Shanghai}                # 时区
      - LOG_DIR=${MONITOR_LOG_DIR:-/var/log/PasswordReset/monitor}  # 日志目录
      - DB_TYPE=${DB_TYPE:-postgres}           # 数据库类型: postgres | mysql | sqlite
      - DB_HOST=${MONITOR_DB_HOST:-127.0.0.1}  # 数据库主机地址
      - DB_PORT=${MONITOR_DB_PORT:-5432}       # 数据库端口
      - DB_USER=${MONITOR_DB_USER:-passwordreset}  # 数据库用户
      - DB_PASS=${MONITOR_DB_PASS:-passwordreset}  # 数据库密码
      - DB_NAME=${MONITOR_DB_NAME:-monitor}    # 数据库名称
      - DB_SSLMODE=${DB_SSLMODE:-disable}      # PostgreSQL SSL 模式
    volumes:
      - ./db/monitor:/var/lib/PasswordReset    # 数据持久化
      - ./logs/monitor:/var/log/PasswordReset/monitor  # 日志持久化
      - /etc/machine-id:/etc/machine-id:ro     # 宿主机设备标识(只读)
      - /sys/class/dmi/id/product_uuid:/sys/class/dmi/id/product_uuid:ro  # 设备 UUID
    restart: unless-stopped                    # 容器退出策略

环境变量可通过同级目录下的 env.sh 文件配置,或直接设置系统环境变量覆盖默认值。

安装引导

部署后访问 http://<宿主机IP>:12396

  1. 首次访问:自动进入安装引导页,设置管理密码
  2. 已安装后:进入登录页,输入管理密码
  3. 登录后获取 JWT 令牌(有效期 24h),自动跳转仪表盘

授权管理

在 设置 > 授权管理 中导入授权码解锁高级功能。

IP 白名单

在 设置 > IP 白名单 中限制后台访问 IP。仅限制管理接口(客户端上报不受限),127.0.0.1 始终放行。

API Key 设置

在 设置 > 客户端上报 API Key 中设置。启用后客户端需携带 X-API-Key 请求头上报。

客户端上报配置

bash
sudo PasswordReset -service-install -hour=6 \
  -report-server=http://monitor.example.com:12396 \
  -report-api-key=my-secret-key    # 如未启用 API Key 可省略

上报内容:客户端 IP、主机名、最后修改密码时间、设备本地时间、账号列表。

仪表盘功能

  • 实时状态:在线/离线判断(5 分钟无上报视为离线)
  • 信息展示:IP、主机名、最后修改密码时间、账号列表
  • 搜索过滤:按 IP、主机名、用户名搜索
  • 自动刷新:每 30 秒自动刷新

版本限制

版本最大客户端API Key
免费版1不支持
专业版无限制支持
企业版无限制支持

生产环境建议

  • 使用 HTTPS 反向代理
  • 使用数据库模式替代 JSON 文件
  • 启用 IP 白名单
  • 定期备份数据库(含 ServerID 和授权信息)

基于 MIT 许可发布