Share Better Auth Secrets Across Environments

Better Auth requires a 32-byte secret to sign sessions. Use different values per environment and never commit them.

Generate secrets

openssl rand -base64 32
# or
node -e "console.log(require('crypto').randomBytes(32).toString('base64'))"

Local development

apps/web/.env.local:

BETTER_AUTH_SECRET="base64string=="
NEXT_PUBLIC_BETTER_AUTH_URL="http://localhost:3000"

Vercel deployment

vercel env add BETTER_AUTH_SECRET production
vercel env add NEXT_PUBLIC_BETTER_AUTH_URL production

Self-hosted?

  • Use Docker secrets: docker secret create better_auth_secret secret.txt.
  • On Kubernetes, mount as Secret and inject via env vars.

Diagram

  flowchart LR
    A[Secret manager] --> B[CI/CD]
    B --> C[Vercel env vars]
    B --> D[Docker compose]

Rotate secrets periodically and revoke leaked ones by deleting associated sessions in the database.