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

此外,你還可以選擇設定客戶端代理