Alle secrets i Impulse AI administreres gjennom Doppler . Ingen .env-filer i produksjon — alt injiseres via Doppler.
┌─ doppler run ────────────> din terminal (lokal dev)
├─ DOPPLER_TOKEN_STG ──────> GitHub Actions (CI + staging)
(sentralt lager)├─ DOPPLER_TOKEN_PRD ──────> GitHub Actions (prod deploy)
├─ stg config ─────────────> Railway staging (via integrasjon)
├─ prd config ─────────────> Railway production (via integrasjon)
└─ prd config ─────────────> Vercel (via integrasjon)
Config Miljoe Brukes av devLokal utvikling Din maskin via doppler run stgStaging GitHub Actions (CI + staging deploy), Railway staging (via integrasjon) prdProduction GitHub Actions (prod deploy + iOS release), Railway production (via integrasjon), Vercel (via integrasjon)
# 1. Installer Doppler CLI
brew install dopplerhq/cli/doppler
# 3. Koble til prosjektet (doppler.yaml finnes i repo-roten)
# Start alt med secrets injisert:
doppler run -- pnpm --filter api dev
Variabel Beskrivelse Miljoer SUPABASE_URLSupabase API URL dev, stg, prd SUPABASE_SECRET_KEYSupabase service role key dev, stg, prd NEXT_PUBLIC_SUPABASE_URLSupabase URL (klient-synlig) dev, stg, prd NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEYSupabase anon key (klient-synlig) dev, stg, prd SUPABASE_PROJECT_REFProsjekt-referanse for CLI stg, prd SUPABASE_ACCESS_TOKENSupabase CLI access token stg, prd
Variabel Beskrivelse Miljoer ANTHROPIC_API_KEYAnthropic API-noekkel (Claude) dev, stg, prd VOYAGE_API_KEYVoyage AI API-noekkel (embeddings) dev, stg, prd AI_MODEL_FASTOverride: modell for raske operasjoner (default: claude-sonnet) dev (haiku for billigere lokal dev) AI_MODEL_BALANCEDOverride: modell for balanserte operasjoner (default: claude-sonnet) Ikke i Doppler (bruker default) AI_MODEL_QUALITYOverride: modell for kvalitetsoperasjoner (default: claude-sonnet) Ikke i Doppler (bruker default)
Variabel Beskrivelse Miljoer REDIS_URLRedis connection string dev, stg, prd API_PORTAPI-serverport (default: 3001) dev WEB_URLWeb-app URL dev, stg, prd NEXT_PUBLIC_API_URLAPI URL (klient-synlig) dev, stg, prd LOG_LEVELLoggnivaa (info/debug/warn) stg (info), prd (warn) NODE_ENVNode environment stg, prd (production) RAILWAY_API_URLRailway intern API-URL (settes automatisk) stg, prd TURBO_DISABLEDDeaktiver Turborepo caching i CI stg, prd
Variabel Beskrivelse Miljoer SENTRY_DSNSentry DSN for API feilsporing stg, prd (delt DSN)
Variabel Beskrivelse Miljoer SUPABASE_AUTH_EXTERNAL_APPLE_CLIENT_IDBundle ID (com.digiteers.impulseai) dev SUPABASE_AUTH_EXTERNAL_APPLE_SECRETApple client secret JWT (180d gyldighet) dev APPLE_AUTH_KEY_P8Apple Sign-In .p8 privatnoekkel (brukes til a generere secret) prd APPLE_AUTH_SECRET_EXPIRES_ATUtloepsdato for Apple auth secret (metadata) prd
APPLE_CLIENT_ID og APPLE_SECRET brukes kun av lokal Supabase via config.toml. Hosted Supabase (stg/prd) konfigureres i Supabase Dashboard → Authentication → Providers → Apple.
APPLE_AUTH_KEY_P8 lagres i Doppler prd slik at CI-workflows kan regenerere Apple-secreten automatisk. Se Apple Secret Rotation for detaljer.
Variabel Beskrivelse Miljoer APPLE_APP_SHARED_SECRETApp Store shared secret (kvitteringsvalidering) stg, prd (delt) GOOGLE_SERVICE_ACCOUNT_KEYGoogle Play service account (base64) prd GOOGLE_PUBSUB_VERIFICATION_TOKENGoogle PubSub verification prd
Variabel Beskrivelse Miljoer API_CLIENT_KEYKlient-autentisering for API (X-API-Key header) dev, stg, prd (unike per miljo) HEALTH_SECRETBeskytter health check-endepunkt dev, stg, prd ADMIN_DASHBOARD_TOKENAdmin dashboard-tilgang dev, stg, prd (delt noekkel) CONSOLE_ADMIN_TOKENConsole admin-autentisering (bearer token for /admin/* API) dev, stg, prd CONSOLE_ALLOWED_EMAILSKommaseparert allowlist for console-innlogging stg, prd DEV_API_TOKENAuth bypass-token for lokal testing dev DOCS_PASSWORDKlient-side passord for docs-siden stg, prd DISABLE_CACHEDeaktiver Redis cache dev
Variabel Beskrivelse APPLE_IDApple Developer e-post (janfredrik@digiteers.no) TEAM_ID10-tegn Apple Developer Team ID ITC_TEAM_IDApp Store Connect team ID MATCH_GIT_URLPrivat GitHub-repo for signing-sertifikater MATCH_PASSWORDPassord for Match-kryptering av sertifikater MATCH_GIT_BASIC_AUTHORIZATIONBase64-kodet git auth for match-repo ASC_KEY_IDApp Store Connect API Key ID ASC_ISSUER_IDApp Store Connect Issuer ID ASC_PRIVATE_KEYApp Store Connect .p8 privatnoekkel
GitHub Actions henter secrets fra Doppler via dopplerhq/secrets-fetch-action:
uses : dopplerhq/secrets-fetch-action@v1.3.0
doppler-token : ${{ secrets.DOPPLER_TOKEN_STG }}
To GitHub Secrets er konfigurert:
GitHub Secret Kobler til Brukes av DOPPLER_TOKEN_STGDoppler stg config ci.yml, db-deploy (staging) DOPPLER_TOKEN_PRDDoppler prd config deploy-production.yml, ios-release.yml, db-deploy (prod)
Doppler syncer automatisk til Railway via offisiell integrasjon. Secrets oppdateres i Railway innen sekunder etter endring i Doppler.
Doppler config Railway-service Railway Environment stgim-api (staging) Staging (api-stg.impulseai.app) prdim-api (production) Production (api.impulseai.app)
Sett opp via Doppler Dashboard → Integrations → Railway → Add Sync .
Doppler syncer automatisk til Vercel via offisiell integrasjon. Secrets oppdateres i Vercel innen sekunder etter endring i Doppler.
Doppler config Vercel-prosjekt Vercel Environment prdim-docs Production
Sett opp flere Vercel-prosjekter via Doppler Dashboard → Integrations → Vercel → Add Sync .
Gaa til Doppler Dashboard → prosjekt “im”
Velg riktig config (dev, stg, eller prd)
Klikk “Add Secret” → fyll inn navn og verdi
Gjenta for alle configs der variabelen trengs
Lokalt: Restart doppler run -- pnpm dev
CI: Automatisk tilgjengelig ved neste kjoering
Railway: Trigger ny deploy
Naar en noekkel maa byttes (kompromittert, utloept, eller rutine):
Generer ny noekkel hos tjenesteleverandoeren (Anthropic, Supabase, etc.)
Oppdater i Doppler — alle miljoer: dev, stg, prd
Verifiser lokalt — doppler run -- pnpm --filter api dev + test
Trigger deploy — push til main (staging) + /deploy-prod (production)
Verifiser i prod — sjekk Railway logs for feil
Revoke gammel noekkel — foerst etter at ny noekkel er verifisert i prod
Tjeneste Rotasjonsfrekvens Hvor genereres ny Anthropic API Key Ved behov console.anthropic.com → API Keys Voyage API Key Ved behov dash.voyageai.com Supabase Secret Key Ved behov Supabase dashboard → Settings → API Supabase Access Token Ved behov supabase.com → Account → Access Tokens ASC Private Key Aarlig App Store Connect → Integrations → API Keys Apple Auth Secret Hver 180. dag node scripts/generate-apple-secret.js (krever .p8-fil)Match Password Aldri (med mindre kompromittert) Velg selv
For ekstra beskyttelse paa produksjons-deploys:
Environment Beskyttelse Brukes av stagingIngen (auto-godkjent) CI staging deploys productionRequired reviewer Produksjons-deploys
Konfigurer i GitHub: Repo → Settings → Environments.