Back to Documentation
Deployment

Connect Your Services

Wire up databases, payments, email, AI and anything else your app talks to. Environment variables are the connection mechanism: one entry per service.

1How It Works

Anything that speaks HTTP or TCP and takes a credential can be connected to your site. There is no provider allowlist and no egress filtering on the servers.

Add one environment variable per service. Your values are:

  • Encrypted at rest: Using AES-256-GCM
  • Masked in the dashboard
  • Injected on deploy: Available to both the build and the running app on the next deployment

2Bring Your Own Anything

These are examples of the pattern, not a supported list. If it has a URL and a key, it works.

DATABASE_URL

Database: Neon, Supabase, Turso, PlanetScale, Aiven

REDIS_URL

Cache / KV: Upstash Redis, Redis Cloud

S3_ENDPOINT, S3_BUCKET, AWS_ACCESS_KEY_ID

Object storage: Cloudflare R2, S3, Backblaze B2

RESEND_API_KEY / SMTP_*

Email: Resend, SES, SendGrid, Postmark

STRIPE_SECRET_KEY

Payments: Stripe, Paystack, Flutterwave, M-Pesa (Daraja)

CLERK_SECRET_KEY, AUTH_SECRET

Auth: Clerk, Auth0, NextAuth

OPENAI_API_KEY

AI: OpenAI, Anthropic, DeepSeek, Groq

ALGOLIA_ADMIN_KEY

Search / vectors: Algolia, Meilisearch, Typesense, Pinecone, Qdrant

QSTASH_TOKEN

Queues / streams: Upstash QStash, external RabbitMQ or Kafka

AT_API_KEY

SMS / messaging: Africa's Talking, Twilio, Slack or Discord webhooks

SENTRY_DSN

Observability: Sentry, Better Stack, Axiom

MAPBOX_TOKEN

Maps / geocoding: Google Maps, Mapbox

3Example: Bring Your Own Database (Neon)

Connect a Neon Postgres database to your app:

  1. Create a project in Neon, then create the database
  2. Copy the pooled connection string (the -pooler host), not the direct one
  3. Add it to your site as DATABASE_URL
  4. Redeploy the site. Environment variables are applied at deploy time, not instantly
  5. Verify from your app with a query or health route that touches the database
DATABASE_URL=postgres://user:pass@ep-xxx-pooler.eu-central-1.aws.neon.tech/db?sslmode=require

4Neon Caveats

  • Cold starts: Free-tier Neon suspends idle computes, so the first request after a pause is slow
  • Use the pooled endpoint: Send app traffic through the -pooler host. With Prisma, set connection_limit=1 and keep the direct URL for migrations (directUrl)
  • Idle connections cost money: Serverless or long-lived workers that hold connections open keep a Neon compute awake
# Prisma: pooled URL for app traffic
DATABASE_URL=postgres://user:pass@ep-xxx-pooler.eu-central-1.aws.neon.tech/db?sslmode=require&connection_limit=1

Backups are your responsibility: A database that lives outside Berican is not covered by our backups.

5Example: Supabase

Same pattern as Neon. Use the pooler port for app traffic and the direct port for migrations:

6543

Pooler, for app traffic

5432

Direct, for migrations

6Already Built In

You don't need to wire these up yourself. The platform already provides:

  • Git deploys: Connect GitHub or GitLab and push to deploy
  • Object storage: Cloudflare R2
  • Domains, DNS and SSL: Cloudflare and Let's Encrypt
  • Payments: IntaSend, Paystack, M-Pesa
  • Email and notifications: Resend for outbound email, plus in-app and email notification channels
  • AI: Metered AI queries per plan, through our own quota layer
  • Operations: Backups, staging, firewall, CDN, SSH keys, WP-CLI

7Connecting Into Berican

Going the other way, your tools can talk to Berican:

  • API: API keys and /api/v1 for sites, domains and webhooks, plus the SDK and CLI
  • Outbound webhooks: Per account or per site, with an events[] list and HMAC-signed with a secret
  • Delivery tracking: Attempts are recorded, with 3 retries and backoff

Events include deployment.started and deployment.completed. Point them at Slack, Discord, Zapier or n8n.

8Bring Your Own

These aren't hosted for your app. Bring the service you prefer and put its credential in your environment variables:

  • Managed Redis or queues
  • Log drains
  • SMTP relay
  • Scheduled jobs
  • Managed search or vector databases

9Limits & Gotchas

  • Paid feature: Environment variables need an active plan. Without one, saving them is refused with an upgrade prompt
  • Static-only tier: Can hold environment variables, but anything that needs server-side secrets needs a plan that allows Node.js apps
  • WordPress sites: Use the bundled MariaDB database. Moving to an external database can't be done from the dashboard and requires hand-editing wp-config.php
  • Key format: Names must match [A-Za-z_][A-Za-z0-9_]*
  • Next deploy: Changes take effect on the next deployment