
部署 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
此外,你還可以選擇設定客戶端代理。