Skip to content

Secrets Management

Overview

Secrets are stored in three places depending on their use:

LocationPurposeAccess
GitHub SecretsCI/CD workflowsGitHub Actions only
Wrangler SecretsWorker runtimewrangler secret put
.dev.vars / .envLocal developmentGitignored files

GitHub Secrets

Used in GitHub Actions workflows:

SecretUsed ByPurpose
CLOUDFLARE_API_TOKENdeploy.ymlPages deploy + cache purge
CLOUDFLARE_API_KEYdeploy-chat-worker.ymlWorker deploy
CLOUDFLARE_EMAILdeploy-chat-worker.ymlWorker deploy auth
CLOUDFLARE_ACCOUNT_IDdeploy.yml, deploy-chat-worker.ymlAccount identifier
CLOUDFLARE_ZONE_IDdeploy.ymlCache purge zone
NEXT_PUBLIC_POSTHOG_KEYdeploy.ymlPostHog project token
NEXT_PUBLIC_POSTHOG_HOSTdeploy.ymlPostHog ingest URL
SLACK_HOMELAB_TOKENnotify.ymlSlack notifications

Wrangler Secrets

Set via wrangler secret put <NAME> for the chat worker runtime:

SecretPurpose
SLACK_BOT_TOKENSlack Bot OAuth token for posting messages
SLACK_SIGNING_SECRETVerify Slack webhook signatures
SLACK_CHANNEL_IDSlack channel for chat threads
TURNSTILE_SECRET_KEYCloudflare Turnstile verification
GEMINI_API_KEYGoogle Gemini API access
RATE_LIMIT_BYPASS_TOKENOwner/E2E bypass for rate limiting

Setting Secrets

bash
cd chat-worker
wrangler secret put GEMINI_API_KEY
# Enter value when prompted

wrangler secret put SLACK_BOT_TOKEN
wrangler secret put SLACK_SIGNING_SECRET
wrangler secret put SLACK_CHANNEL_ID
wrangler secret put TURNSTILE_SECRET_KEY
wrangler secret put RATE_LIMIT_BYPASS_TOKEN

Local Development Files

.env (Site)

bash
NEXT_PUBLIC_SITE_URL=https://anshulbisen.com
NEXT_PUBLIC_POSTHOG_KEY=<posthog-token>
NEXT_PUBLIC_POSTHOG_HOST=https://ph.anshulbisen.com
NEXT_PUBLIC_CHAT_WORKER_URL=http://localhost:8787

chat-worker/.dev.vars (Worker)

bash
GEMINI_API_KEY=<key>
RATE_LIMIT_BYPASS_TOKEN=<token>
SLACK_BOT_TOKEN=<token>
SLACK_SIGNING_SECRET=<secret>
SLACK_CHANNEL_ID=<channel-id>
TURNSTILE_SECRET_KEY=<key>

Both files are gitignored.

Rotation Procedures

  1. Cloudflare API tokens: Regenerate in Cloudflare dashboard → update GitHub Secrets
  2. Slack tokens: Regenerate in Slack app settings → wrangler secret put + update GitHub Secrets
  3. Gemini API key: Regenerate in Google AI Studio → wrangler secret put
  4. Turnstile keys: Regenerate in Cloudflare Turnstile dashboard → wrangler secret put
  5. PostHog key: Regenerate in PostHog project settings → update GitHub Secrets