乐于分享
好东西不私藏

AI助力学校安全管理之灭火器巡检

AI助力学校安全管理之灭火器巡检

灭火器巡检系统 — 部署与使用教程


一、项目概述

灭火器巡检系统是一款轻量级 Web 应用,专为单位/学校的月度灭火器巡检工作设计。巡检人员用手机打开网页即可完成拍照、签名、提交,无需安装任何 App。

项目
详情
技术栈
Flask 3.x + SQLite + 纯 HTML/CSS/JS
部署方式
Docker 容器,一键脚本部署
运行环境
飞牛 NAS(或其他 Linux 主机)
访问方式
内网 IP:5000 或通过 frpc 内网穿透外网访问
数据库
SQLite,自动建表 + 自动升级兼容旧库

二、功能清单

模块
功能
说明
📸 巡检登记
手机拍照 + 手写签名
仅支持实时拍照,自动叠加防伪水印
📍 巡检位置
网格选择,增删可控
设置页管理,支持教学楼/宿舍楼等多点位
👤 巡检人
标签选择或手写输入
设置页管理巡检人名单
✅ 巡查结果
正常 / 异常
异常时弹出常见问题复选框 + 一键拨号报修
📊 记录查看
按月筛选,照片签名预览
点击图片可放大,支持打印
📋 领导报表
只读页面,统计概览
生成二维码贴在墙上,扫码即可查看
🔧 报修管理
异常自动创建报修单
支持维修处理→验收确认全流程
⚙️ 网页管理
增删位置和巡检人
无需改代码,网页直接操作

三、项目文件结构

fire-extinguisher-check/├── Dockerfile              # Docker 镜像定义├── requirements.txt        # Python 依赖(Flask, Pillow, Werkzeug)├── deploy.sh               # 一键部署脚本├── app.py                  # Flask 后端主程序├── .gitignore              # Git 忽略规则├── README.md               # 项目说明├── static/│   └── uploads/│       └── .gitkeep         # 占位文件└── templates/    ├── index.html           # 巡检登记主页    ├── records.html         # 巡检记录查看页    ├── report.html          # 领导报表页(只读)    └── settings.html        # 设置管理页

部署后自动生成的目录:

fire-extinguisher-check/└── data/                    # 数据目录(Docker 挂载,持久化)    ├── data.db              # SQLite 数据库    ├── config.json          # 配置文件(位置、巡检人列表)    └── uploads/             # 照片和签名存储

四、环境要求

环境
要求
操作系统
Linux(飞牛 NAS / CentOS / Ubuntu 等)
Docker
已安装并正常运行
网络
内网 5000 端口可访问;如需外网访问需配置内网穿透
浏览器
手机端 Chrome / Safari / 微信内置浏览器均可

五、部署到飞牛 NAS

5.1 上传项目文件

将项目文件夹上传到飞牛 NAS,例如:

/vol2/1000/docker/fire-extinguisher-check/

飞牛 NAS 文件管理:通过 SMB 共享(\\192.168.1.109)或 SFTP 客户端(如 WinSCP)上传。

5.2 SSH 登录 NAS 并部署

ssh 用户名@192.168.1.109# 进入项目目录cd /vol2/1000/docker/fire-extinguisher-check# 一键部署bash deploy.sh

deploy.sh 会自动完成以下 4 步:

[1/4] 创建 data/ 目录(数据库持久化)[2/4] 构建 Docker 镜像(基于 python:3.11-slim)[3/4] 停止并删除旧容器[4/4] 启动新容器,绑定 5000 端口,挂载 data/ 目录

5.3 手动部署(可选)

如果不想用 deploy.sh,可以手动执行:

cd /vol2/1000/docker/fire-extinguisher-check# 1. 创建数据目录mkdir -p data/uploads# 2. 构建镜像docker build -t fire-extinguisher-check .# 3. 启动容器docker run -d \    --name fire-extinguisher-check \    -p 5000:5000 \    -v /vol2/1000/docker/fire-extinguisher-check/data:/app/data \    --restart always \    fire-extinguisher-check

5.4 验证部署

浏览器打开 http://192.168.1.109:5000,应看到巡检登记页面。

查看运行状态:

docker logs fire-extinguisher-check    # 查看日志docker ps | grep fire-extinguisher     # 查看容器状态

六、内网穿透(外网访问)

内网穿透使用 frpc 服务,已配置文件 fire-extinguisher-check,代理内网 192.168.1.109:5000 到域名。

当前访问地址

http://firecheck.lepose.cn

frpc 配置示例

# 在 frpc 配置中添加[fire-extinguisher-check]type = httplocal_ip = 192.168.1.109local_port = 5000custom_domains = firecheck.lepose.cn

飞牛 NAS 已配置好 frpc,通过节点小宝 VIP 域名实现外网穿透。


七、使用教程

7.1 首次配置

  1. 浏览器打开 http://firecheck.lepose.cn/settings
  2. 添加巡检位置:输入位置名称(如"教学楼一楼东"),点击添加
  3. 添加巡检人:输入姓名(如"郑小强"),点击添加
  4. 点击「💾 保存配置」

位置和巡检人会保存到 data/config.json,重启容器不丢失。

7.2 每日巡检流程

  1. 📱 手机打开http://firecheck.lepose.cn
  2. 📍 选择位置 — 点击位置网格卡片
  3. 👤 输入姓名 — 点击预设标签或手写输入
  4. 📞 输入电话 — 必填,用于后续联系
  5. 📸 拍照上传 — 点击拍照区域调起摄像头,拍完自动叠加防伪水印
  6. ✍️ 手写签名 — 手指在签名区书写,点击「确认签名」
  7. 🔍 选择结果 — 正常 / 异常
    • 正常:直接提交
    • 异常:勾选问题(压力不够/瓶体损坏/超过有效期等)→ 可补充说明 → 点击红色「📞 立即报修」按钮拨号
  8. ✅ 提交巡检记录

重要规则:同一个位置 + 同一个月只能保留一条记录,新提交会覆盖旧记录。

7.3 查看记录

底部导航 → 📊 记录

  • 选择月份查看该月所有巡检记录
  • 点击照片可放大预览
  • 显示每个位置的巡检人、电话、巡查结果
  • 支持打印(浏览器打印功能)

7.4 领导报表

访问 http://firecheck.lepose.cn/report(无需登录,纯只读):

  • 选择月份
  • 绿点 = 已巡检,红点 = 未巡检
  • 显示巡检人、日期、照片、签名
  • 支持打印

可用「草料二维码」生成报表链接二维码,打印贴在墙上,扫码即看。

7.5 设置管理

底部导航 → ⚙️ 设置

功能
操作
添加位置
输入位置名称 → 点添加
删除位置
点击位置旁的 ✕ 按钮
添加巡检人
输入姓名 → 点添加
删除巡检人
点击姓名旁的 ✕ 按钮
保存配置
修改后务必点「💾 保存配置」

八、日常维护

8.1 查看运行状态

# 容器是否在运行docker ps | grep fire-extinguisher# 查看日志docker logs --tail 50 fire-extinguisher-check# 健康检查curl http://192.168.1.109:5000/api/health

8.2 重启容器

docker restart fire-extinguisher-check

8.3 数据备份

# 复制整个 data 目录cp -r /vol2/1000/docker/fire-extinguisher-check/data \      /vol2/1000/docker/fire-extinguisher-check/data_backup_$(date +%Y%m%d)

8.4 清除数据

# 方法一:删除 data.db(需重启容器)docker stop fire-extinguisher-checkrm /vol2/1000/docker/fire-extinguisher-check/data/data.dbdocker start fire-extinguisher-check# 容器启动后会自动创建新数据库# 方法二:直接清空表数据(推荐,保留结构)docker exec fire-extinguisher-check python -c "import sqlite3conn = sqlite3.connect('/app/data/data.db')conn.execute('DELETE FROM inspections')conn.execute('DELETE FROM repairs')conn.commit()print('已清空所有巡检和报修记录')conn.close()"

8.5 更新代码

当本地修改代码后,需要同步到 NAS:

# 1. 将更新文件上传到 NAS 项目目录(覆盖旧文件)# 2. 如果修改了 Python 代码或模板文件,重建镜像部署:cd /vol2/1000/docker/fire-extinguisher-checkbash deploy.sh# 3. 如果只修改了模板文件,可快速更新:docker cp /vol2/1000/docker/fire-extinguisher-check/templates/新文件.html \          fire-extinguisher-check:/app/templates/docker restart fire-extinguisher-check

九、常见问题

Q1:手机打开页面时提示"仅支持实时拍照"

原因:系统要求必须用摄像头实时拍摄,不能从相册选择旧照片。

解决:在摄像头界面拍新照片即可。这是防伪设计。

Q2:提交时报错「提交失败」

可能原因:

  1. 网络不稳定 — 尝试切换流量/WiFi
  2. 照片过大 — 系统已自动压缩到 800px/60% 品质,通常 < 200KB
  3. frpc 代理超时 — 稍后重试

排查:看浏览器 F12 控制台输出的详细错误信息。

Q3:打开页面显示空白或样式异常

解决:强制刷新浏览器(Ctrl+F5 或清除缓存)。

Q4:如何更换域名/访问地址?

修改 frpc 的 custom_domains 配置,指向新域名即可。

Q5:数据库字段错误 no such column: telephone

原因:升级了代码但数据库是旧结构。

解决:

# 重建容器(deploy.sh 会自动重建镜像)cd /vol2/1000/docker/fire-extinguisher-checkbash deploy.sh

或者手动添加缺失字段:

docker exec fire-extinguisher-check python -c "import sqlite3conn = sqlite3.connect('/app/data/data.db')try:    conn.execute('ALTER TABLE inspections ADD COLUMN telephone TEXT DEFAULT \"\" ')    conn.commit()except: passconn.close()"

Q6:如何查看所有容器占用的磁盘空间?

docker system df

十、技术细节

数据库结构

inspections 表:

字段
类型
说明
id
INTEGER PK
主键
date
TEXT
巡检日期
inspector
TEXT
巡检人
telephone
TEXT
联系电话
situation
TEXT
巡查结果(正常/异常)
location
TEXT
巡检位置
photo_path
TEXT
照片路径
signature_path
TEXT
签名图片路径
note
TEXT
备注
created_at
TIMESTAMP
创建时间

唯一索引:(月份, 位置) — 同月同位置覆盖更新

repairs 表:报修单全生命周期管理(待维修→维修中→已完成)。

安全特性

  • 拍照自动叠加时间+位置+巡检人水印(右下角半透明黑底白字)
  • EXIF 时间校验(30分钟内拍摄才接受)
  • 照片上传后压缩至 800px 宽、JPEG 60% 品质
  • 手写签名 Canvas 绘制,转为 PNG 存储

一点感悟
这次经历让我深刻体会到:AI 不是用来"替代"人的,是用来"放大"人的。
没有 AI,我一个数学老师不可能一上午做出一个全栈 Web 系统。但现在可以了。它帮我做了所有我不会做的事情——写代码、配服务器、调数据库,我只需要专注我擅长的事:知道学校安全需要什么。
这才是 AI 的正确打开方式:你出想法,它出方案;你提反馈,它改代码。
📝 小强老师 | 唐山市丰南区小集镇小集中学

相关学习资料