Files
gerbeur/dev/instances.ts

67 lines
2.1 KiB
TypeScript

/**
* Lists the dev instances of gerbeur, each an API server and a Vite server of
* its own, run side by side so that federated sign-in between instances can be
* tried on one machine. In the devcontainer each is a service of
* `.devcontainer/compose.yaml`, which starts with it; outside, `deno task dev`
* starts them all, or `deno task dev <name>…` those named. Both run
* `dev/start.ts`. A new instance is an entry here, and a service there.
*
* Every instance follows the same rule, which `start.ts` applies:
*
* - its API at `http://localhost:<apiPort>`, its pages at
* `http://localhost:<webPort>`;
* - its database at `api/sql/<name>.db`, its uploads under
* `api/uploads/<name>/`;
* - the base `.env` for everything else, `env` overriding it.
*
* A new database starts with the user `admin` / `admin`. The instances may
* reach each other over http on localhost; whether one trusts another is up to
* its admin, on `/manage`.
*
* @module
*/
/** One instance of {@link INSTANCES}. */
export interface DevInstance {
/**
* Names its database and uploads, and prefixes its output. Lowercase
* letters, digits and hyphens.
*/
name: string;
/** The port of its API server, `GERBEUR_PORT`. */
apiPort: number;
/** The port of its Vite server, where its pages are. */
webPort: number;
/**
* `GERBEUR_*` settings of its own, over the base `.env`: a site name, an
* emoji or a style, to tell the instances apart, or which ways federated
* sign-in goes.
*/
env?: Record<string, string>;
}
/**
* The instances `deno task dev` starts, in this order. The first keeps the
* ports the single dev server always had, and takes no users of the others,
* while its own sign in to them, so that both switches of federated sign-in
* can be tried.
*/
export const INSTANCES: readonly DevInstance[] = [
{
name: "gerbeur",
apiPort: 8000,
webPort: 3000,
env: { GERBEUR_FEDERATION_INCOMING: "0" },
},
{
name: "musique",
apiPort: 8001,
webPort: 3001,
env: {
GERBEUR_SITE_NAME: "musique",
GERBEUR_SITE_EMOJI: "🎵",
GERBEUR_DEFAULT_STYLE: "kanagawa",
},
},
];