logo
icon

wakapi

📊 一个简洁、可自托管的代码时间统计服务,与 WakaTime 兼容

template cover
部署次数4
发布者GrassBlock1
创建于2026-03-26
模版内的服务
service icon
service icon
标签
CodingWakatimeTracking

部署 muety/wakapi 的模板,这是一个极简、自托管的 WakaTime 兼容后端,用于统计编程数据。

配置

在部署之前,你至少需要为你的 wakapi 实例设置一个域名。

运行时配置

你可以通过配置文件(使用服务设置中的“配置文件编辑器”编辑 /app/config.yml)或通过环境变量(在“变量”中编辑)来指定配置选项。以下是一些常用选项:

YAML 键 / 环境变量默认值描述
env /<br>ENVIRONMENTdev是否使用开发或生产环境,开发环境会输出更多的日志
app.leaderboard_enabled /<br>WAKAPI_LEADERBOARD_ENABLEDtrue是否启用公开排行榜
app.leaderboard_scope /<br>WAKAPI_LEADERBOARD_SCOPE7_days公开排行榜的收集周期(允许值见此处
app.leaderboard_generation_time /<br>WAKAPI_LEADERBOARD_GENERATION_TIME0 0 6 * * *,0 0 18 * * *重新计算排行榜的时间,以 cron 表达式表示
app.leaderboard_require_auth /<br>WAKAPI_LEADERBOARD_REQUIRE_AUTHfalse限制排行榜仅限登录用户访问
app.aggregation_time /<br>WAKAPI_AGGREGATION_TIME0 15 2 * * *每天定期为所有用户生成汇总的时间点
app.report_time_weekly /<br>WAKAPI_REPORT_TIME_WEEKLY0 0 18 * * 5发送邮件报告的时间
app.data_cleanup_time /<br>WAKAPI_DATA_CLEANUP_TIME0 0 6 * * 0执行数据清理操作的时间(见 app.data_retention_months
app.optimize_database_time /<br>WAKAPI_OPTIMIZE_DATABASE_TIME0 0 8 1 * *执行数据库清理(SQLite、Postgres)或表优化(MySQL)的时间
app.import_enabled /<br>WAKAPI_IMPORT_ENABLEDtrue是否允许从 WakaTime 或其他 Wakapi 实例导入数据
app.import_batch_size /<br>WAKAPI_IMPORT_BATCH_SIZE50从外部服务导入时,每次插入数据库的心跳包批量大小
app.import_backoff_min /<br>WAKAPI_IMPORT_BACKOFF_MIN5用户尝试再次导入数据前需等待的“冷却”时间(分钟)
app.import_max_rate /<br>WAKAPI_IMPORT_MAX_RATE24成功导入数据后,用户再次尝试导入前需等待的最少小时数
app.inactive_days /<br>WAKAPI_INACTIVE_DAYS7将用户视为非活跃的天数(仅用于指标)
app.heartbeat_max_age /<br>WAKAPI_HEARTBEAT_MAX_AGE4320h心跳包与现在的时间的最大间隔(见 ParseDuration
app.warm_caches /<br>WAKAPI_WARM_CACHEStrue是否在启动时执行一些初始缓存预热
app.custom_languages-文件后缀到语言名称的映射
app.avatar_url_template /<br>WAKAPI_AVATAR_URL_TEMPLATE(见 config.default.yml外部用户头像图片的 URL 模板(例如来自 DicebearGravatar
app.date_format /<br>WAKAPI_DATE_FORMATMon, 02 Jan 2006用于格式化人类可读日期的 Go 时间格式字符串(见 Time.Format
app.datetime_format /<br>WAKAPI_DATETIME_FORMATMon, 02 Jan 2006 15:04用于格式化人类可读日期时间的 Go 时间格式字符串(见 Time.Format
app.support_contact /<br>WAKAPI_SUPPORT_CONTACT[email protected]页面上“支持联系人”的电子邮件地址
app.data_retention_months /<br>WAKAPI_DATA_RETENTION_MONTHS-1用户数据(心跳包)的最大保留月数(-1 表示无限制)
app.max_inactive_months /<br>WAKAPI_MAX_INACTIVE_MONTHS12删除无数据用户账户前的最大非活跃月数(-1 表示无限制)
server.timeout_sec /<br> WAKAPI_TIMEOUT_SEC30请求超时时间(秒)
server.base_path /<br> WAKAPI_BASE_PATH/Web 基础路径(当在代理后运行于子路径时更改)
server.public_url /<br> WAKAPI_PUBLIC_URLhttp://localhost:3000你的 Wakapi 实例可公开访问的 URL
security.disable_local_auth /<br> WAKAPI_DISABLE_LOCAL_AUTHfalse禁用本地凭据(用户名和密码)登录,强制使用 OIDC 提供者登录
security.disable_webauthn /<br> WAKAPI_DISABLE_WEBAUTHNtrue禁用通过 WebAuthn 登录(安全密钥、生物识别等)
security.password_salt /<br> WAKAPI_PASSWORD_SALT-用于密码哈希的 salt
security.insecure_cookies /<br> WAKAPI_INSECURE_COOKIEStrue是否允许通过 HTTP 传输 cookie。在生产环境中,强烈建议通过 HTTPS 提供 Wakapi 并将此项设为 false
security.cookie_max_age /<br> WAKAPI_COOKIE_MAX_AGE172800认证 cookie 的生命周期(秒),或设为 0 使用 会话 cookie
security.allow_signup /<br> WAKAPI_ALLOW_SIGNUPtrue是否启用用户注册
security.oidc_allow_signup /<br> WAKAPI_OIDC_ALLOW_SIGNUPtrue是否允许通过 OIDC 注册用户
security.signup_captcha /<br> WAKAPI_SIGNUP_CAPTCHAfalse注册表单是否需要验证码
security.invite_codes /<br> WAKAPI_INVITE_CODEStrue是否启用邀请码注册。主要用于注册被禁用的情况。
security.disable_frontpage /<br> WAKAPI_DISABLE_FRONTPAGEfalse是否禁用登录页(对于个人实例很有用)
security.expose_metrics /<br> WAKAPI_EXPOSE_METRICSfalse是否在 /api/metrics 下暴露 Prometheus 指标
security.trusted_header_auth /<br> WAKAPI_TRUSTED_HEADER_AUTHfalse是否为反向代理启用受信任标头认证(参见 #534)。谨慎使用!
security.trusted_header_auth_key /<br> WAKAPI_TRUSTED_HEADER_AUTH_KEYRemote-User用于受信任标头认证的标头字段。注意: 必须配置代理以从客户端请求中剥离此标头!
security.trusted_header_auth_allow_signup /<br> WAKAPI_TRUSTED_HEADER_AUTH_ALLOW_SIGNUPfalse是否允许基于上游受信任标头认证创建新用户(参见 #808
security.trust_reverse_proxy_ips /<br> WAKAPI_TRUST_REVERSE_PROXY_IPS-受信任处理认证的反向代理的 IPv4 或 IPv6 地址或 CIDR 列表(逗号分隔),例如 172.17.0.1192.168.0.0/24[::1]
security.signup_max_rate /<br> WAKAPI_SIGNUP_MAX_RATE5/1h注册端点的速率限制配置,格式为 <max_req>/<multiplier><unit>,其中 unitsmh
security.login_max_rate /<br> WAKAPI_LOGIN_MAX_RATE10/1m登录端点的速率限制配置,格式为 <max_req>/<multiplier><unit>,其中 unitsmh
security.password_reset_max_rate /<br> WAKAPI_PASSWORD_RESET_MAX_RATE5/1h密码重置端点的速率限制配置,格式为 <max_req>/<multiplier><unit>,其中 unitsmh
security.oidc[]OpenID Connect 提供者配置列表(详情见 wiki
security.oidc[0].name /<br> WAKAPI_OIDC_PROVIDERS_0_NAME-OpenID Connect 提供者的名称/标识符(例如 gitlab
security.oidc[0].display_name /<br> WAKAPI_OIDC_PROVIDERS_0_DISPLAY_NAME-向用户显示的提供者名称(可选)
security.oidc[0].client_id /<br> WAKAPI_OIDC_PROVIDERS_0_CLIENT_ID-与此提供者对应的 OAuth 客户端名称
security.oidc[0].client_secret /<br> WAKAPI_OIDC_PROVIDERS_0_CLIENT_SECRET-与此提供者对应的 OAuth 客户端密钥
security.oidc[0].endpoint /<br> WAKAPI_OIDC_PROVIDERS_0_ENDPOINT-OpenID Connect 提供者 API 入口点(用于发现
security.oidc[0].username_claim /<br> WAKAPI_OIDC_PROVIDERS_0_USERNAME_CLAIM-可选的自定义 OIDC ID 令牌声明,用于从中读取用户名(默认会检查 preferred_usernamenicknamesub
security.oidc[0].scopes /<br> WAKAPI_OIDC_PROVIDERS_0_SCOPES-openidprofileemail 之外请求的额外 OAuth 范围(用于自定义用户名声明)
mail.enabled /<br> WAKAPI_MAIL_ENABLEDfalse是否允许 Wakapi 发送电子邮件(用于密码重置)
mail.sender /<br> WAKAPI_MAIL_SENDER-邮件的默认发件人地址
mail.skip_verify_mx_record /<br> WAKAPI_MAIL_SKIP_VERIFY_MX_RECORDfalse是否跳过验证用户电子邮件地址的 MX DNS 记录
mail.provider /<br> WAKAPI_MAIL_PROVIDERsmtp用于发送邮件的实现(可选值:[smtp])
mail.smtp.host /<br> WAKAPI_MAIL_SMTP_HOST-发送邮件的 SMTP 服务器地址(如果使用 smtp 邮件提供者)
mail.smtp.port /<br> WAKAPI_MAIL_SMTP_PORT-SMTP 服务器端口(通常为 465)
mail.smtp.username /<br> WAKAPI_MAIL_SMTP_USER-SMTP 服务器认证用户名
mail.smtp.password /<br> WAKAPI_MAIL_SMTP_PASS-SMTP 服务器认证密码
mail.smtp.tls /<br> WAKAPI_MAIL_SMTP_TLSfalseSMTP 服务器是否需要 TLS 加密(false 表示使用 STARTTLS 或无加密)
mail.smtp.skip_verify /<br> WAKAPI_MAIL_SMTP_SKIP_VERIFYfalse是否允许 TLS 加密的 SMTP 使用无效或自签名证书
sentry.dsn /<br> WAKAPI_SENTRY_DSN用于集成 Sentry 的 DSN,用于错误日志记录和追踪(留空以禁用)
sentry.environment /<br> WAKAPI_SENTRY_ENVIRONMENT(env)Sentry 环境 标签(默认值为 env / ENV
sentry.enable_tracing /<br> WAKAPI_SENTRY_TRACINGfalse是否启用 Sentry 请求追踪
sentry.sample_rate /<br> WAKAPI_SENTRY_SAMPLE_RATE0.75Sentry 中追踪请求的概率
sentry.sample_rate_heartbeats /<br> WAKAPI_SENTRY_SAMPLE_RATE_HEARTBEATS0.1Sentry 中追踪心跳请求的概率

所有配置选项请参考原始 README

在 Wakatime 客户端上设置

Wakapi 依赖于开源的 WakaTime 客户端工具。要为 Wakapi 收集统计数据,你需要对其进行设置。

  1. 为你的特定 IDE 或编辑器设置 WakaTime。请参考相应的插件指南
  2. 如下编辑本地的 ~/.wakatime.cfg 文件
[settings]
# 将 localhost:3000 替换为你的 wakapi 服务器域名
api_url = http://localhost:3000/api

# 你的 Wakapi API 密钥(创建账户后从 Web 界面获取)
api_key = 406fe41f-6d69-4183-a4cc-121e0c524c2b

此外,你还可以选择设置客户端代理