Skip to content

一卒#004 | Windows 上使用 taskschd.msc 托管 wakapi

天下 我苦 Wakatime 久矣!😡

  • Free用户只能看 7 天内的数据,否则你需要支付 9 $/月来得到 Pro 权限
  • 界面简陋,我不喜欢
  • 你的数据会上传到别人的服务器上

难道就没有一个两全其美的办法吗?既能精确追踪我们的编码时光,又能将宝贵的数据牢牢掌握在自己手中,还不用掏一分钱?

当然有!今天,我们就来迎接我们的英雄——Wakapi。它是一个完全开源、与 WakaTime 兼容、并且可以轻松部署在自己电脑上的后端服务。它轻量、快速、界面优美,最重要的是,它让你成为自己数据的主人。

我们将不使用 Docker(我不会😭),而是用 Windows 系统自带的"任务计划程序" (taskschd.msc) 来托管 Wakapi 服务,实现开机自启、稳定可靠的个人编码数据统计。

核心思路

我们的目标是让 wakapi.exe 这个程序在电脑开机后自动在后台运行,并且无需我们登录账户。Windows 的"任务计划程序"是实现这一目标的完美工具。

下载并准备 Wakapi

首先,我们需要从 GitHub 下载 Wakapi 的可执行文件和配置文件。

  1. 创建专属目录:在你电脑上选择一个稳定的位置,例如 C:\wakapi,用于存放所有相关文件。

  2. 下载程序文件

    • 访问 Wakapi 的 GitHub Releases 页面
    • 找到最新的版本,下载适用于 Windows 的压缩包。
    • 解压后,将核心程序 wakapi.exe 放入我们刚创建的文件夹中。
  3. 准备配置文件

    • 在 Wakapi 的代码仓库中找到并下载默认的配置文件 config.default.yml
    • 将此文件同样放入你所创建的文件夹,并将其重命名为 wakapi.yml
  4. 配置安全密钥: 用任何文本编辑器(如 VS Code, Notepad++)打开 C:\wakapi\wakapi.yml 文件。找到 security -> password_salt 字段。

    yaml
    security:
      # 用于密码哈希的 Pepper
      password_salt: "在这里输入一个长而随机的字符串"

    WARNING

    必须将引号内的默认字符串替换为一个你自己生成的、足够长且无规律的随机字符串。这个 salt是用来加密所有用户密码的核心,如果丢失或泄露,将导致安全问题。请务必修改并妥善保管。

使用任务计划程序实现开机自启

这是实现"一劳永逸"托管的关键。

  1. 打开任务计划程序:按 Win + R 键,在弹出的"运行"对话框中输入 taskschd.msc 进入。

  2. 创建基本任务:在右侧的"操作"面板中,点击 "创建基本任务..."

    • 名称:填写一个易于识别的名字,如 Wakapi
    • 描述:(可选)开机自启 Wakapi 服务
    • 点击"下一步"。
  3. 设置触发器:选择 "计算机启动时",然后点击"下一步"。这能确保服务在系统启动后就运行,无需用户登录。

  4. 设置操作:选择 "启动程序",然后点击"下一步"。

  5. 配置程序和参数

    • 程序或脚本:点击"浏览",找到并选择 你创建的文件夹\wakapi.exe
    • 添加参数(可选):在这一栏中,填入 -config wakapi.yml。这会告诉程序使用同目录下的 wakapi.yml 作为配置文件。
    • 起始于(可选): 填入 你创建的文件夹,这可以确保程序的工作目录正确。
    • 点击"下一步"。
  6. 最后优化

    • 在最后的概览页面,勾选上 "当单击'完成'时,打开此任务的属性对话框",然后点击"完成"。
    • 在弹出的属性对话框中,进行最终设置:
      • 常规 选项卡:
        • 选择 "不管用户是否登录都要运行"
        • 勾选 "使用最高权限运行"
      • 条件 选项卡:
        • 取消勾选 "只有在计算机使用交流电源时才启动此任务"(如果你用的是笔记本,没接电源时不会启动这个任务)。
    • 点击"确定"保存。系统会要求输入当前用户的密码以授权。

现在,可以重启电脑进行测试。重启后,无需任何操作,稍等片刻,Wakapi 服务就应该已经在后台悄然运行了。

配置并使用 Wakapi

服务已在后台运行,现在我们需要通过浏览器与它交互。

  1. 注册账户:打开浏览器,访问 http://localhost:3000。首次访问时,请注册一个新用户。

  2. 获取 API Key:使用刚注册的账户登录,在 "DashBoard" 页面 (当然 Settings 页面也有) ,复制所给的 API Key。这是连接编辑器和你的 Wakapi 服务的唯一凭证。

连接 VS Code

(当然,其它 IDE 大差不差)

最后一步,让 VS Code 将编码数据发送到我们自己的服务中。

  1. 安装 WakaTime 插件:在 VS Code 扩展市场搜索并安装官方的 WakaTime 插件。

  2. 创建配置文件:最稳定可靠的方式是手动创建 WakaTime 的全局配置文件。它默认不存在,需要我们自己创建。

    • 在 VS Code 中新建一个文件。
    • 将以下内容粘贴进去,并把 API Key 替换为你自己的:
    ini
    [settings]
    api_url = http://localhost:3000/api
    api_key = 请粘贴你在第二步获取到的API_Key
    • 将该文件 另存为 C:\Users\你的Windows用户名\.wakatime.cfg。请务必确认文件名和路径完全正确。
  3. 重启 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 分钟差不多。