Running in production
Mainnets
Section titled “Mainnets”A server with KITE_IS_TESTNET unset or false offers these networks: Ethereum, OP Mainnet, BNB Smart Chain, Polygon, Robinhood Chain, Base, Arbitrum One and Monad. Each needs your own Kite factory deployed on it before it can be configured.
Deploying
Section titled “Deploying”Kite is one process and a Postgres database. The Docker image is the simplest way to run it:
docker build -t kite-server .docker run -d --restart unless-stopped -p 3000:3000 --env-file .env kite-serverPut it behind a reverse proxy or load balancer that terminates HTTPS, and set KITE_PUBLIC_BASE_URL to the public HTTPS URL. Use a managed Postgres, or one you back up.
Background work, such as settling transfers and delivering webhooks, runs in the same process on a queue kept in Postgres, so there’s nothing else to run.
Checklist
Section titled “Checklist”- Strong, unique
KITE_ROOT_KEYandKITE_ENCRYPTION_KEY, kept in a secret manager. - A dedicated operator mnemonic, set as the operator of your Kite factory on each chain.
- A settlement address you control on each chain.
- Your own RPC URLs on each chain.
- A deposit notifier and a gas sponsor on each chain, and
KITE_PUBLIC_BASE_URLreachable from the internet. - Apps use API keys with only the scopes they need, never the root key.
- Webhooks verified with their signing secret.
-
KITE_ENABLE_DASHBOARD=falseif nobody should reach the dashboard from this URL; the checkout stays up.
Upgrading
Section titled “Upgrading”Pull the new version and restart. The Docker image applies migrations as it starts; from source, run them yourself first:
git pullbun install && bun install --cwd clientbun run migratebun run buildbun run startBackups
Section titled “Backups”Back up the database and keep KITE_ENCRYPTION_KEY with it: without the key, the provider keys and webhook secrets in a backup can’t be read. Funds are never in the database; they’re on-chain, in each transfer’s contract until it settles or refunds.
Monitoring
Section titled “Monitoring”GET /api/overview/infowith the root key answers when the server and database are up.- Watch your gas sponsor’s balance or policy limits, so settlements don’t stall.
- Failed webhook deliveries are listed on each webhook in the dashboard.