跳转到内容

Baby Tracker

Baby Tracker 是一个面向家庭使用的轻量级婴儿记录应用,覆盖日常喂养、排泄、体重、疫苗、健康随访和倒数日等场景。项目默认自托管,数据保存在本机 SQLite 数据库中,支持手机浏览器、PWA 和 Home Assistant。

总览仪表盘

展示今日奶量、目标奶量、喂养次数和排泄次数,并提供可排序的快捷记录按钮。

趋势分析

查看体重、每日喂养量、辅食、排尿和排便趋势,以及单日 24 小时时段分布。

成长与日程

管理疫苗进度、健康随访、自定义项目和倒数日,并通过日历与列表查看状态。

数据管理

支持 CSV 导出、JSON 备份恢复、操作日志和用户权限管理。

  • 响应式布局,适合手机和桌面浏览器。
  • 页面切换与移动端底部导航。
  • 亮色、暗色主题。
  • 支持 PWA 安装与 Service Worker 缓存。
  • 登录会话默认有效期为 30 天。

FNOSP/Baby_tracker-fnos 是面向飞牛 fnOS 的社区版本,安装方式、版本差异和更新说明以该仓库文档为准。

打开飞牛版仓库

Baby Tracker 采用单体 Flask 应用,重点保持部署简单、数据可控和移动端体验稳定。

层级 实现
后端 Python 3.11、Flask 3.0、Werkzeug
数据存储 SQLite,启用 WAL 模式和查询索引
页面渲染 Jinja2 模板
前端 原生 JavaScript、Tailwind CSS CDN
图表与图标 Chart.js、Lucide
PWA Web App Manifest、Service Worker
生产服务 Gunicorn,监听 0.0.0.0:5000
容器与发布 Docker、GitHub Actions、GHCR、Docker Hub

应用、模板和静态资源打包在同一个容器中。运行数据固定写入 data/baby.db,因此部署时只需要挂载一个持久化目录。这样既适合 NAS 和家用服务器,也便于迁移和备份。

  • SQLite 启用 WAL 模式,运行期间可能同时出现 baby.db-wal 和 baby.db-shm。
  • 推荐使用管理面板的 JSON 备份;直接复制数据库文件前应先停止容器。
  • 生产环境必须设置随机 SECRET_KEY,并修改默认管理员密码。
  • 不建议将服务直接暴露到公网。远程访问优先使用 HTTPS 反向代理、VPN 或可信网络。
  • Home Assistant API 密钥建议存放在 secrets.yaml,不要写入公开配置。
.
├── app.py # 应用入口、数据库初始化、页面路由和 REST API
├── templates/ # 四个主要功能页面及登录、注册页
├── static/ # 样式、页面脚本、PWA 清单和 Service Worker
├── docs/ # Home Assistant 与业务计划源数据
├── tests/ # API 回归测试
├── data/ # 运行时 SQLite 数据,不提交到 Git
└── .github/workflows/ # 镜像构建与发布

推荐使用 GHCR 镜像,通过 Docker Compose 运行。宿主机 ./data 目录会挂载到容器的 /app/data,数据库和备份都保存在这里。

services:
baby-tracker:
container_name: baby_tracker
image: ghcr.io/xigemax/baby_tracker:latest
ports:
- "8964:5000"
volumes:
- ./data:/app/data
environment:
TZ: Asia/Shanghai
SECRET_KEY: "please-change-this-secret-key"
restart: unless-stopped
终端窗口
docker compose up -d

启动后访问 http://<服务器地址>:8964。更新镜像时运行:

终端窗口
docker compose pull
docker compose up -d

推荐使用 Python 3.11:

终端窗口
python3.11 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
export SECRET_KEY="local-development-secret"
python app.py

开发服务器监听 0.0.0.0:5000。app.py 直接运行时启用 Flask 调试模式,不应直接用于生产环境。

变量 默认值 说明
SECRET_KEY 示例值 Flask 会话签名密钥,生产环境必须替换
TZ Asia/Shanghai 容器时区,影响记录时间和日期统计
FLASK_APP app.py Flask CLI 使用的应用入口

运行数据库固定为 data/baby.db。Docker 部署必须挂载 /app/data,否则重建容器后数据会丢失。

终端窗口
python -m unittest -v

测试使用临时数据库,不会修改正常运行时的 data/baby.db。

更多配置、Home Assistant 集成和 API 说明请查看 主仓库。