简介
Wakapi 是一个开源的、自我托管的 WakaTime 兼容后端服务,它可以统计和展示开发者的编程活动。
项目地址
你可以在以下地址找到 Wakapi 的源代码:
https://github.com/muety/wakapi
我的 yaml 地址
你可以在以下地址找到我使用的 yaml 文件:
https://github.com/bboysoulcn/kubernetes-sample/tree/master/wakapi
安装服务端
安装 Wakapi 服务端相对较简单。首先,你需要选择一个数据库,Wakapi 支持以下数据库:
- SQLite(默认,易于设置)
- MySQL(推荐,因为经过最广泛的测试)
- MariaDB(开源 MySQL 替代品)
- Postgres(也是开源的)
- CockroachDB(云原生、分布式、Postgres 兼容 API)
我在这里选择的是 MySQL。如果你也选择 MySQL,你需要在启动 Wakapi 之前创建一个新的数据库,供 Wakapi 使用:
CREATE DATABASE wakapi CHARACTER SET utf8mb4;
接下来,我们将在 Kubernetes 中安装 Wakapi,这需要一些常规的操作。首先,我们需要创建一个证书。你可以使用以下的 certificate.yaml
文件:
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: wakapi.example.cn
namespace: app
spec:
dnsNames:
- wakapi.example.cn # 要签发证书的域名
issuerRef:
kind: ClusterIssuer
name: letsencrypt-dns01 # 引用 ClusterIssuer,指示采用 dns01 方式进行校验
secretName: wakapi-example-cn-tls # 最终签发出来的证书会保存在这个 Secret 里面
接下来,我们需要创建一个 Ingress。你可以使用以下的 ingress.yaml
文件:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: wakapi-ingress
namespace: app
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/ssl-passthrough: "true"
nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
nginx.ingress.kubernetes.io/proxy-body-size: "4096m"
spec:
rules:
- host: "wakapi.example.cn"
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: wakapi-svc
port:
number: 3000
tls:
- hosts:
- wakapi.example.cn
secretName: wakapi-example-cn-tls
然后,我们需要创建一个 service 。请注意,服务的名称不能是 “wakapi”,因为这会和 Wakapi 的环境变量产生冲突。你可以在以下地址找到更多的信息:
https://github.com/muety/wakapi/issues/567
你可以使用以下的 svc.yaml
文件创建服务:
apiVersion: v1
kind: Service
metadata:
name: wakapi-svc
namespace: app
spec:
type: ClusterIP
selector:
app: wakapi
ports:
- port: 3000
targetPort: 3000
name: web
最后,我们需要创建一个 Deployment 。你可以使用以下的 deploy.yaml
文件创建 Deployment:
apiVersion: apps/v1
kind: Deployment
metadata:
name: wakapi
namespace: app
spec:
selector:
matchLabels:
app: wakapi
template:
metadata:
labels:
app: wakapi
spec:
containers:
- name: wakapi
image: ghcr.io/muety/wakapi:2.10.0
ports:
- containerPort: 3000
name: web
env:
- name: WAKAPI_DB_TYPE
value: "mysql"
- name: WAKAPI_DB_NAME
value: "wakapi"
- name: WAKAPI_DB_USER
value: "root"
- name: WAKAPI_DB_PASSWORD
value: "password"
- name: WAKAPI_DB_HOST
value: "mysql.example.com"
- name: WAKAPI_DB_PORT
value: "3306"
- name: ENVIRONMENT
value: "prod"
- name: WAKAPI_PASSWORD_SALT
value: "salt"
- name: WAKAPI_LEADERBOARD_ENABLED # 是否启用公共排行榜
value: "false"
- name: WAKAPI_REPORT_TIME_WEEKLY # 发送电子邮件报告的工作日和时间
value: "0 0 8 * * *"
- name: WAKAPI_SUPPORT_CONTACT # 在页面上显示为支持联系人的电子邮件地址
value: "[email protected]"
- name: WAKAPI_ALLOW_SIGNUP # 是否启用用户注册
value: "false"
- name: WAKAPI_DISABLE_FRONTPAGE # 是否禁用登陆页面(对于个人实例有用)
value: "true"
- name: WAKAPI_EXPOSE_METRICS # 是否公开 Prometheus 指标/api/metrics
value: "true"
- name: WAKAPI_DB_MAX_CONNECTIONS # 最大数据库连接数
value: "10"
- name: WAKAPI_MAIL_ENABLED # 是否允许Wakapi发送电子邮件(例如密码重置)
value: "true"
- name: WAKAPI_MAIL_SENDER # 外发邮件的默认发件人地址(MailWhale 忽略)
value: "Wakapi <[email protected]>"
- name: WAKAPI_MAIL_PROVIDER # smtp用于发送邮件的实现
value: "smtp"
- name: WAKAPI_MAIL_SMTP_HOST # 用于发送邮件的 SMTP 服务器地址
value: "smtp.example.com"
- name: WAKAPI_MAIL_SMTP_PORT # SMTP 服务器端口
value: "25"
- name: WAKAPI_MAIL_SMTP_USER # SMTP服务器验证用户名
value: "[email protected]"
- name: WAKAPI_MAIL_SMTP_PASS # SMTP服务器验证密码
value: "password"
- name: WAKAPI_MAIL_SMTP_TLS # SMTP 服务器是否需要 TLS 加密
value: "false"
- name: WAKAPI_PUBLIC_URL # 可以公开找到您的 Wakapi 实例的 URL
value: "https://wakapi.example.cn"
如果你使用 Docker Compose,只需要确保你设置了正确的环境变量即可。
客户端配置
Wakapi 支持所有 WakaTime 支持的客户端。你可以在以下地址找到所有支持的客户端:
https://wakatime.com/plugins
配置客户端也很简单。在你的机器上,打开 ~/.wakatime.cfg
文件,并添加以下内容:
[settings]
# Your Wakapi server URL or 'https://wakapi.dev/api' when using the cloud server
api_url = http://localhost:3000/api
# Your Wakapi API key (get it from the web interface after having created an account)
api_key = 406fe41f-6d69-4183-a4cc-121e0c524c2b
请注意,如果你像我一样使用 VS Code 的 Remote Development 功能,你需要在你的远程机器上也添加这个配置,并确保 Wakapi 可以被远程机器访问。
Prometheus 和 Grafana 配置
首先,你需要将你的 API 密钥转换为 base64 格式:
echo "<YOUR_API_KEY>" | base64
然后,你需要添加一个新的 job 配置。你可以使用以下的配置:
- job_name: 'wakapi'
scrape_interval: 1m
scheme: https
metrics_path: '/api/metrics'
bearer_token: 'token'
static_configs:
- targets: ['wakapi.example.com']
请注意,在最新的 2.10.0 版本的 Wakapi 中,你需要将 WAKAPI_LEADERBOARD_ENABLED
设置为 “false”,否则会出现 bug。你可以在以下地址找到更多的信息:
https://github.com/muety/wakapi/issues/576
最后,你需要在 Grafana 中添加一个新的 dashboard。你可以在以下地址找到一个预先配置的 dashboard:
https://grafana.com/grafana/dashboards/12790-wakatime-coding-stats/
只需要导入这个 dashboard,你就可以开始使用了。
欢迎关注我的博客www.bboy.app
Have Fun