PassNAT LogoPassNAT

自托管习惯追踪应用Beaver Habit Tracker,NAS极简部署内网穿透远程打卡

作者

小编

发布时间

Curving abstract shapes with an orange and blue gradient

Beaver Habit Tracker - 打造属于你的习惯养成系统


项目介绍

Beaver Habit Tracker 是一款自托管的习惯追踪应用,专为那些希望掌控自己数据的用户而设计。与市面上众多强调'目标设定'的应用不同,这款工具采用了更加简洁直观的方式,让你专注于每日的习惯打卡记录,通过可视化的连续打卡日历来激励自己坚持下去。

该项目基于 Python 和 NiceGUI 框架构建,界面简洁易用,支持本地数据存储、自定义日期列显示、iOS 独立应用模式等丰富功能。无论你是想要戒掉坏习惯,还是想要养成新的好习惯,Beaver Habit Tracker 都能帮你记录每一个坚持的瞬间。

项目地址:点我跳转


部署安装

如需在外也能随时打开项目进行打卡,建议配置内网穿透服务以便远程访问。可以前往 帕斯内网穿透 注册账号,这样即使在办公室或出门在外,也能轻松管理你的习惯记录。具体操作步骤可以 点我查看 内网穿透全平台上手攻略。

最快速上手 - Docker 单命令启动

打开你的 NAS 设备或任何支持 Docker 的系统,使用以下命令一键启动 Beaver Habit Tracker:

1docker run -d --name beaverhabits \
2 -u $(id -u):$(id -g) \
3 -e HABITS_STORAGE=USER_DISK \
4 -v ./beaver/:/app/.user/ \
5 -p 8080:8080 \
6 daya0576/beaverhabits:latest

等待容器启动完成后,在浏览器中访问 `http://你的设备IP:8080` 即可开始使用。


或者使用 Docker Compose 方式

如果你更习惯使用 Docker Compose,可以复制下列配置文件:

1services:
2 beaverhabits:
3 container_name: beaverhabits
4 user: 1000:1000
5 environment:
6 - HABITS_STORAGE=USER_DISK
7 - TRUSTED_LOCAL_EMAIL=your@email.com
8 - INDEX_HABIT_DATE_COLUMNS=5
9 - ENABLE_IOS_STANDALONE=true
10 volumes:
11 - ./beaver/:/app/.user/
12 ports:
13 - 8080:8080
14 restart: unless-stopped
15 image: daya0576/beaverhabits:latest

打开你的 NAS 设备或 Docker 管理面板,创建一个新的 Compose 配置文件,将上述内容粘贴进去。

环境变量说明:

必须设置:

TRUSTED_LOCAL_EMAIL:你的邮箱地址,用于跳过身份验证,直接登录应用

可选设置:

HABITS_STORAGE:数据存储方式,默认为 `USER_DISK`(本地 JSON 文件存储),也可选择 `DATABASE`(SQLite 数据库)

INDEX_HABIT_DATE_COLUMNS:自定义首页显示的日期列数,默认为 5

ENABLE_IOS_STANDALONE:启用 iOS 独立应用模式,方便在 iPhone 上使用

端口配置:

默认使用 `8080` 端口。如果你的系统中该端口已被占用,可以修改配置中的 `8080:8080` 部分。前面的数字是你访问时使用的外部端口,后面的 `8080` 是容器内部端口,保持不变即可。例如改为 `8888:8080`,则通过 `http://你的设备IP:8888` 访问。

存储配置:

项目会在 `./beaver/` 目录下存储你的所有习惯数据。请确保该目录存在,或者根据你的实际需求修改路径。建议在 NAS 中创建一个专门的文件夹用于存储这些数据。

启动完成后,在浏览器中输入 `http://你的设备IP:8080` 即可访问应用。首次进入时会要求输入邮箱,输入你在环境变量中设置的邮箱地址即可登录。


总结

通过以上步骤,你已经成功部署了自己的 Beaver Habit Tracker 习惯追踪系统。从现在开始,每一个坚持的日子都会被记录下来,那些连续的打卡日期会成为你坚持的证明。无论是健身、阅读、冥想还是学习,都可以在这个应用中追踪你的进度。祝你养成好习惯!

本篇教程结束