mirror of
https://github.com/openfrontio/OpenFrontIO.git
synced 2026-06-22 18:56:38 +00:00
18efa4cd73
## Summary - load dotenv before constructing the server config so .env values are available - avoid misconfigured tunnels/host metadata when env vars were previously undefined ## Testing - npm test -- --runInBand
68 lines
1.9 KiB
TypeScript
68 lines
1.9 KiB
TypeScript
import cluster from "cluster";
|
|
import * as dotenv from "dotenv";
|
|
import { GameEnv } from "../core/configuration/Config";
|
|
import { getServerConfigFromServer } from "../core/configuration/ConfigLoader";
|
|
import { Cloudflare, TunnelConfig } from "./Cloudflare";
|
|
import { startMaster } from "./Master";
|
|
import { startWorker } from "./Worker";
|
|
|
|
// Load environment variables before we read configuration values derived from them.
|
|
dotenv.config();
|
|
const config = getServerConfigFromServer();
|
|
|
|
// Main entry point of the application
|
|
async function main() {
|
|
// Check if this is the primary (master) process
|
|
if (cluster.isPrimary) {
|
|
if (config.env() !== GameEnv.Dev) {
|
|
await setupTunnels();
|
|
}
|
|
console.log("Starting master process...");
|
|
await startMaster();
|
|
} else {
|
|
// This is a worker process
|
|
console.log("Starting worker process...");
|
|
await startWorker();
|
|
}
|
|
}
|
|
|
|
// Start the application
|
|
main().catch((error) => {
|
|
console.error("Failed to start server:", error);
|
|
process.exit(1);
|
|
});
|
|
|
|
async function setupTunnels() {
|
|
const cloudflare = new Cloudflare(
|
|
config.cloudflareAccountId(),
|
|
config.cloudflareApiToken(),
|
|
config.cloudflareConfigPath(),
|
|
config.cloudflareCredsPath(),
|
|
);
|
|
|
|
const domainToService = new Map<string, string>().set(
|
|
config.subdomain(),
|
|
// TODO: change to 3000 when we have a proper tunnel setup.
|
|
`http://localhost:80`,
|
|
);
|
|
|
|
for (let i = 0; i < config.numWorkers(); i++) {
|
|
domainToService.set(
|
|
`w${i}-${config.subdomain()}`,
|
|
`http://localhost:${3000 + i + 1}`,
|
|
);
|
|
}
|
|
|
|
if (!(await cloudflare.configAlreadyExists())) {
|
|
await cloudflare.createTunnel({
|
|
subdomain: config.subdomain(),
|
|
domain: config.domain(),
|
|
subdomainToService: domainToService,
|
|
} as TunnelConfig);
|
|
} else {
|
|
console.log("Config already exists, skipping tunnel creation");
|
|
}
|
|
|
|
await cloudflare.startCloudflared();
|
|
}
|