开发过程中有些细节容易被忽略,今天挑几个重点聊一聊。
飞牛OS部署ExerciseDiary:Docker Compose、运动记录与cpolar远程访问
前言
在 NAS 上部署运动记录应用,真正需要确认的不只是“网页能否打开”。后续数据保存在哪里、容器重启后记录会不会还在、是否能够通过手机访问,以及开放公网前有没有身份验证,这些才决定服务能否长期用。对于想记录日常训练又不打算依赖商业健身平台的人,ExerciseDiary 提供了一条较轻量的自托管路径。
ExerciseDiary 是基于 Go 的开源训练日记,围绕训练项目、重量与次数、身体数据和年度运动可视化展开。它的年度视图借鉴 GitHub 贡献热力图,适合回顾训练频率;但它并不是原文前言所描述的通用学习、早睡、冥想多习惯平台。项目默认 Web 端口为 8851,官方提供 Docker 与 Compose 部署方法,并允许通过配置文件、Web 界面或环境变量调整设置。
本文以飞牛 OS 为演示环境,从 SSH 连接、Docker 状态检查动手,保留原始 Git 克隆与 Compose 启动命令,逐步完成局域网访问、训练模板建立、体重记录,以及 cpolar 随机域名和固定二级子域名的配置。同时单独标注源文中 exer 与 exrer 的路径差异、Docker 检查命令的问题,以及 ExerciseDiary 默认认证关闭带来的公网安全要求。读者可以依次完成安装和验证,也可以据此调整自己的 NAS 部署方案。
1. ExerciseDiary 的功能与技术定位
ExerciseDiary 项目地址:https://github.com/aceberg/ExerciseDiary
它的官方定位是 Workout diary(运动训练日记)。最直观的展示方法是类似 GitHub 贡献图的年度运动可视化:哪些日子有训练、记录如何分布,能够通过日历回顾。页面中的训练项目还允许设置默认重量和次数,因此它记录的不只是“今天做没做”,还有实际训练信息。
这次教程中会接触到的功能,可以按用途理解:
- 训练项目:创建不同运动项目,并填写该项目的默认重量、次数等信息;
- 日常记录:按实际完成的训练留下记录,方便回看运动频率与训练安排;
- 身体数据:原文演示了体重记录,适合与训练日志对照查看;
- 年度视图:通过热力图形式回顾训练分布,不用单靠记忆判断自己是否持续运动;
- 本地部署:把程序和数据放在自己管理的设备中,由自己负责访问权限与备份。
localStorage、Python/Node.js 技术栈,也不能当作此项目的部署说明。官方仓库提供的是 Go 应用与 Docker 部署方案,默认配置目录为 /data/ExerciseDiary。自托管减少了对第三方托管平台的依赖,但并不意味着服务默认有登录保护,或数据会自动备份。
2. 部署前准备:飞牛 OS SSH 与 Docker
2.1 开启 SSH,进入 NAS 终端
先在飞牛 OS 的系统设置里找到 SSH 功能并开启。然后用 Windows PowerShell、macOS 终端或其他 SSH 工具连接 NAS。这里的目的不是把服务暴露到公网,而是在本地网络中执行后续 Git、Docker 命令;操作完成后,可以根据实际需要关闭 SSH 或限制可登录的用户。
下面三张原图对应 SSH 功能的入口及开启过程,依次按页面完成即可:
2.2 检查 Docker 与 Compose
SSH 连接建立后,先确认 Docker 已经安装且守护进程正常运行。原文给出的检查命令如下,保留供对照:
docker -v
systemctl status -v
这里有一个需要纠正的地方:docker -v 只显示 Docker 客户端版本,不能证明服务端可用;systemctl status -v 也不是检查 Docker 的有效命令。实际执行时可补充:
# 检查 Docker 服务端是否能够响应
docker info
# 检查 Compose 插件
docker compose version
# 如果系统使用 systemd,可查看 Docker 服务状态
systemctl status docker
如果命令因权限报错,先确认 SSH 用户是否有 Docker 操作权限,不要仅凭版本号判断环境已经准备好。也可以在飞牛的应用界面检查 Docker:
3. 源码克隆与 Docker Compose 部署
3.1 创建项目目录
先选好 NAS 上的部署位置。原文演示中用 /docker/exer,对应的原始命令是:
mkdir -p /docker/exer
cd /docker/exrer
要注意原文第二行把 exer 写成了 exrer。如果目录没有事先创建,直接复制会导致 cd 失败,后续克隆也可能落到错误位置。正确写法应是:
mkdir -p /docker/exer
cd /docker/exer
pwd
/docker 是否是你的 NAS 上合适且可写的路径,应以实际存储目录为准。pwd 返回目标目录后,再继续执行,避免在不确定的位置下载源码。
3.2 获取官方仓库并确认部署文件
进入目标目录后,使用原文的仓库地址克隆项目。命令末尾的 . 表示把仓库内容放入当前目录,因此当前目录应为空,或至少不能与现有文件冲突。
git clone https://github.com/aceberg/ExerciseDiary.git .
接着检查当前目录是否具有 Dockerfile 与 Compose 文件:
ls -l Dockerfile docker-compose.yml
这里沿用源码克隆并通过 Compose 启动的原文流程。官方也提供预构建的 aceberg/exercisediary 镜像;无论选哪条路线,都应查看自己克隆到的 docker-compose.yml 中实际的端口、卷映射、镜像或构建配置,不能只以教程截图推断所有版本的配置相同。
3.3 启动容器并验证
确认 Docker 可用、目录和文件无误后,执行原文命令:
docker compose up --build -d
命令发出后,还应检查容器状态和日志,而不是仅看“命令已经返回”:
docker compose ps
docker compose logs --tail=100
按原文的端口配置,在同一局域网的浏览器输入 http://飞牛IP:8851。这里的“飞牛IP”需要换成自己设备的真实局域网地址。若 Compose 文件中端口不同,以实际映射为准。
数据位置提醒:官方 Compose 示例将宿主机目录挂载到容器内的 /data/ExerciseDiary,配置与数据应检查该卷映射和实际存放位置。不要因为容器能启动就忽视持久化;备份时应覆盖实际挂载的数据目录,而不只是保存一张网页截图。
4. ExerciseDiary 基础功能验证
4.1 创建训练项目
进入页面后,先通过 Add Exercise 新建训练项目。可以按自己常做的动作命名,再填写默认重量和次数,方便以后重复记录时有一个清晰的起点。这一步展示的是运动训练模板,不是为学习、阅读等场景建立通用习惯类别。
实际训练与默认设置不一致时,应按当次情况记录;训练项目和回顾数据的价值,来自持续、准确地记录,而不是为了让日历更好看随意勾选。
4.2 记录体重,查看个人变化
除训练内容外,原文还演示了体重记录。它可以作为个人运动日志的一部分,但体重只是一个维度,不能单凭短期变化判断训练效果。
4.3 调整基本信息并保存
根据界面提示修改个人或项目的基本信息,确认后保存。这里按原文截图顺序保留操作位置,具体字段以安装版本的页面为准。
完成基本设置后,可以先记下一次真实训练,再回到日历检查记录是否正确呈现。比起安装后马上追求“连续多少天”,先确认填写—保存—回看这条路径正常,使用起来更踏实。
5. 在被部署的 NAS 上安装 cpolar
局域网内能够打开 8851 页面,解决的是家中设备访问问题。如果外出时仍想使用自己的训练日志,可以再建立远程访问入口。这里的分工很明确:ExerciseDiary 提供应用和数据,cpolar 负责将指定的本地服务映射到公网;隧道并不会替应用自动开启账户认证或完成备份。
5.1 安装并检查 cpolar 服务
保持 NAS SSH 连接,在终端执行原文的一键安装命令:
sudo curl https://get.cpolar.sh | sh
安装脚本来自外部地址,应先确认来源可信,并理解脚本会在本机执行。原命令中 sudo 的位置并不等于整条管道都以管理员身份执行;若安装遇到权限问题,应参考当前官方说明检查,不要盲目重复运行。
安装后查看服务状态:
sudo systemctl status cpolar
如果状态显示服务正常运行,再在局域网浏览器访问 http://飞牛IP:9200,使用 cpolar 账号登录 Web 管理页面。这里的 IP 是运行 cpolar 的 NAS 地址,不是任意电脑上的 localhost。
6. 配置 ExerciseDiary 公网隧道
进入 cpolar Web UI,依次选择隧道管理 → 创建隧道。针对这篇文章的 ExerciseDiary,可按原文填写以下参数:
- 隧道名称:
exercise,也可以使用未被占用的自定义名称; - 协议:
http; - 本地地址:
8851; - 域名类型:随机域名;
- 地区:
China Top。
创建成功后,进入状态 → 在线隧道列表,复制系统实际生成的公网地址。不要照抄教程截图中的示例网址,因为每位用户拿到的地址可能不同。
在不处于同一局域网的手机或电脑上打开对应地址,确认页面能否正常加载,并实际完成一次记录或查看操作。仅仅看见页面不等于确认数据已正确保存,也不代表已具备足够的公网安全保护。
7. 配置固定二级子域名
如果只是临时测试,随机地址通常足够;需要长期从手机进入时,可以使用 cpolar 提供的固定二级子域名,避免因随机地址变化而反复修改收藏的链接。固定地址的可用性以所用套餐及服务状态为准,并非保证服务永远在线。
先在 cpolar 控制台进入预留 → 保留二级子域名,地区按原文选择 China Top,名称示例为 exercise。如果名称已被占用,就改为自己能成功保留的名称。
保留完成后,返回本地 cpolar Web UI,在隧道管理 → 隧道列表找到之前创建的 exercise,点击编辑。
将域名类型改为二级子域名,在 Sub Domain 填写刚刚保留成功的名称,地区保持一致,然后点击更新。
进入在线隧道列表,检查随机网址是否已替换成新的固定网址。
最后用实际分配的公网地址再做一次异地访问验证;原图展示的是打开 ExerciseDiary 页面后的状态,不代表网络中断、NAS 关机时也能继续使用。
公网使用前:认证、备份和访问范围
ExerciseDiary 官方配置中,AUTH 默认值为 false,表示默认不启用会话登录认证。这和“数据部署在自己的 NAS 上”是两回事。向公网开放前,应先根据官方说明启用并验证应用认证,或通过经过验证的额外访问控制限制隧道入口,避免任何拿到链接的人直接访问运动数据。AUTH_USER、AUTH_PASSWORD 等参数的含义和密码配置方法,应以对应版本的官方配置文档为准,不要把明文密码随意贴进公开教程。
同时检查数据卷的备份与恢复方案。持久化卷能降低容器重建时丢失记录的风险,但不能替代独立备份;远程入口只是方便连接,不会替代权限管理和数据保护。
总结
本篇保留了飞牛 OS 上 ExerciseDiary 的完整技术流程:SSH 连接与 Docker 检查、源码克隆、Compose 启动、8851 端口访问、训练模板和体重记录,以及通过 cpolar 创建随机与固定公网地址。文章同时标注了原文目录拼写错误,并补充 Compose 状态、日志与持久化检查方式。
部署后的维护重点并不在于反复重装,而是确保实际卷映射正确、记录能够回看、访问权限符合使用范围。尤其在应用默认认证未开启的情况下,不能将 HTTPS 隧道误当成完整的登录保护。先完成本地数据保存与备份,再按需开放远程访问,才能把这套运动日记作为长期使用的自托管服务。
🍄程序山海,以像素为砖,以算法为梁,搭建未有的世界。一个探索和分享的有趣博主,点击了解!
以上就是这次整理的全部内容,希望对你有所启发。如果有不同见解,欢迎在评论区交流讨论。
评论 (0)
暂无评论