# Configuration

URL: https://docs.testvibe.com/self-hosting/configuration

A self-hosted TestVibe is configured **entirely from the environment** — there is no configuration file to edit. You set values in the bundle's `.env` file (or inject them as container environment variables), and the compose stack wires them into the right services.

## The Configuration Model

- **Environment only.** Everything the app needs comes from environment variables. The `.env` template documents the required values and the common optional ones.
- **Secret files.** Any secret can instead be provided as a *file* by setting `{NAME}_FILE` to a mounted path (Docker or Kubernetes secrets). The file's contents are used — handy when you don't want secrets in `.env` .
- **Disabled-by-default optionals.** Any optional integration you leave unset is simply switched off; the app still runs.

## Required Values

These are the values you must set before the stack will start:

| Value | Purpose | **Database password** | The PostgreSQL password, shared by the database, the schema job, and the app. | **Object-storage signing key** | Signs the short-lived read/write URLs the app and runner use for artifacts. | **Object-storage admin key** | Authenticates the app's server-to-server calls to the object store. | **Runner key** | Shared secret so only your app can dispatch test runs to the runner. | **Public base URL** | The URL users reach the app at — also used for OAuth callbacks and webhooks. 

info
The database, object-storage, and runner *wiring* (which provider, internal URLs) is already set by the compose file. You only supply the **secrets** and your **public URL** .

## Optional Integrations

Set these only if you want the feature. Unset means the feature is off and the app still runs.

| Area | What it enables | **GitHub / Google sign-in** | Social sign-in. Without it, accounts are local email/password. | **AI providers** | Test generation and vision compare. Hosted Claude/OpenAI keys, or a local model — see [AI models](/self-hosting/ai-models) . | **Email** | Verification and password-reset emails. Without it, those links are written to the app's logs instead of sent. | **Source repositories** | Connecting GitHub/GitLab repos as a project's source code. 

## Billing Is Off On-Prem

The cloud SaaS meters usage (session-seconds and AI tokens) and bills via Stripe. On a self-hosted instance, **credit gating and token metering are disabled** — there are no credits to buy and nothing is metered. Your only cost controls are your own AI provider's usage and the infrastructure you run.

## Related Help

- [Install](/self-hosting/install)
- [AI models](/self-hosting/ai-models)
- [Licensing](/self-hosting/licensing)
