一卒#004 | Windows 上使用 taskschd.msc 托管 wakapi
天下 我苦 Wakatime 久矣!😡
- Free用户只能看 7 天内的数据,否则你需要支付 9 $/月来得到 Pro 权限
- 界面简陋,我不喜欢
- 你的数据会上传到别人的服务器上
难道就没有一个两全其美的办法吗?既能精确追踪我们的编码时光,又能将宝贵的数据牢牢掌握在自己手中,还不用掏一分钱?
当然有!今天,我们就来迎接我们的英雄——Wakapi。它是一个完全开源、与 WakaTime 兼容、并且可以轻松部署在自己电脑上的后端服务。它轻量、快速、界面优美,最重要的是,它让你成为自己数据的主人。
我们将不使用 Docker(我不会😭),而是用 Windows 系统自带的"任务计划程序" (taskschd.msc
) 来托管 Wakapi 服务,实现开机自启、稳定可靠的个人编码数据统计。
核心思路
我们的目标是让 wakapi.exe
这个程序在电脑开机后自动在后台运行,并且无需我们登录账户。Windows 的"任务计划程序"是实现这一目标的完美工具。
下载并准备 Wakapi
首先,我们需要从 GitHub 下载 Wakapi 的可执行文件和配置文件。
创建专属目录:在你电脑上选择一个稳定的位置,例如
C:\wakapi
,用于存放所有相关文件。下载程序文件:
- 访问 Wakapi 的 GitHub Releases 页面。
- 找到最新的版本,下载适用于 Windows 的压缩包。
- 解压后,将核心程序
wakapi.exe
放入我们刚创建的文件夹中。
准备配置文件:
- 在 Wakapi 的代码仓库中找到并下载默认的配置文件 config.default.yml。
- 将此文件同样放入你所创建的文件夹,并将其重命名为
wakapi.yml
。
配置安全密钥: 用任何文本编辑器(如 VS Code, Notepad++)打开
C:\wakapi\wakapi.yml
文件。找到security
->password_salt
字段。yamlsecurity: # 用于密码哈希的 Pepper password_salt: "在这里输入一个长而随机的字符串"
WARNING
必须将引号内的默认字符串替换为一个你自己生成的、足够长且无规律的随机字符串。这个
salt
是用来加密所有用户密码的核心,如果丢失或泄露,将导致安全问题。请务必修改并妥善保管。
使用任务计划程序实现开机自启
这是实现"一劳永逸"托管的关键。
打开任务计划程序:按
Win + R
键,在弹出的"运行"对话框中输入taskschd.msc
进入。创建基本任务:在右侧的"操作"面板中,点击 "创建基本任务..."。
- 名称:填写一个易于识别的名字,如
Wakapi
。 - 描述:(可选)
开机自启 Wakapi 服务
。 - 点击"下一步"。
- 名称:填写一个易于识别的名字,如
设置触发器:选择 "计算机启动时",然后点击"下一步"。这能确保服务在系统启动后就运行,无需用户登录。
设置操作:选择 "启动程序",然后点击"下一步"。
配置程序和参数:
- 程序或脚本:点击"浏览",找到并选择
你创建的文件夹\wakapi.exe
。 - 添加参数(可选):在这一栏中,填入
-config wakapi.yml
。这会告诉程序使用同目录下的wakapi.yml
作为配置文件。 - 起始于(可选): 填入
你创建的文件夹
,这可以确保程序的工作目录正确。 - 点击"下一步"。
- 程序或脚本:点击"浏览",找到并选择
最后优化:
- 在最后的概览页面,勾选上 "当单击'完成'时,打开此任务的属性对话框",然后点击"完成"。
- 在弹出的属性对话框中,进行最终设置:
- 常规 选项卡:
- 选择 "不管用户是否登录都要运行"。
- 勾选 "使用最高权限运行"。
- 条件 选项卡:
- 取消勾选 "只有在计算机使用交流电源时才启动此任务"(如果你用的是笔记本,没接电源时不会启动这个任务)。
- 常规 选项卡:
- 点击"确定"保存。系统会要求输入当前用户的密码以授权。
现在,可以重启电脑进行测试。重启后,无需任何操作,稍等片刻,Wakapi 服务就应该已经在后台悄然运行了。
配置并使用 Wakapi
服务已在后台运行,现在我们需要通过浏览器与它交互。
注册账户:打开浏览器,访问
http://localhost:3000
。首次访问时,请注册一个新用户。获取 API Key:使用刚注册的账户登录,在 "DashBoard" 页面 (当然 Settings 页面也有) ,复制所给的 API Key。这是连接编辑器和你的 Wakapi 服务的唯一凭证。
连接 VS Code
(当然,其它 IDE 大差不差)
最后一步,让 VS Code 将编码数据发送到我们自己的服务中。
安装 WakaTime 插件:在 VS Code 扩展市场搜索并安装官方的
WakaTime
插件。创建配置文件:最稳定可靠的方式是手动创建 WakaTime 的全局配置文件。它默认不存在,需要我们自己创建。
- 在 VS Code 中新建一个文件。
- 将以下内容粘贴进去,并把 API Key 替换为你自己的:
ini[settings] api_url = http://localhost:3000/api api_key = 请粘贴你在第二步获取到的API_Key
- 将该文件 另存为
C:\Users\你的Windows用户名\.wakatime.cfg
。请务必确认文件名和路径完全正确。
重启 VS Code:关闭并重新打开 VS Code,让插件加载新的配置。
现在,随便写几分钟代码,然后回到 http://localhost:3000
刷新看看,确认编码活动被记录下来就行。
附:理解"心跳"
刚配好时候发现编码活动没有被记录下来,写了 20 分钟左右的数电复习,发现只有 4 分钟的有效时间。
查询资料后发现和 Heartbeats 机制有关。
- Heartbeats (心跳):你在编辑器里每一次有效操作(打字、保存等)都会产生一个"心跳"数据包发送给服务器。
Total Heartbeats
就是服务器收到的心跳总数。 - Heartbeats Timeout (心跳超时):这个设置用于判断你是否中途离开了。两次心跳间隔若小于这个值,中间的时间就算作连续的编码时间;若大于这个值,则认为你已离开,中间的时间不计入。
这里的心跳间隔在 Settings - Data - Heartbeats Timeout 中即可设置。
我发现我的 wakapi 的心跳间隔默认设置为 1 分钟,原因就在这里,因为一直在 IDE 和 PPT 之间切换。个人认为设置成 10 ~ 15 分钟差不多。