Run from source
Running from source is the path for development, for reading the code alongside a live server, and for any deployment that wants to build its own image.
Prerequisites: Bun v1.3 or newer, and a MongoDB instance you can reach.
-
Clone and install:
Terminal window git clone https://github.com/RedFox-Soft/OAuth-server.ts.gitcd OAuth-server.tsbun install -
Create a
.envfile with the three required variables:ISSUER=http://localhost:3000MONGODB_URI=mongodb://localhost:27017DATABASE_NAME=OAuthBun loads
.envautomatically; nothing else needs configuring. Each variable is described in the environment variables reference.ISSUERis the canonical public URL of this server: theissof every token, the base of every endpoint in discovery, and the redirect target of the admin console client — so set it to its final value before the next step. -
Provision the database:
Terminal window bun run db:setup -
Bundle the console and the sign-in screens into
public/:Terminal window bun run build -
Start the server:
Terminal window bun startIt listens on port 3000. Open
http://localhost:3000/adminfor the console, orhttp://localhost:3000/.well-known/openid-configurationfor the discovery document.
What bun run db:setup provisions
Section titled “What bun run db:setup provisions”db:setup runs database/mongodb.ts against MONGODB_URI / DATABASE_NAME and is the one step
that turns an empty database into a working deployment:
- Collections, one per storage area the server writes to.
- Indexes: the TTL indexes that expire tokens, codes, sessions and interactions, and the unique e-mail index on each bucket’s end-user collection. It also drops stale expiry indexes left on collections that no longer write the field.
- The initial RS256 signing key, persisted through the
jwksStoreadapter — which is why keys are not an environment variable here. (If the server ever starts against an empty key store it generates and persists one itself.) - The admin panel seed: the reserved admin project, its “Administrators” user bucket with
registration closed, the first-party
admin-panelOAuth client whose redirect URI is$ISSUER/admin/callback, the reservedadmin-mcpagent client, the system group that holds containers no administrator manages, and the defaultredfoxend-user bucket.
It is idempotent: every write is an upsert or a create-if-absent, so running it again changes nothing that already exists. Re-run it after upgrading an existing install — a release that adds a collection, an index or a seeded document applies it here and nowhere else.
- The admin console needs a MongoDB-backed deployment. Setting
NODE_ENV=testswaps in the in-memory adapter, which does not persist the seed across restarts. - Server settings are read at boot from the config store and applied at module load, so a change in the console takes effect at the next restart. Every one of them is listed in the settings reference.