# Home-Stash
**Repository Path**: SpringShaw/Home-Stash
## Basic Information
- **Project Name**: Home-Stash
- **Description**: 家庭物资库存管理页,记录物品名称、存放位置与库存状态,支持低库存提醒与购物清单,方便居家收纳。
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-06-23
- **Last Updated**: 2026-07-14
## Categories & Tags
**Categories**: Uncategorized
**Tags**: NAS, Docker
## README
# 🏠 Home Stash
[English](./README.en.md) | **简体中文**
> 一个为家庭 NAS 设计的**轻量耗材库存管理系统**,支持**多用户操作留痕、微信/邮件自动提醒、数据库自动备份**,Docker 一键部署,同时兼容裸机 Linux。
## 界面预览
## 功能特性
### 📦 库存管理
- **6 大预设分类** — 婴儿/卫浴/厨房/日用/食品/医药,支持中英双语默认模板
- 📊 **实时库存看板** — 耗材总数、分类数、本月消费一目了然
- 🔴 **低库存高亮** — 库存低于阈值时红色警告,方便及时补货
- ➕➖ **快捷加减** — 手机端一键增加/减少库存,操作留痕
### 🛒 购物清单
- 一键从低库存添加至购物清单
- 标记已购/待购,出门采购不漏项
- 支持自定义条目(不限耗材库内物品)
### 📝 采购记录
- 采购入库时自动记录时间、数量、单价、来源
- 支持按分类统计消费,了解每月开支去向
### 👥 多用户体系
- 管理员 + 普通用户双角色
- 所有操作记录到人,支持按 IP 绑定免密登录
- 管理员可管理账号、配置系统设置
### 📨 智能提醒
- **微信推送** — 每天定时检查低库存,通过 OpenClaw 推送到微信
- **邮件通知** — 支持 SMTP 配置,低库存邮件提醒(支持 163/QQ 等邮箱)
- 管理员可手动触发推送/邮件
### 💾 自动备份
- 每天凌晨定时备份 SQLite 数据库
- 使用 SQLite 在线备份 API,安全无锁
- 保留最近 7 天,自动清理旧备份
### 🌐 中英双语
- 根据浏览器语言自动选择中文/英文界面
- 支持手动切换语言,localStorage 持久化
- 预设分类数据跟随 `APP_LANG` 环境变量选择语言(首次初始化时生效)
### 📱 响应式设计
- 手机 / 平板 / PC 全适配
- 底部 TabBar 导航,操作顺手
- 支持 PWA 添加至主屏幕
## 🚀 快速开始
### Docker Compose(推荐)
```bash
git clone https://github.com/SpringShaw/Home-Stash.git
cd home-stash
docker compose up -d --build
```
访问 `http://localhost:8081`
### 裸机 Linux 部署
```bash
git clone https://github.com/SpringShaw/Home-Stash.git
cd home-stash
# 安装依赖
pip install fastapi==0.115.0 "uvicorn[standard]==0.32.0" python-multipart==0.0.12 pydantic==2.9.0 bcrypt==4.2.1
# 配置账号(首次运行前)
export ADMIN_ID=admin
export ADMIN_NAME=管理员
export ADMIN_PASSWORD=your_password
# 启动服务
bash app/start.sh
```
数据默认存储在项目目录下的 `data/`、`logs/`、`backups/`,可通过环境变量自定义:
```bash
export DATA_DIR=/opt/home-stash/data
export LOG_DIR=/opt/home-stash/logs
export BACKUP_DIR=/opt/home-stash/backups
```
### 首次登录
在 `docker-compose.yml` 中配置管理员和普通用户的账号信息:
```yaml
environment:
- ADMIN_ID=你的管理员ID
- ADMIN_NAME=管理员昵称
- ADMIN_PASSWORD=管理员密码
- USER_ID=普通用户ID
- USER_NAME=用户昵称
- USER_PASSWORD=用户密码
```
> ⚠️ 如果不设置密码,系统会**自动生成随机密码**并打印到容器日志(仅首次)。请务必在日志中查看并保存。
### 英文预设数据
如果希望默认分类和耗材为英文,在 `docker-compose.yml` 中设置:
```yaml
environment:
- APP_LANG=en
```
> 注意:`APP_LANG` 仅在数据库首次初始化时生效。已初始化的数据不会因修改此变量而改变。
## ⚙️ 配置说明
| 环境变量 | 默认值 | 说明 |
|---------|--------|------|
| APP_LANG | zh | 预设数据语言,zh/中文 en/英文(仅首次初始化生效) |
| DATA_DIR | ./data | 数据库存储目录 |
| LOG_DIR | ./logs | 日志存储目录 |
| BACKUP_DIR | ./backups | 备份存储目录 |
| ADMIN_ID | (空) | 管理员账号 ID |
| ADMIN_NAME | 管理员 | 管理员昵称 |
| ADMIN_PASSWORD | (随机) | 管理员密码,留空则随机生成 |
| USER_ID | (空) | 普通用户账号 ID |
| USER_NAME | 用户 | 普通用户昵称 |
| USER_PASSWORD | (随机) | 普通用户密码,留空则随机生成 |
| WECHAT_TARGET | (空) | 微信推送目标 ID |
| WECHAT_ACCOUNT | (空) | OpenClaw 微信账号 ID |
| OPENCLAW_GATEWAY | http://127.0.0.1:33970 | OpenClaw Gateway 地址(Docker 中改为 `http://host.docker.internal:33970`) |
| NOTIFY_HOUR | 20 | 提醒时间(小时) |
| NOTIFY_MINUTE | 0 | 提醒时间(分钟) |
| TRUSTED_IPS | (空) | IP 白名单(逗号分隔) |
| TRUSTED_USER | (空) | 白名单默认登录用户 ID |
| BACKUP_HOUR | 3 | 自动备份时间(小时) |
| BACKUP_MINUTE | 0 | 自动备份时间(分钟) |
| COOKIE_SECURE | false | Cookie 是否仅 HTTPS 传输(生产环境建议 true) |
| CORS_ORIGINS | * | CORS 允许来源(逗号分隔) |
### 微信推送配置
1. 部署 OpenClaw Gateway
2. 配置微信机器人
3. 在 `docker-compose.yml` 中填入 `WECHAT_TARGET` 和 `WECHAT_ACCOUNT`
### 邮件通知配置
在系统设置页面配置 SMTP 信息。支持绝大部分邮箱(163、QQ、Gmail 等),需要开启 SMTP 服务并获取授权码。
## 📁 项目结构
```
home-stash/
├── app/
│ ├── main.py # FastAPI 入口(挂载路由 + 启动)
│ ├── database.py # 数据库连接、初始化、迁移
│ ├── auth.py # 认证:bcrypt 密码哈希、会话管理
│ ├── models.py # Pydantic 数据模型
│ ├── notifications.py # 通知服务(微信 + 邮件)
│ ├── scheduler.py # 定时任务(低库存微信推送)
│ ├── backup.py # 自动备份(每天备份 SQLite,保留 7 天)
│ ├── start.sh # 启动脚本(自适应 Docker / 裸机)
│ ├── routes/
│ │ ├── auth.py # 认证路由(含登录速率限制)
│ │ ├── admin.py # 管理员路由(设置/账号管理)
│ │ ├── categories.py # 分类路由
│ │ ├── items.py # 耗材路由(CRUD + 库存变动)
│ │ ├── shopping.py # 购物清单路由
│ │ ├── purchases.py # 采购记录 + 消费统计路由
│ │ ├── logs.py # 操作日志路由
│ │ └── notify.py # 通知路由
│ └── static/ # 前端(Vue3 + TailwindCSS)
│ ├── index.html # 主页面(中英双语)
│ ├── login.html # 登录页面(中英双语)
│ └── lib/ # 前端依赖库
├── docker-compose.yml
├── Dockerfile
└── deploy.sh
```
## 📡 API 接口
| 方法 | 路径 | 说明 |
|------|------|------|
| POST | /api/login | 用户登录 |
| POST | /api/logout | 用户登出 |
| GET | /api/me | 获取当前用户 |
| GET | /api/trusted-check | 检测 IP 是否在白名单 |
| GET | /api/categories | 获取分类列表 |
| POST | /api/categories | 添加分类 |
| DELETE | /api/categories/{id} | 删除分类(管理员) |
| GET | /api/items | 获取耗材列表 |
| POST | /api/items | 添加耗材 |
| PUT | /api/items/{id} | 更新耗材 |
| DELETE | /api/items/{id} | 删除耗材(管理员) |
| POST | /api/items/{id}/change | 更新库存(含采购入库) |
| GET | /api/shopping | 获取购物清单 |
| POST | /api/shopping | 添加购物清单 |
| PUT | /api/shopping/{id}/done | 标记已购 |
| DELETE | /api/shopping/{id} | 删除购物项 |
| GET | /api/purchases | 获取采购记录 |
| GET | /api/stats | 消费统计 |
| GET | /api/logs | 操作日志 |
| POST | /api/notify/check | 手动触发低库存提醒(管理员) |
| GET | /api/admin/settings | 获取系统设置(管理员) |
| POST | /api/admin/settings | 保存系统设置(管理员) |
| GET | /api/admin/accounts | 获取账号列表(管理员) |
| POST | /api/admin/accounts | 新增/修改账号(管理员) |
| DELETE | /api/admin/accounts/{id} | 删除账号(管理员) |
| GET | /api/health | 健康检查 |
## 🔧 常用维护命令
```bash
# 查看容器状态
docker ps | grep home-stash
# 重启服务
docker compose restart
# 停止服务
docker compose down
# 查看实时日志
docker logs -f home-stash
# 备份数据库
cp data/stash.db backups/stash_$(date +%Y%m%d).db
```
## 🌍 多语言支持
- 界面自动根据浏览器语言选择中文/英文
- 登录页和主页面均支持中英双语
- 预设数据支持中/英两套模板(通过 `APP_LANG` 环境变量控制)
- 用户手动切换语言后,选择会持久保存
## 📄 许可证
[MIT License](LICENSE)