What's already configured
The one-click deploy brings up two containers side by side: the Convex backend (serving the database, functions, and HTTP actions) and the Convex dashboard, connected to each other out of the box. By default the backend stores data in a local SQLite database inside a Docker-managed volume — enough to start building immediately, though production workloads are better moved to Postgres or MySQL. Both containers are managed by Docker Compose, so they restart automatically if the server reboots.
The backend listens on port 3210, with HTTP actions served separately on 3211, and the dashboard on 6791 — the panel's control panel maps these to your domain.
First login
Convex self-hosted authenticates via an admin key rather than a username and password — it's generated during the initial container startup and printed to the backend's logs.. Open the dashboard URL from your panel, paste in the admin key when prompted, and you land in the same table browser, log viewer, and function runner used in Convex Cloud.
Connecting your app
Point your frontend's Convex client at the backend URL instead of a cloud deployment URL, and set CONVEX_SELF_HOSTED_URL and the admin key as environment variables before running npx convex dev or npx convex deploy — the CLI refuses to mix cloud and self-hosted targets in the same project, so double-check which one your .env file points to. From there, schema changes, new functions, and scheduled jobs deploy the same way they would against Convex Cloud, just against your own server instead of Convex's infrastructure.







