
部署 muety/wakapi 的模板,这是一个极简、自托管的 WakaTime 兼容后端,用于统计编程数据。
在部署之前,你至少需要为你的 wakapi 实例设置一个域名。
你可以通过配置文件(使用服务设置中的“配置文件编辑器”编辑 /app/config.yml)或通过环境变量(在“变量”中编辑)来指定配置选项。以下是一些常用选项:
| YAML 键 / 环境变量 | 默认值 | 描述 |
|---|---|---|
env /<br>ENVIRONMENT | dev | 是否使用开发或生产环境,开发环境会输出更多的日志 |
app.leaderboard_enabled /<br>WAKAPI_LEADERBOARD_ENABLED | true | 是否启用公开排行榜 |
app.leaderboard_scope /<br>WAKAPI_LEADERBOARD_SCOPE | 7_days | 公开排行榜的收集周期(允许值见此处) |
app.leaderboard_generation_time /<br>WAKAPI_LEADERBOARD_GENERATION_TIME | 0 0 6 * * *,0 0 18 * * * | 重新计算排行榜的时间,以 cron 表达式表示 |
app.leaderboard_require_auth /<br>WAKAPI_LEADERBOARD_REQUIRE_AUTH | false | 限制排行榜仅限登录用户访问 |
app.aggregation_time /<br>WAKAPI_AGGREGATION_TIME | 0 15 2 * * * | 每天定期为所有用户生成汇总的时间点 |
app.report_time_weekly /<br>WAKAPI_REPORT_TIME_WEEKLY | 0 0 18 * * 5 | 发送邮件报告的时间 |
app.data_cleanup_time /<br>WAKAPI_DATA_CLEANUP_TIME | 0 0 6 * * 0 | 执行数据清理操作的时间(见 app.data_retention_months) |
app.optimize_database_time /<br>WAKAPI_OPTIMIZE_DATABASE_TIME | 0 0 8 1 * * | 执行数据库清理(SQLite、Postgres)或表优化(MySQL)的时间 |
app.import_enabled /<br>WAKAPI_IMPORT_ENABLED | true | 是否允许从 WakaTime 或其他 Wakapi 实例导入数据 |
app.import_batch_size /<br>WAKAPI_IMPORT_BATCH_SIZE | 50 | 从外部服务导入时,每次插入数据库的心跳包批量大小 |
app.import_backoff_min /<br>WAKAPI_IMPORT_BACKOFF_MIN | 5 | 用户尝试再次导入数据前需等待的“冷却”时间(分钟) |
app.import_max_rate /<br>WAKAPI_IMPORT_MAX_RATE | 24 | 成功导入数据后,用户再次尝试导入前需等待的最少小时数 |
app.inactive_days /<br>WAKAPI_INACTIVE_DAYS | 7 | 将用户视为非活跃的天数(仅用于指标) |
app.heartbeat_max_age /<br>WAKAPI_HEARTBEAT_MAX_AGE | 4320h | 心跳包与现在的时间的最大间隔(见 ParseDuration) |
app.warm_caches /<br>WAKAPI_WARM_CACHES | true | 是否在启动时执行一些初始缓存预热 |
app.custom_languages | - | 文件后缀到语言名称的映射 |
app.avatar_url_template /<br>WAKAPI_AVATAR_URL_TEMPLATE | (见 config.default.yml) | 外部用户头像图片的 URL 模板(例如来自 Dicebear 或 Gravatar) |
app.date_format /<br>WAKAPI_DATE_FORMAT | Mon, 02 Jan 2006 | 用于格式化人类可读日期的 Go 时间格式字符串(见 Time.Format) |
app.datetime_format /<br>WAKAPI_DATETIME_FORMAT | Mon, 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_MONTHS | 12 | 删除无数据用户账户前的最大非活跃月数(-1 表示无限制) |
server.timeout_sec /<br> WAKAPI_TIMEOUT_SEC | 30 | 请求超时时间(秒) |
server.base_path /<br> WAKAPI_BASE_PATH | / | Web 基础路径(当在代理后运行于子路径时更改) |
server.public_url /<br> WAKAPI_PUBLIC_URL | http://localhost:3000 | 你的 Wakapi 实例可公开访问的 URL |
security.disable_local_auth /<br> WAKAPI_DISABLE_LOCAL_AUTH | false | 禁用本地凭据(用户名和密码)登录,强制使用 OIDC 提供者登录 |
security.disable_webauthn /<br> WAKAPI_DISABLE_WEBAUTHN | true | 禁用通过 WebAuthn 登录(安全密钥、生物识别等) |
security.password_salt /<br> WAKAPI_PASSWORD_SALT | - | 用于密码哈希的 salt |
security.insecure_cookies /<br> WAKAPI_INSECURE_COOKIES | true | 是否允许通过 HTTP 传输 cookie。在生产环境中,强烈建议通过 HTTPS 提供 Wakapi 并将此项设为 false。 |
security.cookie_max_age /<br> WAKAPI_COOKIE_MAX_AGE | 172800 | 认证 cookie 的生命周期(秒),或设为 0 使用 会话 cookie |
security.allow_signup /<br> WAKAPI_ALLOW_SIGNUP | true | 是否启用用户注册 |
security.oidc_allow_signup /<br> WAKAPI_OIDC_ALLOW_SIGNUP | true | 是否允许通过 OIDC 注册用户 |
security.signup_captcha /<br> WAKAPI_SIGNUP_CAPTCHA | false | 注册表单是否需要验证码 |
security.invite_codes /<br> WAKAPI_INVITE_CODES | true | 是否启用邀请码注册。主要用于注册被禁用的情况。 |
security.disable_frontpage /<br> WAKAPI_DISABLE_FRONTPAGE | false | 是否禁用登录页(对于个人实例很有用) |
security.expose_metrics /<br> WAKAPI_EXPOSE_METRICS | false | 是否在 /api/metrics 下暴露 Prometheus 指标 |
security.trusted_header_auth /<br> WAKAPI_TRUSTED_HEADER_AUTH | false | 是否为反向代理启用受信任标头认证(参见 #534)。谨慎使用! |
security.trusted_header_auth_key /<br> WAKAPI_TRUSTED_HEADER_AUTH_KEY | Remote-User | 用于受信任标头认证的标头字段。注意: 必须配置代理以从客户端请求中剥离此标头! |
security.trusted_header_auth_allow_signup /<br> WAKAPI_TRUSTED_HEADER_AUTH_ALLOW_SIGNUP | false | 是否允许基于上游受信任标头认证创建新用户(参见 #808) |
security.trust_reverse_proxy_ips /<br> WAKAPI_TRUST_REVERSE_PROXY_IPS | - | 受信任处理认证的反向代理的 IPv4 或 IPv6 地址或 CIDR 列表(逗号分隔),例如 172.17.0.1、192.168.0.0/24、[::1]。 |
security.signup_max_rate /<br> WAKAPI_SIGNUP_MAX_RATE | 5/1h | 注册端点的速率限制配置,格式为 <max_req>/<multiplier><unit>,其中 unit 为 s、m 或 h。 |
security.login_max_rate /<br> WAKAPI_LOGIN_MAX_RATE | 10/1m | 登录端点的速率限制配置,格式为 <max_req>/<multiplier><unit>,其中 unit 为 s、m 或 h。 |
security.password_reset_max_rate /<br> WAKAPI_PASSWORD_RESET_MAX_RATE | 5/1h | 密码重置端点的速率限制配置,格式为 <max_req>/<multiplier><unit>,其中 unit 为 s、m 或 h。 |
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_username、nickname 和 sub) |
security.oidc[0].scopes /<br> WAKAPI_OIDC_PROVIDERS_0_SCOPES | - | 除 openid、profile 和 email 之外请求的额外 OAuth 范围(用于自定义用户名声明) |
mail.enabled /<br> WAKAPI_MAIL_ENABLED | false | 是否允许 Wakapi 发送电子邮件(用于密码重置) |
mail.sender /<br> WAKAPI_MAIL_SENDER | - | 邮件的默认发件人地址 |
mail.skip_verify_mx_record /<br> WAKAPI_MAIL_SKIP_VERIFY_MX_RECORD | false | 是否跳过验证用户电子邮件地址的 MX DNS 记录 |
mail.provider /<br> WAKAPI_MAIL_PROVIDER | smtp | 用于发送邮件的实现(可选值:[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_TLS | false | SMTP 服务器是否需要 TLS 加密(false 表示使用 STARTTLS 或无加密) |
mail.smtp.skip_verify /<br> WAKAPI_MAIL_SMTP_SKIP_VERIFY | false | 是否允许 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_TRACING | false | 是否启用 Sentry 请求追踪 |
sentry.sample_rate /<br> WAKAPI_SENTRY_SAMPLE_RATE | 0.75 | Sentry 中追踪请求的概率 |
sentry.sample_rate_heartbeats /<br> WAKAPI_SENTRY_SAMPLE_RATE_HEARTBEATS | 0.1 | Sentry 中追踪心跳请求的概率 |
所有配置选项请参考原始 README。
Wakapi 依赖于开源的 WakaTime 客户端工具。要为 Wakapi 收集统计数据,你需要对其进行设置。
~/.wakatime.cfg 文件。[settings]
# 将 localhost:3000 替换为你的 wakapi 服务器域名
api_url = http://localhost:3000/api
# 你的 Wakapi API 密钥(创建账户后从 Web 界面获取)
api_key = 406fe41f-6d69-4183-a4cc-121e0c524c2b
此外,你还可以选择设置客户端代理。