Appearance
监控面板
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=postgres 或 DB_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_TYPE | postgres 或 mysql,不设置则使用 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 | 不设置 | postgres | mysql |
DB_HOST | — | localhost | localhost |
DB_PORT | — | 5432 | 3306 |
DB_USER | — | postgres | postgres |
DB_PASS | — | (必填) | (必填) |
DB_NAME | — | monitor | monitor |
DB_SSLMODE | — | disable | — |
其他
| 变量 | 默认值 | 说明 |
|---|---|---|
TZ | Asia/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:
- 首次访问:自动进入安装引导页,设置管理密码
- 已安装后:进入登录页,输入管理密码
- 登录后获取 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 和授权信息)